迭代后计算矩阵中每个单元的方差

时间:2013-12-19 22:03:48

标签: r loops matrix variance

如何在循环后计算矩阵中每个单元格的方差?

到目前为止,我有这个:

  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中得到一个输出。但是,如何在矩阵中的每个循环之后替换每个单元格的方差值,而不是一遍又一遍地写入?

1 个答案:

答案 0 :(得分: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])