我有一个使用二项式函数生成矩阵的脚本:
randomdiv <- function(ncells, ndivs, size) { sz <- matrix(nrow = ncells, ncol = ndivs)
#avsz <- vector(length =ndivs)
#sdsz <- vector(length =ndivs)
#count <- vector(length = ndivs)
#loss <- vector(length = ndivs)
for (j in 1:ncells) {
n <- size
for (i in 1:ndivs)
{
n <- rbinom (1, n, 0.5)
n <- 2 * n
sz[j,i] <- n
}
}
return (sz)
}
randomdiv(20,20, 20)
我需要生成这个矩阵20次,每次根据预定义的二项式函数生成新值。
我最初的矢量化是这样的:
mean20 <- randomdiv(20, 20, 20)
但是这会将特定的矩阵标记为&#34; mean20&#34;因此,如果我多次运行mean20,则生成相同的矩阵 - 我需要为每个矩阵运行新的脚本。
即使没有对初始矩阵进行矢量化,下面的代码也不会告诉R每次都重新生成矩阵 - 因此,对于20个矩阵而言,这不是一个列矩阵,而是为一个矩阵生成列,并将它们重复为20列。 / p>
mean20 <- round(matrix(data=colMeans(randomdiv(20, 20, 20)), nrow=20, ncol=20))
我是怎么告诉R我想要将20个矩阵的列意味着编译成一个矩阵?
谢谢!
答案 0 :(得分:5)
OP在整个地方使用了数字20
,所以我可能没有这么正确:
res20 <- replicate(20, randomdiv(20,20,20), simplify=FALSE )
sapply(res20, colMeans)
为了说明结果,这是一个较小的例子:
set.seed(1)
res4 <- replicate(10, randomdiv(4,4,4), simplify=FALSE )
sapply(res4, colMeans)
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
# [1,] 2.5 4.5 4.0 4.0 5.0 5.0 2.5 4.5 5 2.5
# [2,] 1.5 5.5 5.5 4.5 4.5 5.5 2.5 4.5 4 4.0
# [3,] 2.5 5.0 3.5 5.0 3.5 5.5 3.5 3.5 4 4.0
# [4,] 3.5 5.0 4.5 3.5 3.5 6.5 4.0 4.5 3 4.0