如何在循环后计算矩阵中每个单元格的方差?
到目前为止,我有这个:
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 :(得分: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])