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

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()倍的是不保留的.而在withCallingHandlers()中,这两个警告都被抛出.

推荐答案

你可以让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

R相关问答推荐

R的GG平行坐标图中的排序变量

使用gggrassure减少地块之间的空间

如何修复R码的置换部分?

在数学中正确显示摄氏度、开氏度或华氏度

par函数中的缩写,比如mgp,mar,mai是如何被破译的?

在数组索引上复制矩阵时出错

2个Rscript.exe可执行文件有什么区别?

plotly hover文本/工具提示在shiny 中不起作用

以相同的方式对每个表进行排序

如何将网站图像添加到带有极坐标的面包裹条形图?

如何根据R中其他变量的类别汇总值?

在数据帧列表上绘制GGPUP

我如何go 掉盒子图底部的数字?

如何计算R glm probit中的线性预测因子?

我如何使用循环来编写冗余的Rmarkdown脚本?

如何计算每12行的平均数?

如何获取R chromote中的当前URL?

使用卡环从R中的列中删除单位(&C)

臭虫?GradeThis::grade_this_code()在`-code-check`块中失败

R代码来迭代列表,将它们组合成一个带有分组变量的数据框?