我有一个函数可以生成不需要的警告,但保留该值。
f <- function(a) {
if (a > 1) {
warning("an uninformative warning")
}
a
}
g1 <- function(b) {
withCallingHandlers(
x <-f(b),
warning = function(w) {
warning("A more informative warning")
})
x
}
g1(2)
#> Warning in (function (w) : A more informative warning
#> Warning in f(b): an uninformative warning
#> [1] 2
创建于 2023-12-12,使用 reprex v2.0.2
不幸的是,这会出现 2 个警告。
与
tryCatch()
x 不保留。如果使用 withCallingHandlers()
,则会抛出两个警告。
您可以让您的
warning
处理程序发出自己的警告,然后调用 muffleWarning
重新启动:
f <- function(a) {
if (a > 1) {
warning("an uninformative warning")
}
a
}
g1 <- function(b) {
withCallingHandlers(
x <- f(b),
warning = function(w) {
warning("A more informative warning")
tryInvokeRestart("muffleWarning")
})
x
}
测试:
g1(2)
#> [1] 2
#> Warning message:
#> In (function (w) : A more informative warning