1

我有一个简单的 R 代码来将 2x2 矩阵的分量相加

sum<-0
for(i in 1:2){ # row
    for(j in 1:2){ #column
      sum<-sum+mat[i,j]
    }
  }

是否可以使用 outer() 或任何其他函数来替换这段代码并使其更高效?我的目标是替换整个代码中的嵌套 for 循环,以减少执行程序所需的时间。

编辑:我也想尝试在代码片段上使用它,例如:

for(i in 1:2){ # row
    for(j in 1:2){ #coloumn

      chisqr<- chisqr+ ((mat[i,j]-expmat[i,j])^2)/expmat[i,j]

    }
  }

和:

  for(i in 1:2){ # row
    for(j in 1:2){ #coloumn
      rowsum<-0
      colsum<-0

      for(k in 1:2){
        rowsum<- rowsum+mat[i,k]
      }

      for(k in 1:2){
        colsum<- colsum+mat[k,j]
      }

      expmat[i,j]<- (rowsum*colsum)/sum
    }
  }
4

1 回答 1

7
sum(mat)

会成功的。不需要循环或outer.


基于新问题的更新:

您可以expmat使用以下方法计算outer

outer(rowSums(mat), colSums(mat))/sum(mat)

之后,您可以计算chisqr

sum((mat-expmat)^2/expmat)

顺便说一句:我建议看看?chisq.test

于 2012-11-23T11:01:30.653 回答