Вы могли бы написать, что гораздо более эффективно, как это:
func1 <- function(vector){
vector + seq_along(vector)
}
Таким образом, вы принимаете преимущество сложения векторов.
Для полноты рассмотрим эти два решения. Вот общее решение цикла:
func2 <- function(vector) {
vr <- c() ### an empty vector
for (i in 1:length(vector)) {
vr[i] <- vector[i]+i
}
vr
}
Как шаг вверх, есть также решение на месте
func3 <- function(vector) {
for (i in 1:length(vector)) {
vector[i] <- vector[i]+i
}
vector
}
Использование microbenchmark
мы можем видеть, что векторизация решение на сегодняшний день является наиболее эффективным.
vec <- sample(100000, 10000)
library(microbenchmark)
microbenchmark(func1(vec), func3(vec), func2(vec))
Unit: microseconds
expr min lq mean median uq max neval cld
func1(vec) 29.998 36.984 44.78312 42.736 44.38 399.006 100 a
func3(vec) 12845.823 13666.432 14452.02863 14060.712 14708.53 25025.950 100 a
func2(vec) 84898.055 87354.750 110046.26659 88634.566 91193.38 1042819.269 100 b
Вы можете просто падение 'Vr <- с()' и 'Vr <- вектор [I] + i' и положить' вектор [я] < - вектор [i] + 1' в цикле 'for'. И не забудьте вернуть объект в конце функции ('return (vector)' или просто 'vector'). – nrussell
Не '' функция (v) {v + 1: length (v)} 'достаточно? Вы переписываете 'vr' в каждом цикле. – tonytonov