If/while (条件){ : 缺少 TRUE/FALSE 所需的值中的错误

我收到了这条错误消息:

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

或者

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

这是什么意思,我如何防止它?

595659 次浏览

condition的评估结果是 NAif条件必须有 TRUEFALSE的结果。

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

我在检查 null 或空字符串时遇到了这个问题

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

改成了

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

这与 "NA"工作,而不是 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])
}

在使用复杂的 if语句时,我在 forloops中得到了同样的错误。我通过使用 isTRUE包装我的条件来修复这个问题。

if(isTRUE(condition)==TRUE) {do something}