2013-05-13 13 views
6
> within(list(a="a",b="b"), c="c") 
Error in eval(expr, envir, enclos) : argument is missing, with no default 
> within(list(a="a",b="b"), c<-"c") 
$a 
[1] "a" 

$b 
[1] "b" 

$c 
[1] "c" 

私は、これらの2つが同等であるべきではない理由は正確にはわかりません。 ...のために、=バージョンがcという名前の引数として解釈されているようです。この動作を無効にする方法はありますか?私は試しましたが、それも失敗しました。なぜ=と<は内部で同じではないのですか?

within(list(a="a",b="b"), `c`="c") 

でも、それは失敗します。

+1

'system.time(X = rnorm(1e300))は' doesnのと同じ理由のために仕事はありません。 –

+7

'='が関数に渡された式の先頭の関数呼び出しである場合、 '='は引数の代入と解釈されます。 –

+0

割り当て内の=記号は関数内でファンキーであり、Rは代入であるか混乱しているかを混同します。引数。 –

答えて

8

c="c"(またはその形式の句)が、指定された引数として解釈されているということは間違いありません。そして、いいえ、それを無効にする方法はありません。おそらくRパーサーのレベルで処理されます。

=<-間のこの差は、?"<-"

を文書オペレータの< - 'で、「=」、それらが評価される 環境に割り当てます。演算子 '< - 'は、 のどこでも使用できますが、演算子 '='はトップレベルでしか使用できません(例:コマンドプロンプトで完全な式に など)。または、補助式のの1つ式の

「ブレースされた式のリスト」の最も重要な例は、関数本体です。 is(body(plot.default)),length(body(plot.default))

+0

ありがとうございます。このようなことに遭遇するたびに、私はRパーサがどのように動作するかについてもう少し学ぶと思います。さて、私はフリーの夏か2〜3人でCソースを歩き、それが本当に*働いているかを把握していれば:-) –

+0

@AriB.Friedman - こんにちは、私に行こうと誘惑しないでください自分のため!私は最終的に、 "braced subexpressions"への参照が実際に得ていたものが何であるかを理解することができて嬉しかった。 –

+0

@MatthewPlourdeの提案をあなたのものと組み合わせると、(引用({5^2}) ''は '{1"} {'"(body(plot.default))と同じように '' 'language" 'を返します。 –

3

ジョシュは答えた、 "なぜ" が、OPの提案では、ここにあるもう一つの "どのように":

within(list(a="a",b="b"), "="(c,"c")) 
# $a 
# [1] "a" 
# 
# $b 
# [1] "b" 
# 
# $c 
# [1] "c" 
関連する問題