2013-12-19 4 views
-2

Как вычислить дисперсию каждой ячейки в матрице после цикла?вычисление дисперсии после итерации для каждой ячейки в матрице

меня это до сих пор:

m = matrix(0,10,10) 
    n = 100 
    v = 1 

    rad2 <- function(matrix, repeats, v) { 
    idx <- sample(length(matrix), repeats, replace = TRUE) # indices 
    flip <- sample(c(-1, 1), repeats, replace = TRUE) # subtract or add 
    newVal <- aggregate(v * flip ~ idx, FUN = sum) # calculate new values for indices 
    matrix[newVal[[1]]] <- matrix[newVal[[1]]] + newVal[[2]] # add new values 
    variance = M2/(n-1) 
    return(matrix) 
} 

Так что теперь, если я:

rad2(m, n, v) 
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] 
[1,] 0 0 0 1 0 -2 1 -2 1  0 
[2,] 1 1 0 0 0 0 -1 2 0 -2 
[3,] -1 1 -1 1 0 0 0 1 -1 -1 
[4,] 0 0 1 0 1 0 1 1 1 -1 
[5,] 0 1 1 -2 0 0 1 0 -1 -1 
[6,] -2 -3 0 1 1 0 0 1 0 -2 
[7,] 0 0 0 1 0 2 -1 0 -1  1 
[8,] 2 0 -1 0 -1 -1 -1 0 -1  0 
[9,] 0 0 1 1 -1 1 1 0 0  1 
[10,] 0 -3 1 0 -2 0 0 -2 -1  0 

Я хочу, чтобы вычислить дисперсию в каждой ячейке после 100 итераций этой функции. Выход может быть в таблице или в векторе. В конце должно быть 100 значений. Как я могу это сделать?

редактировать:

Если я вместо этого:

n=10 
for (i in 1:n) { 
tmp <- rad(m) 
m <- tmp 
outv <- unlist(sapply(m, function(x) var(m))) 
finalv <- outv 
} 

я получаю выход в finalv. Но как я могу заменить значение дисперсии для каждой ячейки после каждого цикла в матрице вместо того, чтобы просто писать ее снова и снова?

+0

Существует ошибка в функции. M2 должна быть матрицей. Также я бы избегал давать объектам имена общих функций, вызывающих путаницу. – CCurtis

ответ

0

Я считаю, что это должно делать то, что вы хотите. Просто некоторые простые функции.

newdata=matrix(NA,100,100) 
output=NULL 
for (i in 1:100){newdata[i,]=as.numeric(rad2(m, n, v))} 
for (n in 1:100){output[n]=mean(newdata[,n])} 
matrix(output,10,10) 

Более универсальный способ

newdata=matrix(NA,length(m),length(m)) 
output=NULL 
for (i in 1:length(m)){newdata[i,]=as.numeric(rad2(m, n, v))} 
for (b in 1:length(m)){output[b]=mean(newdata[,b])} 
matrix(output,dim(m)[1],dim(m)[2]) 
+0

Я думаю, что это работает. спасибо – user3067923

+0

, когда я изменяю n на 10 вместо 100 и меняю цикл for на 1:10. Я просто получаю NAs..why? – user3067923

+0

Я сделал изменения, которые должны уточнить, но длина петли должна быть длиной матрицы m. – CCurtis