r - 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
解决方案
如果你改变 f 可能更容易看到:
f<-function(a) substitute(a)
g<-function(x) deparse(f(x))
h<-function(x) deparse(substitute(x))
在g(1:10)
,1:10
被传递给f
as x
,并substitute
返回x
,解析树(注意它不返回a
)。Deparse ing
然后将未评估的x
转换为"x"
在h
,1:10
不是通过另一个函数来获取substitute
. 未计算的表达式是 now 1:10
,not x
。Deparse inh
然后将未评估的1:10
转换为"1:10"
推荐阅读
- r - 在下一张幻灯片上绘制
- node.js - 错误:没有为平台定义响应:列出用户谷歌日历事件时为空
- excel - EXCEL - 输入数据时出现循环参考错误
- php - 如何在 PHP 的 include 函数中使用路径
- r - 文本参数导致绘图条形图中的错误
- nlp - 用于推理文本摘要的参考摘要也应该是提取摘要还是抽象摘要?
- python - 带有 win32com + tkinter 的简单电子邮件生成器
- java - Java 无法呈现菜单状态(Java GUI)
- angular - BehaviorSubject 不发出值
- unity3d - 我为移动和鼠标外观编写了一个脚本,移动有效,但鼠标外观不起作用