2013-12-19 3 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

내가 100 대신 n을 10으로 변경하고 for 루프를 1:10으로 바꿀 때 나는 단지 NAs를 얻습니다. 왜 그런가요? – user3067923

+0

루프 길이는 m 행렬의 길이 여야합니다. – CCurtis

관련 문제