2012-06-08 10 views
6

The manual状態:"=" R演算子を関数で使用しないでください。

演算子「< - 」はどこでも使用することができ、オペレータに対し は「=」のみがトップレベル(例えば、コマンドプロンプトで入力した完全な発現の )で許可されていますまたは中括弧で囲まれた式のリスト内の部分式のうちの1つを とします。

The question hereは、関数呼び出しで使用された場合の違いを示します。しかし、関数定義では、それが正常に動作しているようです:

a = function() 
{ 
    b = 2 
    x <- 3 
    y <<- 4 
} 

a() 
# (b and x are undefined here) 

を手動でthe operator ‘=’ is only allowed at the top levelと述べ、なぜ?

language definitionでそれについては何もありません(リストされている無=オペレータ、どのような恥はありません!)

+0

これは、[セクション10.4.2インディックスと接頭辞演算子]のR-langに記載されています(http://cran.r-project.org/doc/manuals/R-lang.html#Infix-and-prefix-operators )、あなたが言及したヘルプエントリーにあるものよりはるかに多くは言わない。 –

+5

あなたが引用しているテキストは、 "最上位レベル** OR **の部分式の中括弧のリスト"となっています。あなたは部分式の括弧内のリストでそれを使用しています。許可されます。 – Andrie

+5

トップレベルでもカッコ内でもない表現を見つけるには、すばらしい長さに移動する必要があります。ここに1つあります。 'try(x < - f())'は問題ありませんが、 'try(x = f(x))'はそうではありません。代入演算子を追加するか、カッコを追加します –

答えて

12

テキストはat the top level OR in a braced list of subexpressions言う参照してください。あなたは部分式の括弧内のリストでそれを使用しています。許可されます。

トップレベルでもカッコ内でもない式を見つけるには、すばらしい長さに移動する必要があります。ここに1つあります。代入演算子を変更するか、中カッコを追加する必要があります。try(x <- f())は問題ありませんが、try(x = f(x))ではありません。

+0

Vincent、どうもありがとう私の例では 'b = 2'についての私の質問は間違っていますか?たぶん私は何かが間違っているので、より明白な方法で説明してください:) – TMS

+0

@トーマス私はあなたが有用であると私のコメントを追加しました。私はこれが質問に答えると思う。 – Andrie

+0

Andrie、ありがとう! – TMS

7

式ではないトップレベルにはifのような制御構造での使用が含まれます。たとえば、次のプログラミングエラーは不正です。

> if(x = 0) 1 else x 
Error: syntax error 

ここに述べたように:https://stackoverflow.com/a/4831793/210673

はまた、あなたが引用http://developer.r-project.org/equalAssign.html

+0

[second link](http://developer.r-project.org/equalAssign.html)に感謝します! * "許可され​​ている場合、' = '演算子は前のすべての代入(つまり、 '< - 'と他のもの)と意味的に等価です。* – TMS

3

他のものが<-との結果が異なる場合、system.timeのようないくつかの例以外では、主な相違点はよりphilisophicalです。 PerlのクリエーターであるLarry Wall氏は、「類似したものは類似しているはずで、異なったものは違って見えるはず」という行に沿って何かを言いました。私はさまざまな言語で「似ている」とみなされ、異なる "。今すぐRの割り当てのための2つのコマンドを比較してみましょう:

myfun(a <- 1:10) 

myfun(a = 1:10) 

いくつかは、我々がa1:10を割り当てる両方のケースでそう私たちがやっていることは似ていることを主張するだろう。

他の引数は、最初の呼び出しでは、我々はmyfunが呼び出されているのと同じ環境で、我々が作成した環境にある変数aに割り当てる第2の呼にある変数aに割り当てることです関数が呼び出され、その関数に対してローカルである場合は、2つの変数が異なります。

どのように使用するかは、割り当てを「類似」または「異なる」とみなすかどうかによって異なります。

私は個人的には<-を好んでいますが、私は聖戦を戦う価値はないと思います。

関連する問題