使用outer()替换R中的嵌套for

jac*_*ger 1 r outer-join

我有一个简单的R代码来添加2​​x2矩阵的组件

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

是否可以使用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]

    }
  }
Run Code Online (Sandbox Code Playgroud)

和:

  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
    }
  }
Run Code Online (Sandbox Code Playgroud)

Sve*_*ein 7

sum(mat)
Run Code Online (Sandbox Code Playgroud)

会做的.不需要循环或outer.


根据新问题更新:

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

outer(rowSums(mat), colSums(mat))/sum(mat)
Run Code Online (Sandbox Code Playgroud)

之后,你可以计算chisqr:

sum((mat-expmat)^2/expmat)
Run Code Online (Sandbox Code Playgroud)

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