如何覆盖 R 中的警告

问题描述 投票:0回答:1

我有一个函数可以生成不需要的警告,但保留该值。

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()
,则会抛出两个警告。

r error-handling rlang
1个回答
1
投票

您可以让您的

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
© www.soinside.com 2019 - 2024. All rights reserved.