【问题标题】:Disable messages upon loading a package加载包时禁用消息
【发布时间】:2012-01-30 16:30:17
【问题描述】:

我有一个 R (ROCR) 包,我需要在我的 R 环境中加载它。加载包后,会打印一组消息。这通常很好,但由于我的 R 脚本的输出被用于进一步分析,我想完全禁用所有这些输出。我怎么做?此外,我更愿意在完全不必修改 ROCR 的情况下这样做,这样该脚本的未来用户也不必这样做。

到目前为止:

  • sink() 在这里不起作用 - 将 stdout 和 std err 都重定向到 /dev/null 对我没有任何作用。
  • 不出所料,options(warnings=-1) 也没有做任何事情,因为它们本身并不是正在打印的警告。

有什么想法吗?

【问题讨论】:

  • 正在打印什么消息?
  • 虽然不需要整个输出,但前几行是:Loading required package: gplots Loading required package: gtools Loading required package: gdata - 请注意,它不会让我正确格式化消息。
  • 然后在加载ROCR之前加载gplotsgtoolsgdata
  • @Jack,不,请参阅下面的答案以获得正确的解决方法。
  • 这里必须注释“它是一个包,而不是一个库”

标签: r message libraries suppress-warnings verbosity


【解决方案1】:

只需在您的library() 呼叫周围使用suppressMessages()

edd@max:~$ R

R version 2.14.1 (2011-12-22)
Copyright (C) 2011 The R Foundation for Statistical Computing
ISBN 3-900051-07-0
Platform: x86_64-pc-linux-gnu (64-bit)
[...]

R> suppressMessages(library(ROCR))
R>                                               # silently loaded
R> search() 
 [1] ".GlobalEnv"         "package:ROCR"         # it's really there      
 [3] "package:gplots"     "package:KernSmooth"
 [5] "package:grid"       "package:caTools"   
 [7] "package:bitops"     "package:gdata"     
 [9] "package:gtools"     "package:stats"     
[11] "package:graphics"   "package:grDevices" 
[13] "package:utils"      "package:datasets"  
[15] "package:methods"    "Autoloads"         
[17] "package:base"      
R> 

【讨论】:

  • 你不应该使用suppressPackageStartupMessages吗?
  • 除了多花 X 个字符外没有任何净收益。加上suppressPackageStartupMessages 仅抑制 启动消息,而我首选的 suppressMessages() 抑制任何和所有消息(但不是 cat() 我记得)。但是不应该在启动文本中使用它。
  • Dirk 的建议在加载依赖包时也抑制来自依赖包的消息也很棒。
  • 有没有办法捕获那些启动消息?我可以捕获警告和错误,但不知道如何捕获其他此类消息。
  • @Adrian 是的,包含在 tryCatch 中并提供消息处理程序
【解决方案2】:

Dirk's answer 抑制所有消息,并且不特定于加载包时生成的消息。

对所提问题更准确的解决方案是:

suppressPackageStartupMessages(library(THE_PACKAGE_NAME))

更详细的解释可以找到here

【讨论】:

    【解决方案3】:

    使用suppressPackageStartupMessages,查看MehradMahmoudian的答案。为了完整起见,在此处添加使用示例:

    对于一个库,使用suppressPackageStartupMessages(...),例如:

    suppressPackageStartupMessages(library(ggplot2))
    

    对于多个库,使用suppressPackageStartupMessages({...}),例如:

    suppressPackageStartupMessages({
        library(ggplot2)
        library(ggdendro)
    })
    

    另请参阅:
    Suppress package startup messages

    【讨论】:

      【解决方案4】:

      library(ROCR, quietly = TRUE) 可能是更优雅的选择。

      【讨论】:

      • 不是真的,试试library(data.table, quietly = TRUE)
      【解决方案5】:

      如下图添加quietly = T即可解决问题:

      suppressWarnings(suppressMessages(library("dplyr", quietly = T)))
      

      如果是多个包,您可以使用:

      ## specify the package names
      PKGs <- c("affy","gcrma","readxl","ggplot2","lattice" )
      

      他们使用 lapply 如下:

      lapply(PKGs, library, character.only = TRUE ,quietly = T)
      

      【讨论】:

        猜你喜欢
        • 2018-08-06
        • 2019-04-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-06
        • 1970-01-01
        相关资源
        最近更新 更多