【问题标题】:R colon operator on list of matrices矩阵列表上的 R 冒号运算符
【发布时间】:2012-05-18 14:37:53
【问题描述】:

我在 R 中创建了一个矩阵列表。在列表中的所有矩阵中,我想“拉出”特定索引的矩阵元素的集合。我在想冒号运算符可能允许我在一行中实现这一点。例如,这里尝试访问列表中所有矩阵的 [1,1] 元素:

myList = list() #list of matrices
myList[[1]] = matrix(1:9, nrow=3, ncol=3, byrow=TRUE) #arbitrary data
myList[[2]] = matrix(2:10, nrow=3, ncol=3, byrow=TRUE)

#I expected the following line to output myList[[1]][1,1], myList[[2]][1,1]
slice = myList[[1:2]][1,1] #prints error: "incorrect number of dimensions"

上面代码的最后一行抛出错误“incorrect number of dimensions”。

作为参考,这是我正在尝试做的工作(但不太优雅)的实现:

#assume myList has already been created (see the code snippet above)
slice = c()
for(x in 1:2) {
    slice = c(slice, myList[[x]][1,1])
}
#this works. slice = [1 2]

有人知道如何在一行中完成上述操作吗?

请注意,我的“矩阵列表”可以替换为其他内容。如果有人可以建议一种替代的“矩阵集合”数据结构,允许我执行上述操作,那么这将得到解决。

也许这个问题很愚蠢...不过我真的很想有一个干净的单行实现。

【问题讨论】:

    标签: r list collections matrix indexing


    【解决方案1】:

    两件事。一、[[[的区别。来自?'['的相关句子:

    [、[[ 和 $ 之间最重要的区别是 [ 可以 选择多个元素,而其他两个选择一个 元素。

    所以你可能想做myList[1:2]。其次,您不能以您描述的方式组合子集操作。一旦您执行myList[1:2],您将获得两个矩阵的列表。列表通常只有一个维度,因此在您的情况下,myList[1:2][1,1] 是荒谬的。 (有关例外情况,请参阅 cmets。)

    您可以尝试使用lapply 代替:lapply(myList,'[',1,1)

    【讨论】:

    • 与问题完全无关,但响应“列表只有一个维度”:您可以使用dim() 为列表提供更多维度。例如foo <- list(1,2,3,4);dim(foo) <- c(2,2);foo[1,2];foo[[1,2]]。有时这很有用。
    • myList[1:2][1,1] 仍然是荒谬的,因为myList[1:2] 将返回一个只有一维的列表:)
    【解决方案2】:

    如果您的矩阵都具有相同的维度,您可以将它们存储在一个 3 维数组中。这肯定会使索引和提取元素更容易......

    ## One way to get your data into an array
    a <- array(c(myList[[1]], myList[[2]]), dim=c(3,3,2))
    
    ## Extract the slice containing the upper left element of each matrix
    a[1,1,]
    # [1] 1 2
    

    【讨论】:

      【解决方案3】:

      这行得通:

      > sapply(myList,"[",1,1)
      [1] 1 2
      

      编辑:哦,对不起,我在较早的答案结束时看到了几乎相同的想法。但是 sapply 可能更接近你想要的,无论如何

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-23
        相关资源
        最近更新 更多