修改列表R列表中的矩阵元素

时间:2018-03-22 07:26:51

标签: r list matrix

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

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

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

     [,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}}

1 个答案:

答案 0 :(得分:2)

您可以通过两次拨打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

reprex package(v0.2.0)创建于2018-03-22。