我有一个矩阵 (1051*1051),它的对角线上有 0zeros,其他地方的值都大于 0zero。目标是有条件地重新分配矩阵中的一些值。例如,我想要实现的标准是:如果任何元素大于 400,那么该行/列元素将被分配一个 0zero 值。
这是我的代码的设置方式:
dl <- 400 # condition
for( i in 1:dim(DIST)[1] ) {
for( j in 1:dim(DIST)[1] ) {
if( DIST[i,j] > dl ) {
DIS[i,j] <- 0
}
}
}
DIST 是原始矩阵 (1051*1051)。
DIS 是 DIST 的副本,将被编辑。
我的问题:
有没有其他方法可以做到这一点?更快的方法?
我读过应该避免 R 中的循环。如果有人有更有效的方法,请分享。
谢谢你。
最佳答案
只需使用 [] 赋值:
DIST[DIST>400] <- 0
见
?'['
这是如何工作的。关键是DIST>400
产生一个长度为 length(DIST)
的逻辑向量(DIST 中的元素数),如果元素 >400 则由 TRUE 组成,否则由 FALSE 组成。然后使用该向量对矩阵进行子集化,并且仅将选定元素分配给。
关于r - R 和替代方案中的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6850849/