Как уже упоминалось PKumar в комментариях: Ваша функция ничего не возвращает, то есть вектор out
существует только в среде вашей функции.
Чтобы изменить это, вы можете добавить return(out)
до конца вашей функции. И вы также должны начать свою функцию с создания out
перед циклом. Таким образом, ваша функция будет выглядеть, как показано ниже.
Обратите внимание, что я предполагаю, что вы хотите передать в функцию вектор определенной длины и в результате получить вектор такой же длины, который содержит 1
для четных чисел и 0
для нечетных чисел. f3(c(1,1,2))
вернет 0 0 1
.
f3 <- function(arg){
out <- vector(length = length(arg), mode = "integer")
for(i in 1:length(arg)){
if((arg[i]%%2==0)==TRUE){ # note that arg[i]%%2==0 will suffice
out[i]<-1
} else {out[i]<-0
}
}
return(out) # calling out without return is enough and more inline with the tidyverse style guide
}
Однако, как также указывает Себастьян в комментариях, some_vector %% 2
дает почти тот же результат. Разница в том, что нечетные числа дают 1
и четные числа 0
. Вы также можете поместить это в функцию и вычесть 1 из arg для обратного 0
и 1
:
f3 <- function(arg){
(arg-1) %% 2
}