2017-11-04 9 views
0

forループを使用して期待値の行列を作成する方法を理解しようとしています。任意のサイズの行列を扱うことができるはずです。これは私が今までに思い付くことができたすべてです。ループを使って観測された行列の期待値の行列

for(i in 1:obsv){ 
    for(j in 1:obsv){ 
     obsv[i,j]<-(sum(obsv[i,])*sum(obsv[,j]))/sum(obsv) 
    } 
} 
##obsv is the name of the matrix of observed values 

答えて

1

ループは明らかに間違っています(下を参照)。主なエラーは、1:nrow(obsv)1:ncol(obsv)をループする必要があるということでした。
サンプルデータセットを投稿していないので、私は偽のマトリックスを使用します。

obsv <- matrix(1:25, ncol = 5) 

obsv2 <- obsv # modify a copy 

for(i in 1:nrow(obsv)){ 
    for(j in 1:ncol(obsv)){ 
     obsv2[i, j] <- sum(obsv[i, ])*sum(obsv[, j])/sum(obsv) 
    } 
} 

ここで、上記コードを大幅に簡略化することができます。 1ライナーがそれを行います。

obsv3 <- rowSums(obsv) %*% t(colSums(obsv))/sum(obsv) 

identical(obsv2, obsv3) 
#[1] TRUE 
関連する問題