Kesalahan if / while (kondisi) {: missing Value di mana TRUE / FALSE dibutuhkan

159

Saya menerima pesan kesalahan ini:

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

atau

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

Apa artinya itu, dan bagaimana saya mencegahnya?

Kepedulian Warga
sumber
5
Double sama dengan operator tidak dapat mentoleransi sebuah NAdi kedua sisi. Jika saya mendefinisikan: x = NAdan kemudian melakukan if (x == NA){ ... }kesalahan maka ini akan dilemparkan pada saat runtime ketika parser memeriksa sisi kiri sama dengan ganda. Untuk memperbaiki kesalahan ini, pastikan setiap variabel dalam kondisi Anda tidak menggunakan NA is.na(your_variable).
Eric Leschinski

Jawaban:

203

Evaluasi conditionmenghasilkan NA. The ifbersyarat harus memiliki sebuah TRUEatau FALSEhasil.

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

Ini dapat terjadi secara tidak sengaja sebagai hasil perhitungan:

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

Untuk menguji apakah sebuah benda yang hilang digunakan is.na(x)daripada x == NA.


Lihat juga kesalahan terkait:

Kesalahan dalam if / while (kondisi) {: argumen panjang nol

Kesalahan saat / saat (kondisi): argumen tidak dapat ditafsirkan sebagai logis

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

Saya mengalami ini ketika memeriksa string nol atau kosong

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

mengubahnya menjadi

if (is.null(x) || x == '') {
pbatey
sumber
1
Fyi, ada juga!(length(x) == 1L && nzchar(x))
Frank