Кажется, что ifelse
не нравится иметь NULL
в качестве ответа в случае, если условие FALSE
:
ifelse(2 < 1, 1, NULL)
# Error in ans[!test & ok] <- rep(no, length.out = length(ans))[!test & :
# replacement has length zero
# In addition: Warning message:
# In rep(no, length.out = length(ans)) :
# 'x' is NULL so the result will be NULL
Кажется, это происходит из-за того, что ifelse
возвращает
Вектор такой же длины и атрибутов (включая измерения и «класс»), что и значения тестов и данных из значений да или нет.
и
Если да или нет слишком короткие, их элементы перерабатываются.
Если в сообщении об ошибке указано rep
и то, что length(NULL)
равно нулю, похоже,хорошее доказательство.Таким образом, вместо этого вы можете использовать, например,
my_function <- function(.data, .variable = if("var1" %in% names(.data)) "var1" else NULL)
is.null(.variable)
my_function("1")
# [1] TRUE
См. ?ifelse
для других предупреждений.