200

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

suppressWarnings(expr)

对于单个语句。但是如何在全局范围内抑制 R 中的警告?有这个选项吗?

4

5 回答 5

254

你可以使用

options(warn=-1)

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

要重新打开警告,请使用

options(warn=0)

(或任何您的默认设置warn,请参阅此答案

于 2013-04-24T14:15:37.413 回答
129

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

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

[your "silenced" code]

options(warn = oldw)
于 2015-09-22T14:20:11.310 回答
62

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

suppressWarnings({ your code })
于 2016-06-30T16:41:14.017 回答
8

看看?options并使用warn

options( warn = -1 )
于 2013-04-24T14:14:06.163 回答
3

正如在其他答案中所讨论的,您可能想要设置 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 }
}
于 2021-07-02T09:07:16.007 回答