Lỗi trong if / while (condition) {: thiếu Giá trị khi cần TRUE / FALSE


159

Tôi đã nhận được thông báo lỗi này:

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

hoặc là

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

Nó có nghĩa là gì, và làm thế nào để tôi ngăn chặn nó?


5
Toán tử bằng kép không thể chịu đựng được NAở hai bên. Nếu tôi xác định: x = NAvà sau đó thực hiện if (x == NA){ ... }thì lỗi này sẽ được đưa ra trong thời gian chạy khi trình phân tích cú pháp kiểm tra phía bên trái của phép nhân đôi. Để khắc phục lỗi này, đảm bảo mọi biến trong điều kiện của bạn không sử dụng NA is.na(your_variable).
Eric Leschinski

Câu trả lời:


203

Việc đánh giá conditionkết quả trong một NA. Các ifđiều kiện phải có một TRUEhoặc FALSEkết quả.

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

Điều này có thể vô tình xảy ra khi kết quả tính toán:

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

Để kiểm tra xem một đối tượng bị thiếu sử dụng is.na(x)chứ không phải x == NA.


Xem thêm các lỗi liên quan:

Lỗi trong if / while (condition) {: đối số có độ dài bằng 0

Lỗi trong if / while (condition): đối số không thể hiểu là logic

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

10

Tôi gặp phải vấn đề này khi kiểm tra chuỗi rỗng hoặc rỗng

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

đổi nó thành

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

1
Fyi, cũng có!(length(x) == 1L && nzchar(x))
Frank
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.