2012-03-30 148 views
3

当我发现x <- array(0, c(5,3,1)),例如, x[2,,]返回vector而不是二维array(或matrix)。从多维数组中返回一个n乘1的矩阵

为什么这个阵列被明显解释为长度为3的向量5而不是5 3×1阵列? attr(array(0, c(5,3,1)), "dim")如预期的那样产生[1] 5 3 1,所以看起来最后的维度没有丢失。

我怎样才能确保我得到一个二维数组?我明白数组只是具有附加属性的向量,但我不明白这种明显的“不一致”行为。

请赐教:)我使用的是另一个函数的上下文中的三维阵列以存储多个矩阵。通常,这些矩阵具有n乘m形状,其中m可以是1(尽管通常更高)。

回答

7

这是一个经典的方法,并且在R FAQ中也使用了十多年:使用drop=FALSE来防止将1行/列矩阵折叠为向量。

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> 
+0

谢谢你,德克。很抱歉,我没有搜索FAQ。我会在哪里放'drop = FALSE'? – fotNelton 2012-03-30 12:59:25

+0

它总是最后一个参数,与尺寸无关。见'help('[')'。 – 2012-03-30 13:00:27

+0

非常感谢。这非常有帮助! – fotNelton 2012-03-30 13:01:42