`eval`使用函数的局部变量

时间:2014-03-01 18:45:02

标签: r eval

采购此代码:

a <- F
f1 <- function() a
f2 <- function() {
  a <- T
  eval(f1())
}

并且调用f2()将返回FALSE

如何修改eval的参数,以便f2()返回TRUE

1 个答案:

答案 0 :(得分:5)

你可以这样做:

a <- F
f1 <- function() a
f2 <- function() {
  a <- T
  environment(f1) <- new.env()
  eval(f1())
}
f2()
# [1] TRUE

虽然我不鼓励它。我们在此处所做的是将f1的环境更改为包含f2环境的环境,这意味着f1可以访问f2个变量通过“词汇”范围(好吧,这里的虚假词汇,我们将它短路)。

一般来说,正如Roman建议的那样,你应该明确地将参数传递给函数,否则你很快就会遇到麻烦。