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オブジェクトが1つだけあります。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

また、 -を使用する場合はifelseifelse、またはオーバーライドTしてF


これらの関連するエラーと他の悪い状態の警告に注意してください。

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_conditionから見てもよいでしょうassertive.code

于 2014-12-21T11:52:05.740 に答える
6

NULL値をテストするときは、を使用しますis.null(hic.data[[z]])

于 2012-09-06T19:37:24.033 に答える