【发布时间】:2015-09-01 19:48:02
【问题描述】:
为什么下面的嵌套函数 f2 不能按预期工作?
c = 2
f1 = function(a,b){
(a+b)*c
}
f1(1,2) # 6
f2 = function(a,b,c){
f1(a,b)
}
f2(1,2,c=3) # still 6, expect 9
更新
我发现以下修改有效:
f2 = function(a,b,c){
c <<- c
f1(a,b)
}
f2(1,2,c=3) # returns 9 as expected
但我对函数调用如何沿着环境路径搜索值感到困惑。如果我的问题只是由于 R 的懒惰评估,我只需要c <- c。然后新的c 将在调用f2 的环境中。由于f1 嵌套在f2 中,所以它的环境嵌套在f2 的环境中。所以当我在f1中需要c时,应该可以在父环境中找到c。然而事实证明,在f2的环境中,它只能找到全局的c,而不是c。
【问题讨论】: