eval.parent使用不正确的环境

时间:2015-07-08 21:30:45

标签: r eval

在R中,我注意到eval.parent和评估变量名时搜索的环境有一些奇怪的行为。以下是一个例子:

> f = function() {i = 1; g()}
> g = function() {eval.parent(substitute(i))}
> f()
[1] 1

这可以按预期工作。表达式i在名为g的环境中进行评估,f的正文为1,结果为i

但是,如果我在g的正文中定义> g = function() {i = 2; eval.parent(substitute(i))} > f() [1] 2 ,那么尽管在父框架中计算了表达式,但仍会使用该值。

2

为什么结果i = 2在这种情况下? eval.parent的定义应该被eval完全忽略,因为表达式是在父框架中计算的。在更仔细地检查环境后,eval.parentf的调用也会传递到与sys.frames检查的{{1}}框架相对应的环境。

0 个答案:

没有答案