R抽出演算子:[vs $ [duplicate]

Sep 28 2020

相違点と類似点について、インターネットで複数のポストがある[とは$。$インタラクティブな使用のみに推奨され、プログラミングには推奨されない投稿がいくつかあります。しかし、これが好みなのか、それともこの考えの背後にある説明があるのか​​、私にはわかりません。

ここで、パッケージまたは関数を作成しているとmtcars[["mpg"]]しmtcars$mpgましょう。名前で要素を抽出している場合(たとえば)、なぜ使用を避ける必要があるのでしょうか。

回答

5 GregorThomas Sep 28 2020 at 17:42

[[との間で本当に重要な2つの違いがあります$:

  1. [[-文字列で機能します(つまり、変数置換をサポートします)、$そうではありません。あなたが持っている場合はmy_var = "mpg"、あなたが使用することができmtcars[[my_var]]ますが、使用するには良い方法がないmy_varとは$。

  2. $列名の一部が明確な場合、自動完了します。mtcars$m返されmpg、列がmtcars[["m"]]返されますNULL。複数の列が「d」で始まるため、mtcars$dが返さNULLれます。

#1は[[、プログラミングの柔軟性を高めます。プログラムで使用する場合、文字列として格納されている列名を操作することは非常に一般的です。

#2は$より危険になります-プログラミングで省略された列名を使用するべきではありませんが、インタラクティブな使用ではそれは素晴らしくて迅速です。(ただし、そのIDEを使用している場合、これはRStudioのオートコンプリート機能ではほとんど意味がありません。)

2 StéphaneLaurent Sep 28 2020 at 17:40

$部分一致を行います。xxxデータフレームdatに名前が付けられた列がある場合、列dat$xxを返しxxxます(列もある場合を除くxx)。これは危険な場合があります。

私はいつも[["..."]]別の理由で使用しています。私はRStudioを使用しており、文字列には適切な強調表示がありますが、$。による強調表示はありません。