小编Boo*_*oog的帖子

获取匹配条件的第一个值(循环太慢)

我有很多与此类似的矩阵,但是有数千行:

r <- 10
c <- 2
set.seed(333)

m1 <- matrix(runif(r*c)+1, r, c)

> m1
          [,1]     [,2]
 [1,] 1.467001 1.393902
 [2,] 1.084598 1.474218
 [3,] 1.973485 1.891222
 [4,] 1.571306 1.665011
 [5,] 1.020119 1.736832
 [6,] 1.723557 1.911469
 [7,] 1.609394 1.637850
 [8,] 1.306719 1.864651
 [9,] 1.063510 1.287575
[10,] 1.305353 1.129959
Run Code Online (Sandbox Code Playgroud)

我有一个循环,告诉我,对于第一列的每个值,第二列中第一个值的索引是多少,该索引高10%像这样:

result <- 1:nrow(m1)

for (i in 1:nrow(m1)){
    result[i] <- which(m1[,2]>(1.1*m1[,1][i]))[1]
}
> result
 [1]  3  1 NA  3  1  6  3  2  1  2
Run Code Online (Sandbox Code Playgroud)

我的矩阵太多了,要花几个小时,在对我的代码进行性能分析后,迄今为止最大的耗时任务是此循环。根据您的说法,最快的方法是什么?

例如,r = 30000:

start_time <- Sys.time()

for …
Run Code Online (Sandbox Code Playgroud)

r

19
推荐指数
2
解决办法
983
查看次数

标签 统计

r ×1