在R中自动在for循环中建立矩阵

时间:2020-07-02 20:09:48

标签: r

假设我有这样的代码

probv=c(0.5,0.1,0.2,0.3)
N=c(1,2,3,4)

g1=matrix(rbinom(n = 10, size = N[1], prob = probv[1]), nrow=5)
g2=matrix(rbinom(n = 10, size = N[2], prob = probv[2]), nrow=5)
g3=matrix(rbinom(n = 10, size = N[3], prob = probv[3]), nrow=5)
g4=matrix(rbinom(n = 10, size = N[4], prob = probv[4]), nrow=5)

我想使用for循环 因为我在(1:J) {......}在这种情况下,J = 4 我想知道使用一行功能返回相同的输出 我如何在循环中创建矩阵g_ 当我增加长度时,这对我也有好处 我的向量变成5,6,7 ...... 例如N = c(1,2,3,4,5)probv = c(0.5,0.1,0.2,0.3,0.5) 我不需要更改代码来创建另一个名为g5的矩阵。该代码可以创建它,我只需要更改输入即可实现目标

感谢Akrun

我的N是一个三维数组,我想映射它的最后一个维吗?如何更改地图方法?

probv=c(0.5,0.1,0.2,0.3)
N=array(1:24,c(3,2,4))

g1=matrix(rbinom(n = 10, size = N[,,1], prob = probv[1]), nrow=5)
g2=matrix(rbinom(n = 10, size = N[,,2], prob = probv[2]), nrow=5)
g3=matrix(rbinom(n = 10, size = N[,,3], prob = probv[3]), nrow=5)
g4=matrix(rbinom(n = 10, size = N[,,4], prob = probv[4]), nrow=5)

1 个答案:

答案 0 :(得分:1)

我们可以使用Map遍历'N'和'probv'vector,将相应的值放入rbinom中并创建一个matrix。它返回list es的matric

lst1 <- Map(function(x, y) matrix(rbinom(n = 10,
        size = x, prob = y), nrow = 5), N, probv)

或使用for循环

lst2 <- vector('list', length(N))
for(i in seq_along(N)) {
     lst2[[i]] <- matrix(rbinom(n = 10, size = N[i], prob = probv[i]), nrow = 5)
   }
 names(lst2) <- paste0("g", seq_along(lst2))

要从array中提取更新后的问题

mnLength <- min(length(probv), dim(N)[3])
lst2 <- vector('list', mnLength)
for(i in seq_len(mnLength)) {
     lst2[[i]] <- matrix(rbinom(n = 10, size = N[,,i], prob = probv[i]), nrow = 5)
   }

names(lst2) <- paste0("g", seq_along(lst2))
lst2$g1
lst2$g2