Ответ 1
Как говорится в ?"="
:
Оператор '& может использоваться везде, тогда как оператор' = разрешено только на верхнем уровне (например, в полном выражении, набранном в командной строке) или как одно из подвыражений в скобках список выражений.
Использование =
в аргументе quote
не использует его на верхнем уровне, поэтому вам нужно поместить его в скобки или круглые скобки, но вы все равно должны быть осторожны, как вы оцениваете это выражение, поскольку правила выше будет применяться.
quote({x=y})
quote((x=y))
Чтобы отправить комментарий:
Как сказал Гэвин Симпсон: в основном "верхний уровень" - это когда вы вводите или запускаете код в приглашении и не находитесь в вызове функции. Возьмите z = quote(expr=x)
, например. z = quote(...)
оценивается на верхнем уровне, но expr=x
не потому, что он внутри вызова функции.
В quote(expr=x)
, =
используется для назначения значения x
аргументу функции expr
; поэтому вы больше не работаете на верхнем уровне, вы создаете список аргументов функции (парный список). Причина quote(x=y)
не выполняется, потому что quote
не имеет аргумента x
.
Контекст верхнего уровня кратко описан в R Internals, в Раздел 1.4, Контексты.