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

R 计算矩阵中每个单元格迭代后的方差,r,loops,matrix,variance,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) # subtr

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

到目前为止,我有:

  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)
}
我想计算这个函数迭代100次后每个单元格的方差。输出可以是表格或向量。最后应该有100个值。我该怎么做

编辑:

如果我这样做:

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

tmp我相信这应该是你想要的。只是一些简单的函数

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]) 

你的函数中有一个错误。M2应该是矩阵。另外,我会避免给对象提供常用函数的名称,这会导致混淆。当我将n改为10而不是100,并且将for循环改为1:10时,我只得到NAs。为什么呢?我做了一些编辑,应该澄清一下,但是循环长度应该是m矩阵的长度。我做了一个修改关于rad,只接受一个矩阵。我在你的代码中得到的错误是“新数据中的错误[I,]=as.numeric(rad(m)):要替换的项目数不是替换长度的倍数”我没有得到任何错误。我是说修复你原来的rad2函数。
variance=M2/(n-1)
应该是
variance=matrix/(n-1)
确保使用我提供的第二位代码,以
newdata=matrix(NA,长度(m)开头,..
。因此,如果您对rad2进行编辑并复制第二个代码,则即使更改m的尺寸,一切都会正常工作。如果仍然存在问题,请安装最新版本的R。确实,您需要花一些时间学习R的实际工作原理。解决问题所需的所有信息都已经存在。
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])