我有一个使用二项式函数生成矩阵的脚本:
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个矩阵的方法被编译成一个矩阵?
谢谢!
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)