web-dev-qa-db-ja.com

ベクトル、行列、配列のデータ型の違いは何ですか?

Rには、vectormatrix、およびarrayという同種のオブジェクトのリストを格納するための3つのタイプがあります。

私の知る限り:

  • vectorは、1次元配列の特殊なケースです
  • matrixは2次元配列の特殊なケースです
  • arrayには、任意の次元レベル(1および2を含む)も設定できます。

ベクトル上の1D配列と行列上の2D配列の使用の違いは何ですか?それらの間でキャストする必要がありますか、それとも自動的に発生しますか?

28
Eloims

matrixと2D arrayの間に違いはありません。

> x <- matrix(1:10, 2)
> y <- array(1:10, c(2, 5))
> identical(x, y)
[1] TRUE
...

matrixは、より便利なコンストラクターであり、2D配列(別名、行列)のみを受け入れる多くの関数とメソッドがあります。

内部的には、配列は次元属性を持つ単なるベクトルです:

...
> attributes(x)
$dim
[1] 2 5

> dim(x) <- NULL
> x
 [1]  1  2  3  4  5  6  7  8  9 10
> z <- 1:10
> dim(z) <- c(2, 5)
> is.matrix(z)
[1] TRUE

言語定義 を引用するには:

行列と配列は、ベクトルに属性dimとオプションでdimnamesが付加された単純なベクトルです。

[...]

dim属性は、配列を実装するために使用されます。配列の内容は列優先順でベクトルに格納され、dim属性は配列のそれぞれの範囲を指定する整数のベクトルです。 Rは、ベクトルの長さが次元の長さの積であることを保証します。 1つ以上の次元の長さがゼロになる場合があります。

ベクトルは1次元配列と同じではありません。後者は長さが1のdim属性を持っているのに対し、前者はdim属性を持たないためです。

34
Roland