1

2x2 マトリックスのコンポーネントを合計する単純な R コードがあります。

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 に答える