eval.parent使用不正确的环境

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 =

在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 = 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
后进行求值。