quote函数的有效表达式

时间:2012-10-11 21:10:12

标签: r

根据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=yx==y都是语法上有效的R表达式,不是吗?为什么quote() x=y失败?

1 个答案:

答案 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 InternalsSection 1.4, Contexts中简要介绍了顶级上下文。