Désactiver les messages lors du chargement d'un package

97

J'ai un package en R (ROCR) que je dois charger dans mon environnement R. Lors du chargement du package, un ensemble de messages est imprimé. C'est généralement bien, mais comme la sortie de mon script R est utilisée pour une analyse plus approfondie, je veux désactiver complètement toute cette sortie. Comment je fais ça? De plus, je préfère le faire sans avoir à modifier du tout ROCR, afin que les futurs utilisateurs de ce script n'aient pas à le faire non plus.

Jusque là:

  • sink()ne fonctionne pas ici - rediriger à la fois stdout et std err vers /dev/nullne fait rien pour moi.
  • Sans surprise, options(warnings=-1)ne fait rien non plus, car ce ne sont pas des avertissements en soi imprimés.

Des pensées?

apprenant
la source
Quels messages sont imprimés?
1
Bien que la sortie entière ne soit pas nécessaire, les premières lignes sont: Loading required package: gplots Loading required package: gtools Loading required package: gdata- Notez que cela ne me permettra pas de formater le message correctement.
apprenant
Ensuite, chargez gplots, gtoolset gdataavant de charger ROCR.
2
@Jack, non, voir ma réponse ci-dessous pour la solution appropriée.
Dirk Eddelbuettel
6
Obligatoire "c'est un paquet, pas une bibliothèque" commenter ici
Spacedman

Réponses:

147

Utilisez simplement suppressMessages()autour de votre library()appel:

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> 
Dirk Eddelbuettel
la source
19
N'êtes-vous pas censé utiliser suppressPackageStartupMessages?
hadley
9
Aucun gain net à part dépenser X personnages supplémentaires. De plus, suppressPackageStartupMessagessupprime uniquement les messages de démarrage où, comme mon préféré, suppressMessages()supprime tous les messages (mais pas cat()comme je me souviens). Mais on n'est pas censé l'utiliser dans le texte de démarrage.
Dirk Eddelbuettel
1
C'est également formidable que la suggestion de Dirk supprime également les messages des packages dépendants lorsqu'ils sont chargés.
Matt Bannert
2
Existe-t-il un moyen de capturer ces messages de démarrage? Je peux capturer les avertissements et les erreurs, mais je ne sais pas comment capturer d'autres messages de ce type.
Adrian
1
@Adrian oui, enroulez-vous dans tryCatch et fournissez un gestionnaire de messages
jangorecki
20

La réponse de Dirk supprime tous les messages et n'est pas spécifique aux messages générés lors du chargement des packages.

La solution la plus précise à la question posée est:

suppressPackageStartupMessages(library(THE_PACKAGE_NAME))

Une explication un peu plus détaillée peut être trouvée ici

Mehrad Mahmoudian
la source
10

Utilisez suppressPackageStartupMessages, voir la réponse de @MehradMahmoudian. Par souci d'exhaustivité, ajoutez des exemples d'utilisation:

Pour une bibliothèque, utilisez suppressPackageStartupMessages(...), par exemple:

suppressPackageStartupMessages(library(ggplot2))

Pour plusieurs bibliothèques, utilisez suppressPackageStartupMessages({...}), par exemple:

suppressPackageStartupMessages({
    library(ggplot2)
    library(ggdendro)
})
Timur Shtatland
la source
1

library(ROCR, quietly = TRUE) pourrait être une option plus élégante.

Andrei Martins
la source
4
pas vraiment, essayezlibrary(data.table, quietly = TRUE)
Gaurav Singhal
1

En ajoutant quietly = Tcomme indiqué ci-dessous, le problème sera résolu:

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

En cas de package multiple, vous pouvez utiliser:

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

et ils utilisent lapply comme ci-dessous:

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