【问题标题】:How to suppress warnings globally in an R Script如何在 R 脚本中全局抑制警告
【发布时间】:2013-04-18 03:14:49
【问题描述】:

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

suppressWarnings(expr)

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

【问题讨论】:

    标签: r warnings


    【解决方案1】:

    正如在其他答案中所讨论的,您可能想要设置 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 }
    }
    

    【讨论】:

      【解决方案2】:

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

      suppressWarnings({ your code })
      

      【讨论】:

      • 这是正确的做法。应标记为答案。
      【解决方案3】:

      你可以使用

      options(warn=-1)
      

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

      要重新打开警告,请使用

      options(warn=0)
      

      (或您对warn 的默认设置,请参阅this answer

      【讨论】:

      • 这行得通,但 Francesco Napolitano 从 2015 年 9 月 22 日开始的方法是更安全、更适用于全球的方法。
      【解决方案4】:

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

      oldw <- getOption("warn")
      options(warn = -1)
      
      [your "silenced" code]
      
      options(warn = oldw)
      

      【讨论】:

      • 比接受的答案恕我直言。如果在函数中使用,请将最后一行替换为on.exit(options(warn = oldw)),以确保无论错误如何都重置选项。
      【解决方案5】:

      查看?options 并使用warn

      options( warn = -1 )
      

      【讨论】:

        猜你喜欢
        • 2011-12-10
        • 2011-11-07
        • 1970-01-01
        • 2021-10-09
        • 2016-07-04
        • 2020-10-08
        • 1970-01-01
        • 2016-06-17
        • 1970-01-01
        相关资源
        最近更新 更多