我正在尝试弄清楚如何使用 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: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