【发布时间】:2020-10-01 14:10:38
【问题描述】:
我有两个矩阵:
m1 <- matrix(runif(750), nrow = 50, byrow=T)
m2 <- matrix(rep(TRUE,750), nrow = 50, byrow=T)
对于每个m1 行,我需要找到两个最低值的索引。然后,我需要使用剩余的索引(即不是两个最低值)在m2 中分配FALSE。
一行很容易做到:
ind <- order(m1[1,], decreasing=FALSE)[1:2]
m2[1,][-ind] <- FALSE
因此,我可以使用循环对所有行执行相同操作:
for (i in 1:dim(m1)[1]){
ind <- order(m1[i,], decreasing=FALSE)[1:2]
m2[i,][-ind] <- FALSE
}
但是,在我的数据集中,这个循环的运行速度比我想要的要慢(因为我的矩阵非常大 - 500000x150000)。
有没有更快的R 方法在不使用循环的情况下达到相同的结果?
【问题讨论】: