【发布时间】:2014-06-29 06:15:16
【问题描述】:
这里有四个函数,后一个包裹前一个。
a <- 0
f1 <- function(expr) {
a1 <- 1
eval(expr)
}
f2 <- function(expr) {
a2 <- 2
f1(expr)
}
f3 <- function(expr) {
a3 <- 3
f2(expr)
}
f4 <- function(expr) {
a4 <- 4
f3(expr)
}
做以下实验:
> f4(a)
0
按预期工作。但是如果我们调用
f4(a4) eval(expr) 中的错误:找不到对象“a4”
> f4(a3)
Error in eval(expr) : object 'a3' not found
...
> f2(a2)
Error in eval(expr) : object 'a2' not found
> f2(a1)
Error in eval(expr) : object 'a1' not found
> f1(a1)
Error in eval(expr) : object 'a1' not found
我检查每个函数体的本地环境和父环境f3的父框架是f4的本地环境,...,f1的父是f2的body。是否清楚地解释了为什么会发生这种情况?我怎样才能摆脱这个问题以使代码工作,以便函数调用应该允许后续函数(如f3)找到定义的符号(例如a4)?
【问题讨论】:
标签: r expression eval