r - R 和替代方案中的循环

标签 r loops matrix

我有一个矩阵 (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/

相关文章:

javascript - 将动态变化的 R htmlwidget 嵌入到网页中

matrix - PyTorch 向量/矩阵/张量的逐元素乘积

r - 走层次树

r - 有什么方法可以在R中独立地对矩阵的列进行排序吗?

r - 加速创建矩阵列表,每个矩阵都具有来自非常大矩阵的每一列的指定维度

list - 循环遍历 R 中的数字列表

Java While 循环程序

javascript - for循环只输出最后一次迭代

python - 4D numpy 数组上的矩阵乘法

r - 检查大多伦多地区的经度/纬度是否在 R 中