【发布时间】:2011-09-01 19:24:48
【问题描述】:
假设我编写了一个使用一些变量的 R 脚本。当我运行它时,这些变量会使全局 R 环境变得混乱。为了防止这种情况,我如何将脚本中使用的变量范围限制在该脚本中?注意:我知道一种方法是使用函数,还有其他方法吗?
【问题讨论】:
-
你能否举一个简短的例子来说明一个 R 脚本以你想要阻止的方式修改你的全局环境?
-
当然:{n
假设我编写了一个使用一些变量的 R 脚本。当我运行它时,这些变量会使全局 R 环境变得混乱。为了防止这种情况,我如何将脚本中使用的变量范围限制在该脚本中?注意:我知道一种方法是使用函数,还有其他方法吗?
【问题讨论】:
只需将local=TRUE 参数用于source 并在您的全局环境之外的其他地方评估source。这里有一些方法可以做到这一点(假设您不希望能够访问脚本中的变量)。 foo.R 只包含print(x <- 1:10)。
do.call(source, list(file="c:/foo.R", local=TRUE), envir=new.env())
# [1] 1 2 3 4 5 6 7 8 9 10
ls()
# character(0)
mysource <- function() source("c:/foo.R", local=TRUE)
mysource()
# [1] 1 2 3 4 5 6 7 8 9 10
ls()
# [1] "mysource"
sys.source 可能是最直接的解决方案。
sys.source("c:/foo.R", envir=new.env())
如果您想访问变量,您还可以在附加环境中评估文件。请参阅?sys.source 中的示例了解如何执行此操作。
【讨论】:
sys.source 这样的东西进入环境?
您可以使用local 函数。
【讨论】:
local=TRUE in source。
local({...})(或您想要本地化的部分)中,然后获取或复制/粘贴(但感谢您指出简单的 local=TRUE 获取源代码)。
source 或 Rscript。