Недавно я ответил на вопрос, относящийся к циклам 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)?