Я сделал этот простой код, чтобы проверить что-то, что не работает.
funcion=function(x,p){
for(i in 1:p){
return(x+i)
}
}
funcion(5,5)
Это возвращает значение 6, а не 6,7,8,9,10, чего я ожидал и что я ищу. Может кто-нибудь объяснить, почему это работает таким образом и как я могу сделать так, чтобы я получил то, что хочу?
Спасибо
Нам нужно собрать вывод в объект, а затем вернуть
f1 <- function(x, p) {
# // create an object to store the output from each iteration
out <- numeric(p)
for(i in seq_len(p)) {
out[i] <- x + i # // assign the output based on the index
}
return(out)
}
f1(5, 5)
#[1] 6 7 8 9 10
В R
это можно выполнить без цикла for
, т.е.
5 + seq_len(5)
#[1] 6 7 8 9 10
Проблема в том, что return
внутри функции возвращается только один раз. Итак, он выполняется в первый раз с x + 1
и выводит return
вместо полного вывода.
@Python_begginer23 Это сделает его быстрее. Большинство функций R
векторизованы. Итак, вам не нужна петля for
.
Это всего лишь пример. В проекте, который я на самом деле делаю, я думаю, что предпочел бы цикл for.
@Python_begginer23 Полезно знать о рассуждениях. Спасибо
@Python_begginer23, кроме того, вы также можете использовать lapply/sapply
, если не хотите создавать объекты вывода. то есть sapply(seq_len(5),
+, 5)
Большое спасибо! Указание длины векторов ускоряет выполнение, верно?