【发布时间】:2021-11-16 20:57:14
【问题描述】:
这个问题类似于Source script to separate environment in R, not the global environment,但有一个关键的转折。
考虑一个引用另一个脚本的脚本:
# main.R
source("funs.R")
x <- 1
# funs.R
hello <- function() {message("Hi")}
我想获取脚本main.R 并将所有内容保存在“本地”环境中,例如env <- new.env()。通常,可以调用source("main.R", local = env) 并期望一切都在env 环境中。但是,这里不是这样:x 是env 的一部分,但函数hello 不是!它位于.GlobalEnv。
问题:如何在 R 中将脚本提供给单独的环境,即使该脚本本身提供其他脚本,并且不修改其他正在提供的脚本?
感谢您的帮助,如果我能澄清任何事情,请告诉我。
编辑 1:更新问题,明确指出不能修改作为源的脚本(假设它们不受您的控制)。
【问题讨论】:
-
虽然你不能修改源脚本,但你可以阅读它们..所以你不能将它们作为字符串阅读,修改字符串,然后执行它们..(例如使用 eval 和解析..)?它应该至少适用于第一级脚本..但是你有几个级别的源脚本吗?
-
一般来说,修复源代码(例如,通过使其成为一个包)(必要时进行控制)是最好的,其次是隔离,以防您不想这样做。在某些情况下,可能会有更简单的解决方案——但通常不是这样。这听起来像是一个 xy 问题,但您需要提供更多背景才能解决它。
标签: r r-environment