我有一个源文件(在knitr中),其中包含使用特定字体系列的图形。我想禁止显示警告消息


library(ggplot2)

ggplot(mtcars, aes(mpg, cyl, label = gear)) +
  geom_text(family = "helvet")

我知道我可以在脚本options(warn = -1)中禁止显示所有警告消息,并且知道如何使用suppressWarnings。我还可以在tryCatch中包围特定的块。

有没有办法只在整个文件中禁止以上的grid.Call警告?

最佳答案


withCallingHandlers({
    <your code>
}, warning=function(w) {
    if (<your warning>)
        invokeRestart("muffleWarning")
})

例如,
x = 1
withCallingHandlers({
    warning("oops")
    warning("my oops ", x)
    x
}, warning=function(w) {
    if (startsWith(conditionMessage(w), "my oops"))
        invokeRestart("muffleWarning")
})

产生输出
[1] 1
Warning message:
In withCallingHandlers({ : oops
>

局限性是可以将conditionMessage转换为另一种语言(尤其是从基本函数转换时),从而无法可靠地标识文本。

参见Selective suppressWarnings() that filters by regular expression

关于r - 禁止发出任何特定警告消息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38603668/

10-10 23:52