Disable messages upon loading a package
Asked Answered
W

6

129

I have a package in R (ROCR) that I need to load in my R environment. Upon loading the package, a set of messages are printed. This is ordinarily fine, but since the output of my R script is being used for further analysis I want to completely disable all of this output. How do I do that? Furthermore, I'd prefer to do it without having to modify ROCR at all, so that future users of this script don't have to do that either.

So far:

  • sink() doesn't work here - redirecting both stdout and std err to /dev/null does nothing for me.
  • Unsurprisingly, options(warnings=-1) does nothing either, since these are not warnings, per se, being printed.

Any thoughts?

Wakerly answered 30/12, 2011 at 16:35 Comment(6)
What messages are being printed?Element
While the entire output is unnecessary, the first several lines are: Loading required package: gplots Loading required package: gtools Loading required package: gdata - Note that it won't let me format the message correctly.Wakerly
@Jack, nope, see my answer below for the proper fix.Tigre
@DirkEddelbuettel - That works too. TIMTOWTDI.Element
No Jack, not really. suppressMessages() also suppresses noisy textual message, at least from packages that conform, and protects you against other packages adding new dependencies which you'd need to reflect manually.Tigre
Obligatory "its a package, not a library" comment hereNatter
T
183

Just use suppressMessages() around your library() call:

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> 
Tigre answered 30/12, 2011 at 16:48 Comment(5)
Aren't you supposed to use suppressPackageStartupMessages?Nittygritty
No net gain apart from spending X more characters. Plus suppressPackageStartupMessages suppresses only startup messages where as my preferred suppressMessages() suppresses any and all messages (but not cat() as I recall). But one is not supposed to use that in startup text.Tigre
It's also great that Dirk's suggestion suppress messages from depending packages as well when they're being loaded.Enormous
Is there a way to capture those startup messages? I can capture warnings and errors, but don't know how to capture other such messages.Mildew
@Mildew yes there is, wrap into tryCatch and provide message handlerCuyp
W
37

Dirk's answer suppresses all messages and is not specific to messages that is generated while loading packages.

The more accurate solution to the asked question is:

suppressPackageStartupMessages(library("THE_PACKAGE_NAME"))

A bit more detailed explanation can be found here

Wilmerwilmette answered 16/7, 2018 at 7:32 Comment(0)
R
37

Use suppressPackageStartupMessages, see the answer by MehradMahmoudian. For completeness, adding here examples of usage:

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

suppressPackageStartupMessages(library(ggplot2))

For multiple libraries, use suppressPackageStartupMessages({...}), for example:

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

SEE ALSO:
Suppress package startup messages

Richel answered 13/11, 2019 at 19:9 Comment(0)
P
3

library(ROCR, quietly = TRUE) might be a more elegant option.

Puritan answered 5/5, 2018 at 20:53 Comment(2)
not really, try library(data.table, quietly = TRUE)Mra
neither quietly=TRUE nor verbose=FALSE suppress the messages.Celanese
K
2

If you load packages with a for loop, then you have to silent the complete loop like I show below instead of suppressing the message when loading the library individually.

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)
 }
)
Kindle answered 27/4, 2022 at 8:23 Comment(0)
B
1

By adding quietly = T as shown below will solve the issue:

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

In case of multiple package you can use :

## 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)
Breechloader answered 25/9, 2018 at 6:46 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.