再生基质R.

时间:2015-10-07 15:47:58

标签: 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)

我需要生成这个矩阵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个矩阵的列意味着编译成一个矩阵?

谢谢!

1 个答案:

答案 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