根据手册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
?
根据手册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
?
正如它所说?"="
:
运算符“<-”可以在任何地方使用,而运算符“=”只允许在顶层使用(例如,在命令提示符下键入的完整表达式中)或作为表达式括号列表中的子表达式之一.
=
在参数中使用 to不是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的第 1.4 节,上下文中进行了简要描述。