首页 > 解决方案 > R 怪癖:替代品的评估阶段

问题描述

我试图了解 R 的非标准评估。这是一个示例怪癖:

> f<-function(x) substitute(x)
> g<-function(x) deparse(f(x))
> h<-function(x) deparse(substitute(x))

> g(1:10)
[1] "x"
> h(1:10)
[1] "1:10"

怎么来的?g 和 h 结果之间差异的确切来源是什么?


编辑:deparse无关紧要。通过以下方式更容易演示:

> f<-function(a) substitute(a)
> g<-function(x) f(x)

> f(1:10)
1:10
> g(1:10)
x

标签: r

解决方案


如果你改变 f 可能更容易看到:

f<-function(a) substitute(a)
g<-function(x) deparse(f(x))
h<-function(x) deparse(substitute(x))

g(1:10),1:10被传递给fas x,并substitute返回x,解析树(注意它不返回a)。Deparse ing然后将未评估的x转换为"x"

h,1:10不是通过另一个函数来获取substitute. 未计算的表达式是 now 1:10,not x。Deparse inh然后将未评估的1:10转换为"1:10"


推荐阅读