修改矩阵列表中的元素

时间:2019-04-11 18:42:12

标签: r list for-loop matrix

我为结构化人口模型生成了100个矩阵的列表。我想修改列表中每个矩阵的元素(1,3),方法是将它们乘以0.01到1之间的100个数字。目标是让第一个矩阵的第1行,第3列乘以0.01,第二个矩阵中的相同元素减0.02,依此类推。

谢谢

Ls<-6.521
Pg<-.318
Sr<-0.5
Sn<-.432
Sj<-.564
Sa<-.501


AA<-lapply(1:100, 
          function(x) { 
                       matrix(c(0, 0, Sr * rnorm(1,Ls,.3886) * rnorm(1,Pg,.1466), 
                                rnorm(1,Sn,.0954),0,0, 0,rnorm(1,Sj,.0468), 
                                rnorm(1,Sa,.472)), 
                             nrow=3, ncol=3,byrow=TRUE))

2 个答案:

答案 0 :(得分:1)

我只会做一个for循环,简单明了:

for(i in seq_along(AA)) {
  AA[[i]][1, 3] = AA[[i]][1, 3] * i / length(AA)
}

答案 1 :(得分:0)

您可以使用map2包中的purrr函数。 我定义的列表只有两个矩阵和两个标量,但也应该对您有用。

m <- list(m1 = matrix(1, 2, 3),
         m2 = matrix(2, 2, 3))
a <- list(a1 = 0.01, a2 = 0.02)

fun <- function(mymatrix, myx){
  mymatrix[1, 3] <- mymatrix[1, 3]* myx
  return(mymatrix)
} 

purrr::map2(m, a, fun)

$m1
     [,1] [,2] [,3]
[1,]    1    1 0.01
[2,]    1    1 1.00

$m2
     [,1] [,2] [,3]
[1,]    2    2 0.04
[2,]    2    2 2.00