Rには、vector
、matrix
、およびarray
という同種のオブジェクトのリストを格納するための3つのタイプがあります。
私の知る限り:
vector
は、1次元配列の特殊なケースですmatrix
は2次元配列の特殊なケースですarray
には、任意の次元レベル(1および2を含む)も設定できます。ベクトル上の1D配列と行列上の2D配列の使用の違いは何ですか?それらの間でキャストする必要がありますか、それとも自動的に発生しますか?
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属性を持たないためです。