我试图弄清楚如何使用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
答案 0 :(得分: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