1

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

データフレーム タイプの [1]、[1,]、[,1]、[[1]] の違いに混乱しています。

私が知っているように、[1,] は a の最初の行をフェッチしmatrix、[,1] は最初の列をフェッチします。[[1]] は a の最初の要素を取得し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ますが、なぜそれらすべてがデータフレームで使用できるのですか?

これらの使用法の違いを説明できる人はいますか?

4

1 に答える 1

4

Rでは、演算子は1つのデータ型にのみ使用されません。演算子は、任意のデータ型(S3 / S4クラスなど)に対してオーバーロードできます。

実際、これはdata.framesの場合です。

  • data.framesはリストであるため、[i]および[[i]](および$)はリストのような動作を示します。

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

あなたも定義を見ることができます、それらはS3システムでコード化されています(そうmethodname.class):

> `[.data.frame`

> `[[.data.frame`

(バッククォートは関数名を引用します。そうでない場合、Rは演算子を使用しようとし、構文エラーが発生します)

于 2012-06-04T11:01:14.443 に答える