我希望定义一个在其作用域/环境中使用变量的函数(另一个函数),而不是在其定义环境中使用的变量。如何在R中为函数调用指定适当的环境?
x <- 5
g <- function() x^2
g() # This will work okay
但是会抱怨找不到x
。
rm(x) # Remove x from the global environment
f <- function(x) {
g()
}
f(2) # This will complain that it can't find x.
我想避免在g
中定义函数f
,并使用类似evalq(g, envir=environment(f))
的调用。对于某人解释为什么它也无法按预期工作的较低层次的原因也将有所帮助。谢谢!
答案 0 :(得分:3)
在f
内将g
的环境设置为f
内的环境。参见标记为##的行。
g <- function() x^2
f <- function(x) {
environment(g) <- environment() ##
g()
}
f(2)
另一种方法是像这样定义g
:
g <- function() eval.parent(substitute(x^2))
f <- function(x) {
g()
}
f(2)
第三种方法是在g
中定义f
:
f <- function(x) {
g <- function() x^2
g()
}
f(2)