矢量,矩阵和数组数据类型有什么区别?

Elo*_*ims 30 arrays types r

[R提供三种类型的存储同质对象的列表:vector,matrixarray.

据我所知:

  • vector 是1维数组的特例
  • matrix 是2维数组的特例
  • array 也可以有任何维度级别(包括1和2).

在载体上使用1D数组和在矩阵上使用2D数组有什么区别?我们需要在这些之间施放,还是会自动发生?

Rol*_*and 35

a matrix和2D 之间没有区别array:

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

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
Run Code Online (Sandbox Code Playgroud)

引用语言定义:

矩阵和数组只是具有属性的向量,dim并且可选地dimnames附加到向量.

[...]

dim属性用于实现数组.数组的内容以列主顺序存储在向量中,dim 属性是指定数组各自范围的整数向量.R确保矢量的长度是尺寸长度的乘积.一个或多个维度的长度可以为零.

向量与一维数组不同,因为后者具有长度为1的dim属性,而前者没有dim属性.

  • @Roland也许你应该编辑你的答案,包括"有隐式课程"的这些细节.对如何使用诸如`class()`,`mode()`和`typeof()`之类的函数进行详尽的解释可能是有用的,以最终确定向量,数组和矩阵之间的差异等. (6认同)
  • "......内部数组只是向量......" - 类函数为向量和一维数组提供不同结果的事实如何? (5认同)