【问题标题】:Extract row from a matrix in a list in R从R中列表中的矩阵中提取行
【发布时间】:2014-02-09 03:57:49
【问题描述】:

我正在尝试从 R 中列表中的所有矩阵中提取行。除了循环之外,还有其他简单的方法吗?例如,

set.seed(123)
list1 <- list(replicate(4,rnorm(2)))
rep(list1,3)

此代码生成以下列表:

[[1]]
           [,1]       [,2]      [,3]       [,4]
[1,] -0.5604756 1.55870831 0.1292877  0.4609162
[2,] -0.2301775 0.07050839 1.7150650 -1.2650612

[[2]]
           [,1]       [,2]      [,3]       [,4]
[1,] -0.5604756 1.55870831 0.1292877  0.4609162
[2,] -0.2301775 0.07050839 1.7150650 -1.2650612

[[3]]
           [,1]       [,2]      [,3]       [,4]
[1,] -0.5604756 1.55870831 0.1292877  0.4609162
[2,] -0.2301775 0.07050839 1.7150650 -1.2650612

现在我想提取此列表中所有矩阵的第二行并将其存储在另一个矩阵或列表中。有没有办法在不循环的情况下做到这一点?

谢谢

【问题讨论】:

    标签: r list matrix extract rows


    【解决方案1】:

    还是这样?

    set.seed(123)
    list1 <- list(replicate(4,rnorm(2)))
    l<-rep(list1,3)
    lapply(l,function(x) x[2,])
    

    【讨论】:

    • 使用 lapply 检索列表。采取同样的想法:t(sapply(l,function(x) x[2,])) 检索矩阵
    • 只是稍微改变一下语法:t( sapply(l,'[',2,TRUE) )
    【解决方案2】:
    matrix(unlist(lapply(x,function (x) { x[2,]})),nrow=length(x), byrow=T)
    
               [,1]      [,2]       [,3]       [,4]
    [1,] -0.2372892 0.8751748 -0.5452381 -0.1484494
    [2,] -0.2372892 0.8751748 -0.5452381 -0.1484494
    [3,] -0.2372892 0.8751748 -0.5452381 -0.1484494
    

    【讨论】:

      【解决方案3】:

      这会提取带有lapply 的行并将它们与rbind 放在一起。

      x = rep(list1,3)
      do.call( rbind, lapply(x,'[',2,) )
      

      plyr 包是另一种选择

      library(plyr)
      laply(x,function(y) y[2,])
      

      ?"[" 帮助页面很有启发性。看完之后,我意识到下面很短很简单的代码也可以。

      laply(x,'[',2,TRUE)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-09-22
        • 1970-01-01
        • 2015-01-09
        • 1970-01-01
        • 1970-01-01
        • 2021-05-04
        • 1970-01-01
        相关资源
        最近更新 更多