3

エラーが発生した場合に「FALSE」を返し、それ以外の場合は「TRUE」を返す関数がRにありますか?または、これらの線に沿った何か、または私は次のようなものを評価することによって自分自身を作成する必要がありますifelse(class(try(stop())) == "try-error", FALSE, TRUE)か?

4

2 に答える 2

7

私は時々これをしなければなりませんでした。私がしたことはtryCatch、これらの線に沿って使用したことです。これは、シミュレーションを実行していて、一部のアルゴリズムが収束せず警告が生成されることがありますが、スーパー コンピューターの 100 ノードで実行中にシミュレーションが停止するのを避けるために無視したい場合に便利です。

> out <- tryCatch(stop("bla"), error = function(e) e)
> any(class(out) == "error")
[1] TRUE

プロセスが中断されずに (エラーなしで) 進行する場合、FALSE が返されます。

> out <- tryCatch(1:5, error = function(e) e)
> out
[1] 1 2 3 4 5
> any(class(out) == "error")
[1] FALSE
于 2013-01-23T00:06:59.993 に答える
4

あなたは確かに使いたくないでしょうifelseが、おそらくこれはより効果的なルートを示すでしょう:

> if( inherits(res <- try( stop() ),  "try-error") ){ FALSE} else{ res}
Error in try(stop()) : 
[1] FALSE

> if( inherits( res <- try( "ppp" ),  "try-error") ){ FALSE} else{ res}
[1] "ppp"

少し考えてみましょう。答えはinherits(tryres, "try-error")、それが論理を返すからです。それをどのように処理するかはあなた次第です。多くの場合、テストclass(tryres)=="tryerrorは成功しますが、複数のクラスが返される場合もありますが、その場合は成功しません。

于 2013-01-22T23:15:01.350 に答える