このエラーメッセージの原因とはどういう意味ですか?
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
。
これらの関連するエラーと他の悪い状態の警告に注意してください。
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
。