再生基质R.

Jor*_*dan 0 r matrix

我有一个使用二项式函数生成矩阵的脚本:

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)
Run Code Online (Sandbox Code Playgroud)

我需要生成这个矩阵20次,每次根据预定义的二项式函数生成新值.

我最初是这样矢量化的:

mean20 <- randomdiv(20, 20, 20)
Run Code Online (Sandbox Code Playgroud)

但是这会将特定的矩阵标记为"mean20",这样如果我多次运行mean20,就会产生相同的矩阵 - 我需要为每个矩阵运行新的脚本.

即使没有对初始矩阵进行矢量化,下面的代码也不会告诉R每次都重新生成矩阵 - 因此,对于20个矩阵而言,这不是一个列矩阵,而是为一个矩阵生成列均值,并将它们重复为20列.

mean20 <- round(matrix(data=colMeans(randomdiv(20, 20, 20)), nrow=20, ncol=20))
Run Code Online (Sandbox Code Playgroud)

任何想法我如何告诉R我希望列的20个矩阵的方法被编译成一个矩阵?

谢谢!

Fra*_*ank 5

OP使用了20遍布各处的数字,所以我可能没有这个非常正确:

res20 <- replicate(20, randomdiv(20,20,20), simplify=FALSE )
sapply(res20, colMeans)
Run Code Online (Sandbox Code Playgroud)

为了说明结果,这是一个较小的例子:

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
Run Code Online (Sandbox Code Playgroud)