I received this error message:

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

or

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

What does it mean, and how do I prevent it?

### 3 Answers

The evaluation of `condition`

resulted in an `NA`

. The `if`

conditional must have either a `TRUE`

or `FALSE`

result.

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

This can happen accidentally as the results of calculations:

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

To test whether an object is missing use `is.na(x)`

rather than `x == NA`

.

See also the related errors:

Error in if/while (condition) { : argument is of length zero

Error in if/while (condition) : argument is not interpretable as logical

```
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
```

I ran into this when checking on a null or empty string

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

changed it to

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

this works with `"NA"`

not for `NA`

```
comments = c("no","yes","NA")
for (l in 1:length(comments)) {
#if (!is.na(comments[l])) print(comments[l])
if (comments[l] != "NA") print(comments[l])
}
```