2015-10-07 173 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