เกิดข้อผิดพลาดใน if / while (เงื่อนไข) {: ไม่มีค่าที่ต้องการ TRUE / FALSE


159

ฉันได้รับข้อความแสดงข้อผิดพลาดนี้:

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

หรือ

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

มันหมายความว่าอย่างไรและฉันจะป้องกันได้อย่างไร


5
ตัวดำเนินการเท่ากับสองเท่าไม่สามารถทนต่อNAทั้งสองด้านได้ ถ้าฉันกำหนด: x = NAแล้วทำif (x == NA){ ... }ข้อผิดพลาดนี้จะถูกโยนที่รันไทม์เมื่อ parser ตรวจสอบด้านซ้ายมือของคู่เท่ากับ is.na(your_variable)เพื่อแก้ไขข้อผิดพลาดนี้ให้แน่ใจว่าตัวแปรในเงื่อนไขของคุณทุกคนไม่ได้ใช้ NA
Eric Leschinski

คำตอบ:


203

การประเมินผลในการcondition เงื่อนไขต้องมีอย่างใดอย่างหนึ่งหรือผล NAifTRUEFALSE

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

สิ่งนี้สามารถเกิดขึ้นโดยบังเอิญเนื่องจากผลลัพธ์ของการคำนวณ:

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

เพื่อทดสอบว่าวัตถุจะหายไปใช้มากกว่าis.na(x)x == NA


ดูข้อผิดพลาดที่เกี่ยวข้อง:

เกิดข้อผิดพลาดใน if / while (เงื่อนไข) {: อาร์กิวเมนต์มีความยาวเป็นศูนย์

เกิดข้อผิดพลาดใน if / while (เงื่อนไข): อาร์กิวเมนต์ไม่สามารถตีความได้ว่าเป็นตรรกะ

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

ฉันพบปัญหานี้เมื่อตรวจสอบสตริงว่างหรือสตริงว่าง

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

เปลี่ยนเป็น

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

1
Fyi ก็มี!(length(x) == 1L && nzchar(x))
Frank
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.