1. ホーム
  2. r

[解決済み] Rのdataframeの[1], [1,], [,1], [[1]]はどう違うのですか?[重複】について]

2022-03-03 10:40:39

質問

<ブロッククオート

重複の可能性があります。
Rで、リストの要素にアクセスするための[]表記と[[]]表記の違いは何ですか?

データフレーム型の[1], [1,], [,1], [[1]]の違いに戸惑っています。

私が知っているように、[1,]は、[2,]の最初の行をフェッチします。 matrix [,1]は最初の列を取得します。[の最初の要素を取得します。 list .

のドキュメントを確認しましたが data.frame と書かれています。

データフレームとは、同じ行数で、同じ値を持つ変数のリストです。 一意な行名

そして、使い方をテストするために、いくつかのコードを入力しました。

>L3 <- LETTERS[1:3]
>(d <- data.frame(cbind(x=1, y=1:10), fac=sample(L3, 10, replace=TRUE)))
  x  y fac
1  1  1   C
2  1  2   B
3  1  3   C
4  1  4   C
5  1  5   A
6  1  6   B
7  1  7   C
8  1  8   A
9  1  9   A
10 1 10   A
> d[1]
   x
1  1
2  1
3  1
4  1
5  1
6  1
7  1
8  1
9  1
10 1
>d[1,]
  x y fac
1 1 1   C
>d[,1]
 [1] 1 1 1 1 1 1 1 1 1 1
>d[[1]]
 [1] 1 1 1 1 1 1 1 1 1 1

私が戸惑ったのは [1,] と [,1] が使われているのは matrix . [1]] は list で使用され、[1]は vector しかし、なぜこれらすべてがdataframeで利用可能なのでしょうか?

これらの使い方の違いについて、どなたか教えてください。

どのように解決するのですか?

R では、あるデータ型に対して演算子は使用されません。 のみ . 演算子は好きなデータ型にオーバーロードすることができます(例:S3/S4クラスも)。

実際、data.frameがそうですね。

  • data.frameはリストなので [i][[i]] (そして $ はリストのような振る舞いをします。

  • 行、列のインデックスは、表では直感的な意味を持ち、data.frame は表のように見えます。おそらく、それが data.frame [i, j] のメソッドが定義された理由です。

定義を見ることもできます、それらはS3システムでコーディングされています(だから methodname.class ):

> `[.data.frame`

そして

> `[[.data.frame`

(バックティックは関数名を引用しています。そうしないと、R が演算子を使おうとして構文エラーになります)