Ответ здесь, так как это будет слишком долго для комментария.
Мне кажется, я понимаю, почему вы хотите запускать строку ifelse
только тогда, когда в переменной есть NA, чтобы сэкономить время / ресурсы,Но это будет накладные расходы. Вы будете проверять NA в переменной дважды , сначала чтобы проверить, есть ли какие-либо NA, а затем проверить, какие из них NA, чтобы изменить их.
# lets check if the var has NAs (as per @akrun and @Gregor comments)
if (sum(is.na(!!var)) > 0) { # just now you just check all the var values to see if there is NAs
df <- df %>% mutate(
!!var := ifelse(is.na(as.numeric(!!var)), 0, !!var), # And here you are checking again
!!var2 := Hmisc::cut2(!!var, cuts = interval)
)
}
Код какэто идеально. Вы только проверяете это один раз, и если есть какие-либо NA, изменение будет сделано. Если нет, переменная будет такой же. Я знаю, что это нелогично, но попытка выполнить операцию только с переменными, содержащими NA, не сэкономит ваше время или ресурсы, фактически "удвоит" их.
О проверке имени переменной, попробуйте
# checking if var is valid
if (!as_label(var) %in% names(df)) {
stop(as_label(var), ' is not present in df')
}
непосредственно перед этапом модификации фрейма данных. Таким образом, функция будет выдавать ошибку, если переменная var не находится ни в кадре данных.