34

我收到了错误

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)
4

3 回答 3

38

?NULL

你必须使用is.null

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

尝试这个:

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

来自R 语言定义的第 2.1.6 节

有一个特殊的对象叫做 NULL。每当需要指示或指定对象不存在时使用它。它不应与零长度的向量或列表相混淆。NULL 对象没有类型,也没有可修改的属性。R 中只有一个 NULL 对象,所有实例都引用它。要测试 NULL,请使用 is.null。您不能在 NULL 上设置属性。

于 2012-09-06T19:37:11.503 回答
16

导致此错误消息的原因是什么,它是什么意思?

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


请注意其他不良情况的这些相关错误和警告:

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_conditionassertive.code.

于 2014-12-21T11:52:05.740 回答
6

测试 NULL 值时,您希望使用is.null(hic.data[[z]]).

于 2012-09-06T19:37:24.033 回答