我试图使用R的词法范围与2级函数,但R 3.0.2中的行为似乎并不正确.
foo = function() print(ii)
eye_foo = function( ) {
ii = 1 # (A)
foo()
}
eye_foo() # (B)
ii=2 # (C)
eye_foo() # (D)
我希望(B)打印“1”,绑定到(A)中定义的变量.而是(B)给出错误消息“打印错误(ii):对象’ii’未找到”.但是,在全局范围内的(C)中定义ii之后,(D)在该过程中打印“2”忽略(A).
为什么(A)被忽略?
最佳答案 foo是在全球环境中定义的.在第一次调用eye_foo时,在创建foo的环境中找不到ii的值.然后你找到了一个值,得到了预期的结果.就那么简单.
> environment(foo)
<environment: R_GlobalEnv>
?'function'
?globalenv
通常人们通过将参数传递给函数来避免这个难题.