2015-10-07 136 views
0

我有使用二项式功能,其生成矩阵的脚本:再生矩阵R

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) 

但这标签的特定矩阵为“mean20”,这样,如果我运行mean20多次,相同矩阵产生 - 我需要的脚本要运行新鲜为每个矩阵。

即使没有矢量化初始矩阵,下面的代码也不会告诉R每次都重新生成矩阵 - 所以不是为20个矩阵的列均值矩阵生成列均值,而是为一个矩阵生成列均值,并重复它们20列。

mean20 <- round(matrix(data=colMeans(randomdiv(20, 20, 20)), nrow=20, ncol=20)) 

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

谢谢!

+1

请提供工作代码,你想要做什么和你想要的输出的清晰解释。 – nicola

+0

如上所述,您的代码不起作用。或者更准确的描述是你的写作不完整。 –

+0

我以为我已经包括了所需的所有功能对不起 - 我已编辑它,我认为它现在应该工作 – Jordan

回答

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 
+1

这工作得很完美,谢谢:) – Jordan