Ответ 1
''
- пустой символ. Это не означает "полностью пустой" - это действительно NULL
.
Чтобы проверить это, просто проверьте равенство:
if (variable == '') …
Если вы хотите проверить, существует ли переменная, вам нужно использовать... exists
:
if (exists('variable')) …
Но на самом деле в нормальном коде очень мало случаев использования exists
, так как, как автор кода, вы должны знать, какие переменные существуют, а какие нет. Скорее, он в первую очередь полезен в библиотечных функциях.
Однако ошибка, которую вы получаете,
отсутствует значение, в котором требуется TRUE/FALSE
не означает, что переменная не существует. Скорее, if
не может иметь дело с отсутствующими значениями - т.е. NA
. NA
происходит в результате многих вычислений, которые сами содержат значение NA
. Например, сравнение NA
с любым значением (даже NA
) снова дает NA
:
variable = NA
variable == NA
# [1] NA
Так как if
ожидает TRUE
или FALSE
, он не может иметь дело с NA
. Если у вас есть вероятность, что ваши значения могут быть NA
, вам нужно проверить это явно:
if (is.na(variable) || variable == '') …
Однако, как правило, лучше всего исключить значения NA
из ваших данных из get-go, чтобы они не распространялись в такой ситуации, как указано выше.