【发布时间】:2016-03-03 03:31:12
【问题描述】:
R 提供了三种类型来存储同质对象列表:vector、matrix 和 array。
据我所知:
-
vector是一维数组的特例 -
matrix是二维数组的特例 -
array也可以有任何维度级别(包括 1 和 2)。
在向量上使用一维数组和在矩阵上使用二维数组有什么区别?我们是否需要在它们之间进行转换,还是会自动发生?
【问题讨论】:
R 提供了三种类型来存储同质对象列表:vector、matrix 和 array。
据我所知:
vector 是一维数组的特例matrix 是二维数组的特例array 也可以有任何维度级别(包括 1 和 2)。在向量上使用一维数组和在矩阵上使用二维数组有什么区别?我们是否需要在它们之间进行转换,还是会自动发生?
【问题讨论】:
matrix 和 2D array 之间没有区别:
> x <- matrix(1:10, 2)
> y <- array(1:10, c(2, 5))
> identical(x, y)
[1] TRUE
...
matrix 只是一个更方便的构造函数,还有很多函数和方法只接受二维数组(也就是矩阵)。
在内部,数组只是具有维度属性的向量:
...
> 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 的 dim 属性,而前者没有 dim 属性。
【讨论】:
class()、mode() 和typeof() 等函数来最终确定向量、数组和矩阵等之间的差异可能很有用。