我正在尝试使用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)被忽略?
答案 0 :(得分:2)
foo
已在全球环境中定义。在第一次调用eye_foo
时,在创建foo的环境中找不到ii
的值。然后你找到了一个值,得到了预期的结果。就这么简单。
> environment(foo)
<environment: R_GlobalEnv>
?'function'
?globalenv
一般来说,人们通过将参数传递给函数来避免这个难题。