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

假设我循环了不同yx1000 次。我希望能够知道错误何时发生并实施修复中间循环。

summary(rq(y~x,tau=0.01),se="ker")但是,我所有使用is()etc的尝试都没有成功。我以前从未使用过这种对象类型(而且 Google/SE 搜索还没有揭示答案)。

我想要类似的东西is.error(summary(rq(y~x,tau=0.01),se="ker")),实际上并不存在。

4

2 回答 2

0

详细说明@SvenHohenstein 的答案,希望返回成功评估的结果,而不仅仅是是否发生错误。我们可能还想使用返回错误消息的原因conditionMessage。我们想捕获 class 的错误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 回答
0

以下命令将返回一个逻辑值,指示是否发生错误:

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

您可以使用replicate而不是 for 循环。它更有效。在以下示例中,返回一个包含xy和逻辑error值的列表。该过程重复两次。您可以使用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 回答