如何在R中重写警告

relj7zay  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(93)

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

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
不幸的是,这引发了两个警告。
对于tryCatch(),x不会被保留,而对于withCallingHandlers(),两个警告都被抛出。

bakd9h0s

bakd9h0s1#

您可以让warning处理程序发出自己的警告,然后调用muffleWarning restart:

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', call. = FALSE)
      tryInvokeRestart("muffleWarning")
    })
  x
}

字符串
测试:

g1(2)
#> [1] 2
#> Warning message:
#> A more informative warning

相关问题