我收到错误
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)
见?NULL
你必须使用is.null
“is.null”返回“真”,如果它的参数是“空”和“假”,否则。
试试这个:
if ( is.null(hic.data[[z]]) ) { print("is null")}
从第2.1.6 R语言定义
有一个叫NULL特殊对象。 它是用来每当有必要说明或指定的对象不存在。 它不应该混淆长度为零的向量或列表。 空对象没有类型和没有修改的属性。 仅存在一个NULL对象中的R,这是所有实例参考。 为了测试NULL使用is.null。 你不能设置为NULL属性。
是什么原因导致这个错误信息,这是什么意思?
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
和F
。
注意等不良条件下,这些相关的错误和警告:
误差在如果/当(条件){:缺失值,其中TRUE / FALSE所需
误差在如果/当(条件):参数不是解释成逻辑
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
。
当NULL值测试,要使用is.null(hic.data[[z]])