Fehler in if / while (Bedingung) {: fehlender Wert, bei dem TRUE / FALSE benötigt wird

159

Ich habe diese Fehlermeldung erhalten:

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

oder

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

Was bedeutet das und wie verhindere ich es?

Besorgter Bürger
quelle
5
Der Operator double equals kann NAauf beiden Seiten kein tolerieren . Wenn ich definiere: x = NAund dann ein mache, if (x == NA){ ... }wird dieser Fehler zur Laufzeit ausgelöst, wenn der Parser die linke Seite der Doppelgleichheit untersucht. Um diesen Fehler zu beheben, stellen Sie sicher, dass nicht jede Variable in Ihrer Bedingung NA verwendet is.na(your_variable).
Eric Leschinski

Antworten:

203

Die Auswertung conditionergab eine NA. Die ifBedingung muss entweder ein TRUEoder ein FALSEErgebnis haben.

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

Dies kann versehentlich als Ergebnis von Berechnungen geschehen:

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

Um zu testen, ob ein Objekt fehlt, verwenden Sie is.na(x)statt x == NA.


Siehe auch die zugehörigen Fehler:

Fehler in if / while (Bedingung) {: Argument hat die Länge Null

Fehler in if / while (Bedingung): Argument kann nicht als logisch interpretiert werden

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
quelle
10

Ich bin darauf gestoßen, als ich eine Null- oder leere Zeichenfolge überprüft habe

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

änderte es zu

if (is.null(x) || x == '') {
pbatey
quelle
1
Zu Ihrer Information, es gibt auch!(length(x) == 1L && nzchar(x))
Frank