在加载包时禁用消息

我在 R (ROCR)中有一个包,需要在 R 环境中加载它。在加载包时,将打印一组消息。这通常是很好的,但是因为我的 R 脚本的输出正在用于进一步的分析,所以我想完全禁用所有这些输出。我该怎么做?此外,我更喜欢在完全不需要修改 ROCR 的情况下进行此操作,这样以后使用此脚本的用户也不必这样做。

到目前为止:

  • sink() doesn't work here - redirecting both stdout and std err to /dev/null does nothing for me.
  • 毫不奇怪,options(warnings=-1)也不做任何事情,因为这些本身并不是正在打印的警告。

Any thoughts?

64043 次浏览

只要在你的 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>

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

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

对于这个问题,更准确的解决办法是:

suppressPackageStartupMessages(library(THE_PACKAGE_NAME))

更详细的解释可以找到 给你

如下所示,增加 quietly = T将解决这一问题:

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

对于多个软件包,您可以使用:

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

and them use lapply as below:

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

使用 suppressPackageStartupMessages,参见 MehradMahmoudian的答案。为了完整起见,在这里添加一些用法示例:

For one library, use suppressPackageStartupMessages(...), for example:

suppressPackageStartupMessages(library(ggplot2))

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

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

参见:
取消包启动消息

如果使用 for 循环加载包,那么必须像下面所示的那样静默完整的循环,而不是在单独加载库时抑制消息。

requiredPackages = c('plyr','dplyr','data.table')
suppressMessages(
for (p in requiredPackages) {
if (!require(p, character.only = TRUE)){
install.packages(p)
}
library(p, character.only = TRUE)
}
)