Недавно я ответил на вопрос, относящийся к циклам for
. После тестирования скорости моего кода я заметил, что использование seq()
в отличие от :
в цикле for
значительно замедлило скорость.
Взгляните на этот очень простой пример. Единственная разница между f1()
и f2()
- это изменение в последовательности циклов for
, но f1()
выполняется в два раза быстрее, чем f2()
.
f1 <- function() {
x <- 1:5; y <- numeric(length(x))
for(i in 1:length(x)) y[i] <- x[i]^2
y
}
f2 <- function() {
x <- 1:5; y <- numeric(length(x))
for(i in seq(x)) y[i] <- x[i]^2
y
}
library(microbenchmark)
microbenchmark(f1(), f2())
# Unit: microseconds
# expr min lq median uq max neval
# f1() 10.529 11.5415 12.1465 12.617 33.893 100
# f2() 25.052 25.5905 26.0385 28.759 78.553 100
Почему seq(x)
настолько медленнее в цикле for
, чем 1:length(x)
?