加载软件包时禁用消息


97

我有一个R包(ROCR),需要在R环境中加载。装入包装后,将打印一组消息。通常,这很好,但是由于R脚本的输出正用于进一步分析,因此我想完全禁用所有这些输出。我怎么做?此外,我宁愿完全不必修改ROCR来执行此操作,这样该脚本的未来用户也不必这样做。

至今:

  • sink()在这里不起作用-将stdout和std err都重定向到/dev/null对我没有任何作用。
  • 毫不奇怪,它们options(warnings=-1)什么也不做,因为这些本身并不是警告,而是要打印出来的。

有什么想法吗?


正在打印什么消息?

1
虽然不需要整个输出,但前几行是: Loading required package: gplots Loading required package: gtools Loading required package: gdata-请注意,它不会让我正确格式化消息。
学习者

然后加载gplotsgtools然后gdata再加载ROCR

2
@Jack,不,请参阅下面的正确答案。
Dirk Eddelbuettel 2011年

6
强制性的“它的包,而不是图书馆”在这里评论
Spacedman 2011年

Answers:


147

只需suppressMessages()library()通话中使用:

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> 

19
你不应该使用suppressPackageStartupMessages吗?
hadley 2011年

9
除了花费X个以上的字符外,没有任何净收益。加号suppressPackageStartupMessages仅抑制启动消息,而我首选suppressMessages()抑制任何和所有消息(但不cat()包括我记得的)。但是不应该在启动文本中使用它。
Dirk Eddelbuettel 2011年

1
Dirk的建议也很好地抑制了消息在加载时也依赖于依赖包。
马特·班纳特

2
有没有办法捕获这些启动消息?我可以捕获警告和错误,但不知道如何捕获其他此类消息。
阿德里安

1
@Adrian是的,包装到tryCatch中并提供消息处理程序
jangorecki


10

使用preventPackageStartupMessages,请参阅@MehradMahmoudian的答案。为了完整起见,请添加用法示例:

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

suppressPackageStartupMessages(library(ggplot2))

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

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


1

通过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)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.