Помилка if / while (умова) {: відсутнє значення там, де потрібно TRUE / FALSE


159

Я отримав це повідомлення про помилку:

Error in if (condition) { : missing value where TRUE/FALSE needed

або

Error in while (condition) { : missing value where TRUE/FALSE needed

Що це означає, і як це запобігти?


5
Оператор подвійних рівних не може терпіти NAані з одного боку. Якщо я визначу: x = NAа потім зроби, if (x == NA){ ... }тоді ця помилка буде викинута під час виконання, коли аналізатор розглядає ліву частину подвійного рівняння. Щоб виправити цю помилку, переконайтеся, що кожна змінна в умовному режимі не використовує NA is.na(your_variable).
Ерік Лещинський

Відповіді:


203

Оцінка conditionрезультатів призвела до NA. ifУмовне повинен мати або TRUEабо FALSEрезультат.

if (NA) {}
## Error in if (NA) { : missing value where TRUE/FALSE needed

Це може статися випадково, оскільки результати розрахунків:

if(TRUE && sqrt(-1)) {}
## Error in if (TRUE && sqrt(-1)) { : missing value where TRUE/FALSE needed

Щоб перевірити, чи немає об'єкта, скористайтеся, is.na(x)а не використовуйте x == NA.


Дивіться також пов’язані помилки:

Помилка в аргументі if / while (умова) {: довжина дорівнює нулю

Помилка if / while (умова): аргумент не інтерпретується як логічний

if (NULL) {}
## Error in if (NULL) { : argument is of length zero

if ("not logical") {}
## Error: argument is not interpretable as logical

if (c(TRUE, FALSE)) {}
## Warning message:
## the condition has length > 1 and only the first element will be used

10

Я наткнувся на це, перевіряючи нульову чи порожню рядок

if (x == NULL || x == '') {

змінив його на

if (is.null(x) || x == '') {

1
Фій, є також!(length(x) == 1L && nzchar(x))
Френк
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.