У меня есть много матриц, похожих на это, но с тысячами строк:
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
У меня есть цикл, который сообщает мне, для каждого значения первого столбца, что такоеИндекс первого значения во втором столбце, который на 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
У меня так много матриц, что это занимает часы, а после профилирования моего кода это самая большая трудоемкая задачадалеко эта петля.Какой, по вашему мнению, самый быстрый способ сделать это?
Например, при r = 30000:
start_time <- Sys.time()
for (i in 1:nrow(m1)){
result[i] <- which(m1[,2]>(1.1*m1[,1][i]))[1]
}
end_time <- Sys.time()
a <- end_time - start_time
> a
Time difference of 11.25815 secs
Спасибо за помощь!