Disabilita i messaggi al caricamento di un pacchetto


99

Ho un pacchetto in R (ROCR) che devo caricare nel mio ambiente R. Al caricamento del pacco, viene stampata una serie di messaggi. Normalmente va bene, ma poiché l'output del mio script R viene utilizzato per ulteriori analisi, desidero disabilitare completamente tutto questo output. Come lo faccio? Inoltre, preferirei farlo senza dover modificare ROCR, in modo che anche i futuri utenti di questo script non debbano farlo.

Finora:

  • sink()non funziona qui - reindirizzare sia stdout che std err a /dev/nullnon fa nulla per me.
  • Non sorprende options(warnings=-1)che non faccia nulla, poiché questi non sono avvisi, di per sé, che vengono stampati.

qualche idea?


Quali messaggi vengono stampati?

1
Sebbene l'intero output non sia necessario, le prime righe sono: Loading required package: gplots Loading required package: gtools Loading required package: gdata- Nota che non mi consente di formattare correttamente il messaggio.
discente

Quindi caricare gplots, gtoolse gdataprima di caricare ROCR.

2
@ Jack, no, vedi la mia risposta di seguito per la soluzione corretta.
Dirk Eddelbuettel

6
Obbligatorio "è un pacchetto, non una libreria" commento qui
Spacedman

Risposte:


149

Usa solo suppressMessages()intorno alla tua library()chiamata:

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
Non dovresti usare suppressPackageStartupMessages?
Hadley

9
Nessun guadagno netto a parte la spesa di altri X personaggi. Inoltre suppressPackageStartupMessagessopprime solo i messaggi di avvio dove come preferisco suppressMessages()sopprime tutti i messaggi (ma non cat()come ricordo). Ma non si dovrebbe usarlo nel testo di avvio.
Dirk Eddelbuettel

1
È anche fantastico che il suggerimento di Dirk sopprima anche i messaggi che dipendono dai pacchetti quando vengono caricati.
Matt Bannert

2
C'è un modo per catturare quei messaggi di avvio? Posso acquisire avvisi ed errori, ma non so come acquisire altri messaggi simili.
Adrian

1
@Adrian sì, avvolgi in tryCatch e fornisci il gestore dei messaggi
jangorecki

21

La risposta di Dirk sopprime tutti i messaggi e non è specifica per i messaggi generati durante il caricamento dei pacchetti.

La soluzione più accurata alla domanda posta è:

suppressPackageStartupMessages(library(THE_PACKAGE_NAME))

Una spiegazione un po 'più dettagliata può essere trovata qui


12

Usa suppressPackageStartupMessages, vedi la risposta di @MehradMahmoudian. Per completezza, aggiungere esempi di utilizzo:

Per una libreria, usa suppressPackageStartupMessages(...), ad esempio:

suppressPackageStartupMessages(library(ggplot2))

Per più librerie, utilizza suppressPackageStartupMessages({...}), ad esempio:

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


1

Aggiungendo quietly = Tcome mostrato di seguito si risolverà il problema:

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

In caso di pacchetto multiplo puoi utilizzare:

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

e usano lapply come di seguito:

lapply(PKGs, library, character.only = TRUE ,quietly = T)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.