Rでエラーをどのように「スロー」しますか?データフレームといくつかの列名を取り、それらを処理する関数があります。列が存在しない場合、関数を停止し、それに依存するすべての関数を停止します。
私はrecover
とbrowse
とtraceback
を見ましたが、まあ、それらは近いように見えましたが、私が探しているものではありませんでした。
help(tryCatch)
を参照してください:
状態は「
signalCondition
」によって通知されます。加えて
'stop
'および 'warning
'関数は、受け入れられるように変更されました
条件引数。
後で「関連項目」の下で:
'
stop
'および 'warning
'信号条件、および 'try
'は基本的に 'tryCatch
'の簡易バージョンです。
あなたはおそらくstop
が欲しいでしょう。
簡単な例:
f <- function(a, b){
if (a == 0){
stop("error message")
}
}
ダークが言及している基本機能を超えて:
R.ooパッケージ には、非常に便利なthrow()関数を含む追加の例外処理機能があります。通常のtryまたはtrycatch関数で例外をキャッチできます。
> try(throw("Division by zero.")); print("It's ok!");
Error: [2009-10-22 10:24:07] Exception: Division by zero.
[1] "It's ok!"
詳細については、こちらをご覧ください: http://www1.maths.lth.se/help/R/R.oo/
実際、関数stopifnot
は、コードに健全性チェックを実装するのに非常に便利です。いくつかの論理式を取り、それらのいずれかが偽と評価された場合、エラーを返します。
例:列 'c'がデータフレーム 'df'に存在するかどうかを確認するには:
df <- data.frame(a = numeric(), b = numeric())
stopifnot(!is.null(df$c))
これにより、次のエラーがスローされます。
Error: !is.null(df$c) is not TRUE
列が存在するかどうかを確認し、必要な操作を実行できます。data.frame
名前付きdf1
および列col1
が存在します:
if(! any(grepl('^col1$',colnames(df1)))) stop("nonexistent column")
または
if(! any(grepl('^col1$',colnames(df1)))) return(-1)
例えば