可变范围或父环境

时间:2017-04-19 14:44:04

标签: r scope

考虑下面函数的函数:

http://myfaces.apache.org/tomahawk21

为什么f1=function(){ f3=function() print(a) f2=function() { print(a) a=3 f3()} print(a) a=2 f2() a=1 f1() [1] 1 [1] 2 [1] 2 考虑f2()其父环境,但f1()不考虑f3()其父环境?我希望f2()打印f3(),设置在3,而不是f2()
如果在2内定义了变量,则f2()无法找到它:

f3()

1 个答案:

答案 0 :(得分:1)

  

为什么f2()会将f1()视为其父环境

因为它是在f1内定义的。

  

f3()不考虑f2()其父环境?

因为它未在f2内定义。

您需要区分包含环境和父框架f2是您通话中f3父框架。但f1无论如何都是它的包含环境。

另请参阅What is the difference between parent.frame() and parent.env() in R; how do they differ in call by reference?Hadley’s introduction into environments