Erro em if / while (condition) {: valor ausente onde TRUE / FALSE necessário

159

Eu recebi esta mensagem de erro:

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

ou

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

O que significa e como evito isso?

Cidadão preocupado
fonte
5
O operador double equals não pode tolerar um NAdos dois lados. Se eu definir: x = NAe, em seguida, fizer um if (x == NA){ ... }, esse erro será gerado em tempo de execução quando o analisador examinar o lado esquerdo do duplo igual. Para corrigir esse erro, verifique se todas as variáveis ​​em seu condicional não estão usando NA is.na(your_variable).
precisa saber é o seguinte

Respostas:

203

A avaliação do conditionresultado em um NA. O ifcondicional deve ter um TRUEou FALSEresultado.

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

Isso pode acontecer acidentalmente como os resultados dos cálculos:

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

Para testar se um objeto está faltando, use em is.na(x)vez de x == NA.


Veja também os erros relacionados:

Erro em if / while (condição) {: o argumento tem comprimento zero

Erro em if / while (condição): o argumento não é interpretável como lógico

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

Corri para isso ao verificar uma seqüência de caracteres nula ou vazia

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

mudou para

if (is.null(x) || x == '') {
pbatey
fonte
1
Fyi, há também #!(length(x) == 1L && nzchar(x))
24717 Frank Frank