当我发现x <- array(0, c(5,3,1))
时,我感到很惊讶,例如x[2,,]
会返回vector
而不是二维array
(或matrix
)。
为什么这个数组显然被解释为长度为3的5个向量而不是5个3×1的数组? attr(array(0, c(5,3,1)), "dim")
按预期产生[1] 5 3 1
,因此似乎最后一个维度不会丢失。
如何确保获得二维数组?我理解数组只不过是具有附加属性的向量,但我不明白这种明显的“不一致”行为。
请赐教:)我在另一个函数的上下文中使用了一个三维数组,以便存储几个矩阵。一般来说,这些矩阵具有n-m的形状,特别是m可以是1(尽管通常更高)。
答案 0 :(得分:7)
这是一个经典之作,并且已经在R FAQ中使用了十多年:使用drop=FALSE
来防止将1行/ col矩阵折叠到矢量。
R> M <- matrix(1:4,2,2)
R> M
[,1] [,2]
[1,] 1 3
[2,] 2 4
R> M[,1]
[1] 1 2
R> M[,1,drop=FALSE]
[,1]
[1,] 1
[2,] 2
R>