我有一个简单的R代码来添加2x2矩阵的组件
sum<-0
for(i in 1:2){ # row
for(j in 1:2){ #column
sum<-sum+mat[i,j]
}
}
Run Code Online (Sandbox Code Playgroud)
是否可以使用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]
}
}
Run Code Online (Sandbox Code Playgroud)
和:
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
}
}
Run Code Online (Sandbox Code Playgroud)
sum(mat)
Run Code Online (Sandbox Code Playgroud)
会做的.不需要循环或outer.
根据新问题更新:
您可以expmat使用outer以下方法计
outer(rowSums(mat), colSums(mat))/sum(mat)
Run Code Online (Sandbox Code Playgroud)
之后,你可以计算chisqr:
sum((mat-expmat)^2/expmat)
Run Code Online (Sandbox Code Playgroud)
顺便说一句:我建议看看?chisq.test.