tryCatch() 不会抑制错误消息

tryCatch() does not suppress the error messages

我想创建一个不打印任何错误消息的函数。

假设我有以下数据:

library(fitdistrplus)
vec <- rnorm(100)

然后下面给出错误信息:

fitdist(vec, "exp")
#> Error in computing default starting values.
#> Error in manageparam(start.arg = start, fix.arg = fix.arg, obs = data, : Error in start.arg.default(obs, distname) : 
#>   values must be positive to fit an exponential  distribution

现在我想创建一个执行 return NULL 的函数。我用 tryCatch() 试过这个。问题是 fit_fn() 仍然 return 错误 'Error in computing default starting values':

fit_fn <- function(x){
  tryCatch(fitdist(x, "exp"), error = function(e){ NULL })
}

fit_fn(vec)
#> Error in computing default starting values.
#> NULL

有什么方法可以做到这一点?此处仅应打印 NULL:

fit_fn(vec)
#> NULL

reprex package (v2.0.1)

创建于 2021-11-02

尽管它说这是一个错误,但显示的消息不是通过错误机制完成的,但输出是 being printed directly to the console 因为它已经在它自己的错误处理程序中。如果您想抑制该消息,则需要捕获该函数的输出。然后你可以忽略那个输出。 你可以用

fit_fn <- function(x){
  capture.output(result <- tryCatch(fitdist(x, "exp"), 
           error = function(e){ NULL }))
  result
}
fit_fn(vec)
# NULL