10

のマニュアルによるとquote(expr)

expr: 構文的に有効な R 式

正常に呼び出しをquote(x==y)返しますが、失敗します:x==yquote(x=y)

Error in quote(x = y) : supplied argument name 'x' does not match 'expr'

x=yとはどちらx==yも構文的に有効な R 式ですね。quote()に失敗するのはなぜx=yですか?

4

1 に答える 1

12

それが言うように?"="

演算子 '<-' はどこでも使用できますが、演算子 '=' はトップ レベル (たとえば、コマンド プロンプトで入力された完全な式) または中括弧で囲まれた式のリストの部分式の 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で簡単に説明されています。

于 2012-10-11T21:15:06.873 に答える