代码之家  ›  专栏  ›  技术社区  ›  MolEcologist29

修改列表R中的矩阵元素

  •  0
  • MolEcologist29  · 技术社区  · 7 年前

    我有一个包含40个1x2矩阵的列表列表。我想用矩阵a 2x2矩阵替换每个矩阵

    其中两个是原始值,另外两个是30个原始值

    例如,如果我有以下矩阵:

    matrix(c(2,12),ncol=2,nrow=1)
         [,1] [,2]
    [1,]    2   12
    

    我想要一个新的矩阵,如下所示:

         [,1] [,2]
    [1,]    2   12
    [2,]   28   18
    

    虽然我可以很容易地做到这一点,甚至只是在一个列表中,但我无法在一个列表中做到这一点。下面是一些示例代码:

    list1<-list()
    for (i in 1:10){
      list1[[i]]<-lapply(1:10, matrix, data= runif(2, 12, 30), nrow=1, ncol=2)
    }
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   gfgm    7 年前

    你可以打两个电话 lapply() :

    l <- list(l1 = matrix(1:2, nrow=1), l2 = matrix(3:4, nrow=1))
    l
    #> $l1
    #>      [,1] [,2]
    #> [1,]    1    2
    #> 
    #> $l2
    #>      [,1] [,2]
    #> [1,]    3    4
    
    l2 <- list(l, l)
    
    lapply(l2, function(l){lapply(l, function(mat){do.call(rbind, list(mat, 30-mat))})})
    #> [[1]]
    #> [[1]]$l1
    #>      [,1] [,2]
    #> [1,]    1    2
    #> [2,]   29   28
    #> 
    #> [[1]]$l2
    #>      [,1] [,2]
    #> [1,]    3    4
    #> [2,]   27   26
    #> 
    #> 
    #> [[2]]
    #> [[2]]$l1
    #>      [,1] [,2]
    #> [1,]    1    2
    #> [2,]   29   28
    #> 
    #> [[2]]$l2
    #>      [,1] [,2]
    #> [1,]    3    4
    #> [2,]   27   26
    

    创建日期:2018年3月22日 reprex package (v0.2.0)。

    推荐文章