如何确保在调用函数时不允许从全局环境中获取变量?
我想以下代码给我一个错误。原因是因为我可能输错了z(我想键入y)。
z <- 10
temp <- function(x,y) {
y <- y + 2
return(x+z)
}
> temp(2,1)
[1] 12
我猜测答案与环境有关,但我还没有理解这些。
有没有办法让我想要的行为默认(例如通过设置选项)?
答案 0 :(得分:5)
environment(temp) = baseenv()
另请参阅http://cran.r-project.org/doc/manuals/R-lang.html#Scope-of-variables和?environment
。
答案 1 :(得分:4)
> library(codetools)
> checkUsage(temp)
<anonymous>: no visible binding for global variable 'z'
该功能不会改变,因此无需在每次使用时进行检查。 findGlobals
更通用,更隐蔽。像
Filter(Negate(is.null), eapply(.GlobalEnv, function(elt) {
if (is.function(elt))
findGlobals(elt)
}))
可以访问环境中的所有函数,但是如果有多个函数那么可能是时候考虑编写一个包(它并不难)。
答案 2 :(得分:1)
environment(fun) = parent.env(environment(fun))
(为了清晰起见,我使用'fun'代替你的函数名'temp')
这将从搜索路径中删除“工作空间”环境(.GlobalEnv)并保留其他所有内容(例如所有包)。