Desativar mensagens ao carregar um pacote

99

Tenho um pacote em R (ROCR) que preciso carregar em meu ambiente R. Ao carregar o pacote, um conjunto de mensagens é impresso. Normalmente, isso é bom, mas como a saída do meu script R está sendo usada para análises posteriores, quero desativar completamente toda essa saída. Como faço isso? Além disso, prefiro fazer isso sem precisar modificar o ROCR, de modo que futuros usuários desse script também não precisem fazer isso.

Tão longe:

  • sink()não funciona aqui - redirecionar stdout e std err para /dev/nullnão faz nada para mim.
  • Sem surpresa, options(warnings=-1)também não faz nada, uma vez que estes não são avisos, per se, sendo impressos.

Alguma ideia?

aprendiz
fonte
Que mensagens estão sendo impressas?
1
Embora toda a saída seja desnecessária, as primeiras linhas são: Loading required package: gplots Loading required package: gtools Loading required package: gdata- Observe que isso não me permite formatar a mensagem corretamente.
aluno de
Em seguida gplots, carregue , gtoolse gdataantes de carregar ROCR.
2
@Jack, não, veja minha resposta abaixo para a correção adequada.
Dirk Eddelbuettel
6
Comentário obrigatório "é um pacote, não uma biblioteca" aqui
Spacedman

Respostas:

149

Basta usar em suppressMessages()torno de sua library()chamada:

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
fonte
19
Você não deveria usar suppressPackageStartupMessages?
hadley
9
Nenhum ganho líquido além de gastar mais X caracteres. Além disso, suppressPackageStartupMessagessuprime apenas as mensagens de inicialização, conforme minha preferência suppressMessages()suprime todas e quaisquer mensagens (mas não cat()que eu me lembre). Mas não se deve usar isso no texto de inicialização.
Dirk Eddelbuettel
1
Também é ótimo que a sugestão de Dirk suprima mensagens de pacotes dependentes quando eles estão sendo carregados.
Matt Bannert
2
Existe uma maneira de capturar essas mensagens de inicialização? Posso capturar avisos e erros, mas não sei como capturar outras mensagens semelhantes.
Adrian
1
@Adrian sim, existe, envolva o tryCatch e forneça o gerenciador de mensagens
jangorecki
21

A resposta de Dirk suprime todas as mensagens e não é específica para mensagens geradas durante o carregamento de pacotes.

A solução mais precisa para a pergunta feita é:

suppressPackageStartupMessages(library(THE_PACKAGE_NAME))

Uma explicação um pouco mais detalhada pode ser encontrada aqui

Mehrad Mahmoudian
fonte
12

Use suppressPackageStartupMessages, veja a resposta por @MehradMahmoudian. Para completar, adicionando exemplos de uso:

Para uma biblioteca, use suppressPackageStartupMessages(...), por exemplo:

suppressPackageStartupMessages(library(ggplot2))

Para várias bibliotecas, use suppressPackageStartupMessages({...}), por exemplo:

suppressPackageStartupMessages({
    library(ggplot2)
    library(ggdendro)
})
Timur Shtatland
fonte
1

library(ROCR, quietly = TRUE) pode ser uma opção mais elegante.

Andrei Martins
fonte
4
não realmente, tentelibrary(data.table, quietly = TRUE)
Gaurav Singhal
1

Ao adicionar quietly = Tconforme mostrado abaixo, o problema será resolvido:

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

Em caso de pacote múltiplo, você pode usar:

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

e eles usam lapply como abaixo:

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