2

私は関数 system.time() を使用していますが、驚くべきことを発見しました。「<-」の代わりに割り当て記号「=」をよく使用します。ほとんどの R ユーザーが「<-」を使用していることは承知していますが、私のコードでは「=」の方がわかりやすいと思います。したがって、「=」を使用して関数 system.line() に値を割り当てると、次のエラー メッセージが表示されました。

コードは次のとおりです。

a = matrix(1, nrow = 10000)

require(stats)
system.time(a[,1] = a[,1]*2) #this line doesn't work 
#Error: unexpected '=' in "system.time(a[,1] ="
system.time(a[,1] = a[,1]*2) #this line works
system.time(for(i in 1:100){a[,1] = a[,1]*i}) #this line works!!!!

私が見つけた:「=」と「<-」の間に技術的な違いはありますか?これは、「=」は関数で引数を割り当てるための記号であるため、割り当てる関数で「=」を使用できないことを説明しています。しかし、それが時々機能することに驚きました (次のコードを参照)。

ここで機能する理由を知っている人はいますか?(また、最初のケースで機能しないのは、a[,1] が関数 system.time() のパラメーターではないためです...)

どうもありがとうございました。エドウィン。

4

2 に答える 2

4

コードを{ ... }中かっこで囲むと機能します。

system.time({a[,1] = a[,1]*2})
   user  system elapsed 
      0       0       0 

から?"<-"

演算子 <- および = は、それらが評価される環境に代入します。演算子 <- はどこでも使用できますが、演算子 = は最上位 (たとえば、コマンド プロンプトで入力された完全な式) または中括弧で囲まれた式のリストの部分式の 1 つとしてのみ使用できます。

于 2012-11-19T17:12:38.530 に答える
1

system.time(a[,1] = a[,1]*2)等号は代入を意味するものではなく、「名前付き引数」をバインドしようとしていると解釈されます。しかしsystem.time、その名前の引数はありません。

system.time(for(i in 1:100){a[,1] = a[,1]*i})等号では、実際に割り当てを行っています。そしてそれはうまくいきます。

あなたが書いsystem.time(a[,1] <- a[,1]*2)た場合<-、引数のバインディングではなく代入のみを意味することができ、それは機能します!

しかし、注意してください!あなたが書いた場合system.time(a[,1] < - a[,1]*2)、それも「動作します」が、おそらくあなたが意図したことをしません!

于 2015-04-21T09:17:13.290 に答える