eval.parent使用不正确的环境
在R中,我注意到一些关于eval.parent使用不正确的环境,r,eval,R,Eval,在R中,我注意到一些关于eval.parent及其在计算变量名时搜索的环境的奇怪行为。以下是一个例子: > f = function() {i = 1; g()} > g = function() {eval.parent(substitute(i))} > f() [1] 1 这正如预期的那样有效。表达式i在名为g的环境中计算,f的主体和1是结果 但是,如果我在g的主体中也定义了I,那么尽管在父帧中对表达式求值,仍将使用该值 > g = function() {i =
eval.parent
及其在计算变量名时搜索的环境的奇怪行为。以下是一个例子:
> f = function() {i = 1; g()}
> g = function() {eval.parent(substitute(i))}
> f()
[1] 1
这正如预期的那样有效。表达式i
在名为g
的环境中计算,f
的主体和1
是结果
但是,如果我在g
的主体中也定义了I
,那么尽管在父帧中对表达式求值,仍将使用该值
> g = function() {i = 2; eval.parent(substitute(i))}
> f()
[1] 2
在这种情况下,为什么结果是
2
?eval.parent
应完全忽略i=2
的定义,因为表达式是在父帧中计算的。在更仔细地检查了环境之后,eval.parent
对eval
的调用也被传递给了与f
帧对应的环境,正如sys.frames
在expression()中检查的那样在substitute
查找i
后进行求值。在expression()中包装substitute(i)我想您刚刚演示了eval.parent()
在substitute
查找i
后进行求值。