Erreur dans if / while (condition) {: valeur manquante où TRUE / FALSE est nécessaire

159

J'ai reçu ce message d'erreur:

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

ou

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

Qu'est-ce que cela signifie et comment éviter cela?

Citoyen concerné
la source
5
L'opérateur double égal ne peut tolérer un NAde chaque côté. Si je définis: x = NAet ensuite faire un, if (x == NA){ ... }cette erreur sera générée au moment de l'exécution lorsque l'analyseur examinera le côté gauche du double égal. Pour remédier à cette erreur, assurez-vous que toutes les variables de votre conditionnel ne sont pas utilisées par NA is.na(your_variable).
Eric Leschinski

Réponses:

203

L'évaluation de a conditionabouti à un NA. Le ifconditionnel doit avoir un résultat TRUEou FALSE.

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

Cela peut arriver accidentellement en raison des résultats des calculs:

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

Pour tester si un objet manque, utilisez is.na(x)plutôt que x == NA.


Voir également les erreurs associées:

Erreur dans if / while (condition) {: l'argument est de longueur zéro

Erreur dans if / while (condition): l'argument n'est pas interprétable comme logique

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
la source
10

Je suis tombé sur cela lors de la vérification d'une chaîne nulle ou vide

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

l'a changé en

if (is.null(x) || x == '') {
pbatey
la source
1
Pour info, il y a aussi!(length(x) == 1L && nzchar(x))
Frank