-->

误差在如果/当(条件){:参数是长度为零的(Error in if/while (condition

2019-06-18 01:35发布

我收到错误

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)

Answer 1:

?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属性。



Answer 2:

是什么原因导致这个错误信息,这是什么意思?

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 ,或覆盖TF


注意等不良条件下,这些相关的错误和警告:

误差在如果/当(条件){:缺失值,其中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_conditionassertive.code



Answer 3:

当NULL值测试,要使用is.null(hic.data[[z]])



文章来源: Error in if/while (condition) { : argument is of length zero
标签: r r-faq