如何在R脚本中全局抑制警告

时间:2013-04-24 14:09:30

标签: r warnings

我有一个很长的R脚本会抛出一些警告,我可以忽略它。 我可以用

suppressWarnings(expr)

单个陈述。但是如何在全球范围内抑制R中的警告?这有选择吗?

5 个答案:

答案 0 :(得分:197)

您可以使用

options(warn=-1)

但请注意,全局关闭警告信息可能不是一个好主意。

要重新开启警告,请使用

options(warn=0)

(或warn的默认值,请参阅this answer

答案 1 :(得分:86)

你想要options(warn=-1)。但请注意,warn=0不是最安全的警告级别,不应将其视为当前警告级别,特别是在脚本或函数中。因此,临时关闭警告的最安全方法是:

oldw <- getOption("warn")
options(warn = -1)

[your "silenced" code]

options(warn = oldw)

答案 2 :(得分:12)

我已经用C代码中的printf调用替换了warning调用。它将在2.17.2版本中生效,该版本应该在明天晚上提供。然后,您应该可以使用suppressWarnings()或任何其他上述方法来避免警告。

suppressWarnings({ your code })

答案 3 :(得分:8)

查看?options并使用warn

options( warn = -1 )

答案 4 :(得分:2)

如其他答案中所述,您可能希望设置 options(warn = -1) 并恢复到旧行为。 withr 包允许您设置选项值并自动恢复到旧行为。

# install.packages("withr")

withr::with_options(.new = list(warn = -1),
                    {code})

或者,local_* 函数在包含它们的函数结束之前具有相同的效果。

function() {
  withr::local_options(.new = list(warn = -1)

  { code }
}