2015-10-07 6 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 раз, каждый раз генерировать новые значения в соответствии с заранее определенной биномиальной функции.

я первоначально vectorised как таковой:

mean20 <- randomdiv(20, 20, 20) 

Но это маркирует определенную матрицу, как «mean20», так что если я бегу mean20 несколько раз, одинаковые матрицы производятся - мне нужен скрипт для запуска свежие для каждой матрицы.

Даже без векторизации матрицы inital следующий код не сообщает R, чтобы каждый раз регенерировать матрицу, а не матрицу из столбцов для 20 матриц, это создает средство столбца для одной матрицы и повторяет их для 20 столбцов.

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

Любые идеи, как я говорю R, что я хочу, чтобы средства столбцов из 20 матриц были скомпилированы в одну матрицу?

Спасибо!

+1

Просьба работать кода, четкое объяснение того, что вы пытаетесь сделать, и ваш желаемый результат. – nicola

+0

Как уже отмечалось, ваш код не работает. Или, может быть, более точное описание заключается в том, что ваша запись неполна. –

+0

Я думал, что включил все, что нужно, чтобы быть функциональным извините - я отредактировал его, и я думаю, что теперь он должен работать – Jordan

ответ

5

ОР использует число 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

Смежные вопросы