7

マニュアルには次のように記載されています。

演算子'<-'はどこでも使用できますが、演算子'='は、最上位レベル(たとえば、コマンドプロンプトで入力された完全な式)でのみ、または式のブレースリストの部分式の1つとしてのみ使用できます。 。

ここでの質問は、関数呼び出しで使用した場合の違いに言及しています。しかし、関数定義では、正常に機能しているようです。

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

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

では、なぜマニュアルにそれが記載されているのですthe operator ‘=’ is only allowed at the top levelか?

言語定義にはそれについて何もありません(=演算子がリストされていない、なんて残念です!)

4

3 に答える 3

12

あなたが引用するテキストは言うat the top level OR in a braced list of subexpressions。部分式のブレースリストで使用しています。どちらが許可されます。

トップレベルでも中括弧内でもない式を見つけるには、かなりの時間を費やす必要があります。これが1つです。代入をtryブロック内にラップしたい場合があります。これはtry( x <- f() )問題ありませんが、try( x = f(x) )そうではありません。代入演算子を変更するか、中括弧を追加する必要があります。

于 2012-06-08T14:38:25.417 に答える
7

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

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

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

http://developer.r-project.org/equalAssign.htmlも参照してください

于 2012-06-08T13:34:36.543 に答える
3

他の例のようsystem.timeに、どこ<-=異なる結果が得られるかを示した例を除いて、主な違いはより哲学的です。Perlの作成者であるLarryWallは、「似たようなものは似ているべきであり、異なるものは異なって見えるべきである」という言葉に沿って何かを言いました。違う"。次に、Rの割り当てについて、2つのコマンドを比較してみましょう。

myfun( a <- 1:10 )

myfun( a = 1:10 )

1:10どちらの場合も私たちが割り当ててaいるので、私たちがしていることは似ている と主張する人もいます。

もう1つの引数は、最初の呼び出しで、呼び出さaれているのと同じ環境myfunにある変数に割り当て、2番目の呼び出しでa、関数が呼び出されたときに作成された環境にある変数に割り当てているということです。関数に対してローカルであり、これら2つのa変数は異なります。

したがって、どちらを使用するかは、割り当てを「類似」と見なすか「異なる」と見なすかによって異なります。

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

于 2012-06-08T19:25:30.170 に答える