Błąd w warunku if / while (warunek) {: brak wartości, jeśli wymagana jest wartość TRUE / FALSE

159

Otrzymałem ten komunikat o błędzie:

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

lub

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

Co to oznacza i jak temu zapobiec?

Zaniepokojony obywatel
źródło
5
Operator podwójnej równości nie może tolerować znaku NApo obu stronach. Jeśli zdefiniuję: x = NAa następnie zrobię, if (x == NA){ ... }to ten błąd zostanie wyrzucony w czasie wykonywania, gdy parser sprawdzi lewą stronę podwójnego równa się. Aby naprawić ten błąd, upewnij się, że żadna zmienna warunku nie używa NA is.na(your_variable).
Eric Leschinski

Odpowiedzi:

203

Ocena conditionzakończyła się plikiem NA. ifWarunkowego musi mieć albo TRUEczy FALSEwynik.

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

Może się to zdarzyć przypadkowo, ponieważ wyniki obliczeń:

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

Aby sprawdzić, czy brakuje obiektu, użyj is.na(x)zamiast x == NA.


Zobacz także powiązane błędy:

Błąd w if / while (warunek) {: argument ma długość zero

Błąd w if / while (warunek): argument nie jest interpretowany jako logiczny

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
Brian Diggs
źródło
10

Napotkałem to podczas sprawdzania pustego lub pustego ciągu

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

zmienił to na

if (is.null(x) || x == '') {
paskudny
źródło
1
Fyi, jest też!(length(x) == 1L && nzchar(x))
Frank