从多维数组返回n×1矩阵

时间:2012-03-30 12:55:16

标签: arrays r vector matrix

当我发现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(尽管通常更高)。

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>