假设我有这样的代码
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)
答案 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