根据quote(expr)
的手册:
expr:任何语法上有效的R表达式
虽然quote(x==y)
成功回复了x==y
,但quote(x=y)
失败了:
Error in quote(x = y) : supplied argument name 'x' does not match 'expr'
x=y
和x==y
都是语法上有效的R表达式,不是吗?为什么quote()
x=y
失败?
答案 0 :(得分:12)
正如?"="
中所述:
运算符'< - '可以在任何地方使用,而运算符'='是 只允许在顶级(例如,在完整的表达式中输入) 在命令提示符下)或作为支撑中的子表达式之一 表达列表。
在=
的参数中使用quote
并未在顶层使用它,因此您必须将其放在大括号或圆括号中,但您仍需要小心如何评估此表达式,因为上述规则仍然适用。
quote({x=y})
quote((x=y))
发表评论:
正如Gavin Simpson所说:基本上,“顶级”是指您在提示符下键入或运行代码而不在函数调用中。以z = quote(expr=x)
为例。 z = quote(...)
在顶级评估,但expr=x
不是因为它在函数调用中。
在quote(expr=x)
中,=
用于将x
的值分配给函数参数expr
;所以你不再在顶级工作,你正在构建一个函数参数列表(pairlist)。 quote(x=y)
失败的原因是因为quote
没有x
参数。
R Internals在Section 1.4, Contexts中简要介绍了顶级上下文。