1

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

假设我有以下数据:

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

现在我想创建一个返回 NULL 的函数。我用 tryCatch() 试过这个。问题是 fit_fn() 仍然返回错误“计算默认起始值​​时出错”:

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 包于 2021-11-02 创建(v2.0.1)

4

1 回答 1

1

尽管它说这是一个错误,但显示的消息不是通过错误机制完成的,而是直接将输出打印到控制台,因为它已经在它自己的错误处理程序中。如果要禁止显示该消息,则需要捕获函数的输出。然后您可以忽略该输出。你可以这样做

fit_fn <- function(x){
  capture.output(result <- tryCatch(fitdist(x, "exp"), 
           error = function(e){ NULL }))
  result
}
fit_fn(vec)
# NULL
于 2021-11-02T19:56:07.650 回答