我收到了错误
Error in if (condition) { : argument is of length zero
或
Error in while (condition) { : argument is of length zero
导致此错误消息的原因是什么?
进一步检查时,似乎值为NULL
。
condition
## NULL
为了处理此错误,我该如何测试NULL值?
我希望这会返回TRUE
,但我得到一个空的逻辑值:
condition == NULL
## logical(0)
答案 0 :(得分:38)
请参阅?NULL
您必须使用is.null
'is.null'如果参数为'NULL'且'FALSE'则返回'TRUE' 否则。
试试这个:
if ( is.null(hic.data[[z]]) ) { print("is null")}
有一个名为NULL的特殊对象。只要需要指示或,就会使用它 指定一个对象不存在。它不应与向量或零列表混淆 长度。 NULL对象没有类型,也没有可修改的属性。只有一个NULL对象 在R中,所有实例都参考。要测试NULL,请使用is.null。您无法设置属性 在NULL。
答案 1 :(得分:15)
导致此错误消息的原因是什么?
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
using if
-else
when you meant ifelse
或overriding T
and F
。
请注意以下其他不良情况的相关错误和警告:
Error in if/while (condition) {: missing Value where TRUE/FALSE needed
Error in if/while (condition) : argument is not interpretable as logical
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
如何测试此类值?
可以使用is.null
测试 NULL
值。有关详细信息,请参阅GSee's answer。
为了安全地拨打if
,一个好的代码模式是:
if(!is.null(condition) &&
length(condition) == 1 &&
!is.na(condition) &&
condition) {
# do something
}
您可能还想查看assertive.code
中的assert_is_if_condition
。
答案 2 :(得分:5)
测试NULL值时,您希望使用is.null(hic.data[[z]])
。