if / while(condition){:参数的长度为零时出错

时间:2012-09-06 19:34:53

标签: r r-faq

我收到了错误

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)

3 个答案:

答案 0 :(得分:38)

请参阅?NULL

您必须使用is.null

  

'is.null'如果参数为'NULL'且'FALSE'则返回'TRUE'        否则。

试试这个:

if ( is.null(hic.data[[z]]) ) { print("is null")}

来自R Language Definition

的第2.1.6节
  

有一个名为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 ifelseoverriding 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]])