2

以下:

install.packages("quantreg")
require(quantreg)

y=rnorm(10)
x=rnorm(10)

summary(rq(y~x,tau=0.01),se="ker")

エラーを生成しますError in summary.rq(rq(y ~ x, tau = 0.01), se = "ker") : tau - h < 0: error in summary.rq

異なる1000回ループするとyします。xエラーがいつ発生するかを知り、ループの途中で修正を実装できるようにしたい。

しかし、 etcなどをsummary(rq(y~x,tau=0.01),se="ker")使用して作業する私のすべての試みはどこにも行きません。is()私はこれまでこのオブジェクトタイプを扱ったことがありません(そしてGoogle / SE検索はまだ答えを明らかにしていません)。

is.error(summary(rq(y~x,tau=0.01),se="ker"))実際には存在しないのようなものが欲しいです。

4

2 に答える 2

0

次のコマンドは、エラーが発生したかどうかを示す論理値を返します。

class(tryCatch(summary(rq(y ~ x,tau = 0.01),se = "ker"),
               error = function(e) e))[1] == "simpleError"

replicateforループの代わりに使用できます。より効率的です。x次の例では、、、yおよび論理error値を含むリストが返されます。手順は2回繰り返されます。あなたはn = 1000それを1000回複製するために使うことができます。

replicate(n = 2,
          expr = {y <- rnorm(10);
                  x <- rnorm(10);
                  error <- class(tryCatch(summary(rq(y ~ x,tau = 0.01),se = "ker"), error = function(e) e))[1] == "simpleError";
                  return(list(x = x, y = y, error = error))},
          simplify = FALSE)
于 2012-09-15T07:36:18.423 に答える
0

@SvenHohensteinからの回答を詳しく説明すると、エラーが発生したかどうかだけでなく、評価が成功したときに結果を返したいと思います。を使用して、エラーメッセージの理由も返したいと思うでしょうconditionMessage。クラスのエラーをキャッチしたいsimpleErrorので、そのタイプの条件に固有のハンドラーを作成します。それで

error <- FALSE              # no error yet
result <- tryCatch({        # result from summary(), or from the error handler
    summary(rq(y ~ x,tau = 0.01),se = "ker")
}, simpleError = function(e) {  # only catch simpleErrors
    error <<- TRUE      # yes, error occurred
    conditionMessage(e) # 'result' gets error message
})

その後、戻りlist(x = x, y = y, error=error, result=result)ます。

于 2012-09-15T16:00:33.843 に答える