=
R の代入演算子との違いは何ですか<-
?
この例が示すように、演算子は若干異なることはわかっています
x <- y <- 5
x = y = 5
x = y <- 5
x <- y = 5
# Error in (x <- y) = 5 : could not find function "<-<-"
しかし、違いはこれだけでしょうか?
ベストアンサー1
の違いは代入演算子関数呼び出しで引数の値を設定するために使用すると、より明確になります。例:
median(x = 1:10)
x
## Error: object 'x' not found
この場合、x
は関数のスコープ内で宣言されるため、ユーザーワークスペースには存在しません。
median(x <- 1:10)
x
## [1] 1 2 3 4 5 6 7 8 9 10
この場合、x
はユーザーワークスペースで宣言されるため、関数呼び出しが完了した後に使用できます。
Rコミュニティでは、S-Plusの(非常に)古いバージョンとの互換性を保つために、関数シグネチャ以外では代入に for を使用するのが一般的です<-
。スペースは次のような状況を明確にするのに役立ちます。
x<-3
# Does this mean assignment?
x <- 3
# Or less than?
x < -3
<-
ほとんどの R IDE には、入力を容易にするためのキーボード ショートカットがあります。Architect ではCtrl+ =、 RStudio ではAlt+ -( macOS ではOption+ )、 emacs+ESS では+ (アンダースコア) です。-Shift-
=
より一般的な代入記号を使って書きたい<-
が、公開されているコード(例えばCRAN)では、次のいずれかを使用できます。tidy_*
パッケージ内の関数formatR
を自動的に=
に置き換えます<-
。
library(formatR)
tidy_source(text = "x=1:5", arrow = TRUE)
## x <- 1:5
x <- y = 5
「なぜはエラーをスローするのに はスローしないのか?」という質問に対する答えは、x <- y <- 5
「それはパーサーに含まれる魔法によるものです」です。Rの構文には以下が含まれます。曖昧なケースが多い何らかの方法で解決する必要があります。パーサーは、またはが使用されたかどうかに応じて、異なる順序で式のビットを解決することを選択し=
ます<-
。
何が起こっているかを理解するには、代入によって割り当てられた値が暗黙的に返されることを知っておく必要があります。たとえば、 を明示的に印刷すると、それがより明確にわかりますprint(x <- 2 + 3)
。
第二に、代入には前置記法を使うと分かりやすくなります。
x <- 5
`<-`(x, 5) #same thing
y = 5
`=`(y, 5) #also the same thing
パーサーはx <- y <- 5
次のように解釈します。
`<-`(x, `<-`(y, 5))
x <- y = 5
そうすると、
`<-`(x, `=`(y, 5))
しかし実際には次のように解釈されます
`=`(`<-`(x, y), 5)
これは、=
が よりも優先順位が低いためです。<-
?Syntax
ヘルプページ。