のマニュアルによると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
ですか?
それが言うように?"="
:
演算子 '<-' はどこでも使用できますが、演算子 '=' はトップ レベル (たとえば、コマンド プロンプトで入力された完全な式) または中括弧で囲まれた式のリストの部分式の 1 つとしてのみ使用できます。 .
=
引数内で toを使用quote
すると、最上位で使用されないため、中括弧または括弧で囲む必要がありますが、上記の規則が引き続き適用されるため、この式を評価する方法に注意する必要があります。
quote({x=y})
quote((x=y))
コメントに対処するには:
Gavin Simpsonが言ったように:基本的に、「トップレベル」は、プロンプトでコードを入力または実行するときであり、関数呼び出し内ではありません。例を挙げてみましょうz = quote(expr=x)
。 z = quote(...)
最上位で評価されますがexpr=x
、関数呼び出し内にあるため評価されません。
ではquote(expr=x)
、=
の値をx
関数の引数に代入するために使用されていますexpr
。そのため、トップレベルで作業しているわけではなく、関数の引数リスト (ペアリスト) を作成しています。quote(x=y)
失敗の理由は、引数quote
がないためです。x
トップレベルのコンテキストについては、セクション 1.4, ContextsのR Internalsで簡単に説明されています。