R中的绑定环境和函数作用域

时间:2019-05-22 03:39:17

标签: r

我希望定义一个在其作用域/环境中使用变量的函数(另一个函数),而不是在其定义环境中使用的变量。如何在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))的调用。对于某人解释为什么它也无法按预期工作的较低层次的原因也将有所帮助。谢谢!

1 个答案:

答案 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)