2012-10-11 57 views
10

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' 

Both x=y and x==y是语法上有效的R表达式,不是吗?为什么quote()失败x=y

回答

11

正如它说在?"="

运算符“< - ”可以在任何地方使用,而运算符“=”是 只允许在顶部电平(例如,在完整的表达类型 在命令提示符处)或者作为表达式列表中的一个子表达式的子表达式之一。

在参数quote使用=没有使用它在顶层,所以你必须把它放在括号或括号,但你仍然有你如何评价这种表达要小心,因为上述规则仍然适用。

quote({x=y}) 
quote((x=y)) 

为了解决评论:

由于加文·辛普森说:基本上,“顶级”,是当你输入或在提示符下运行的代码,而不是一个函数调用中。以z = quote(expr=x)为例。 z = quote(...)在顶层进行评估,但expr=x不是因为它在函数调用中。

quote(expr=x),=正被用于将x的值赋值给函数参数expr;所以你不再在顶层工作,你正在构造一个函数参数列表(pairlist)。 quote(x=y)失败的原因是因为quote没有x参数。

R InternalsSection 1.4, Contexts中简要描述了顶级上下文。

+0

很好的回答!谢谢 – Ali

+0

如果你认为它是“一个很好的答案”,你不应该接受它吗? –

+0

@Jilber:没错!我正在等待它! – Ali