【问题标题】:Return a n-by-1 matrix from a multi-dimensional array从多维数组中返回一个 n×1 矩阵
【发布时间】:2012-04-14 03:56:34
【问题描述】:

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

【问题讨论】:

    标签: arrays r vector matrix


    【解决方案1】:

    这是一个经典,并且在 R 常见问题解答中也出现了十多年:使用 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> 
    

    【讨论】:

    • 谢谢你,德克。很抱歉我没有搜索FAQ。我应该把drop=FALSE放在哪里?
    • 它始终是最后一个参数,与维度无关。见help('[')
    • 非常感谢。这帮助很大!
    猜你喜欢
    • 2013-06-23
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-09
    • 1970-01-01
    相关资源
    最近更新 更多