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

fot*_*ton 3 arrays r vector matrix

当我发现它时,我很惊讶x <- array(0, c(5,3,1)),例如,x[2,,]返回一个vector而不是二维array(或matrix).

为什么这个数组显然被解释为5个长度为3的向量而不是5个3×1的数组?如预期的那样attr(array(0, c(5,3,1)), "dim")收益率[1] 5 3 1,所以似乎最后一个维度并没有丢失.

我如何确保获得二维数组?我知道数组只不过是带有附加属性的向量,但我不明白这种明显的"不一致"行为.

请赐教:)我在另一个函数的上下文中使用三维数组,以便存储几个矩阵.通常,这些矩阵具有n×m的形状,其中特别是m可以是1(尽管通常更高).

Dir*_*tel 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> 
Run Code Online (Sandbox Code Playgroud)