【问题标题】:Matrix of expected values from matrix of observed using a loop使用循环观察到的矩阵中的期望值矩阵
【发布时间】:2017-11-04 19:33:25
【问题描述】:

我试图弄清楚如何使用 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

【问题讨论】:

    标签: r for-loop matrix


    【解决方案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)
      }
    }
    

    现在,上面的代码可以大大简化了。单线就可以了。

    obsv3 <- rowSums(obsv) %*% t(colSums(obsv))/sum(obsv)
    
    identical(obsv2, obsv3)
    #[1] TRUE
    

    【讨论】: