导致此错误消息的原因是什么,它是什么意思?
if
语句将单个逻辑值(技术上是长度为 1 的逻辑向量)作为条件的输入。
当输入条件的长度为零时引发错误。您可以使用以下方法重现它:
if (logical()) {}
## Error: argument is of length zero
if (NULL) {}
## Error: argument is of length zero
导致此错误的常见错误
$
使用索引时很容易意外导致此错误。例如:
l <- list(a = TRUE, b = FALSE, c = NA)
if(l$d) {}
## Error in if (l$d) { : argument is of length zero
也使用if
-else
当你的意思ifelse
,或覆盖T
andF
。
请注意其他不良情况的这些相关错误和警告:
if/while(条件)错误{:缺少需要 TRUE/FALSE 的值
if/while(条件)中的错误:参数不能解释为逻辑
if (NA) {}
## Error: missing value where TRUE/FALSE needed
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
值可以测试使用is.null
。有关更多详细信息,请参阅GSee 的答案。
为了让您调用if
安全,一个好的代码模式是:
if(!is.null(condition) &&
length(condition) == 1 &&
!is.na(condition) &&
condition) {
# do something
}
您可能还想assert_is_if_condition
从assertive.code
.