Deshabilitar mensajes al cargar un paquete

99

Tengo un paquete en R (ROCR) que necesito cargar en mi entorno R. Al cargar el paquete, se imprime un conjunto de mensajes. Por lo general, esto está bien, pero dado que la salida de mi script R se está utilizando para análisis adicionales, quiero deshabilitar completamente toda esta salida. ¿Cómo puedo hacer eso? Además, preferiría hacerlo sin tener que modificar ROCR en absoluto, para que los futuros usuarios de este script tampoco tengan que hacerlo.

Hasta aquí:

  • sink()no funciona aquí: la redirección de stdout y std err /dev/nullno hace nada por mí.
  • Como era de esperar, options(warnings=-1)tampoco hace nada, ya que estas no son advertencias, per se, que se están imprimiendo.

¿Alguna idea?

aprendiz
fuente
¿Qué mensajes se están imprimiendo?
1
Si bien la salida completa es innecesaria, las primeras líneas son: Loading required package: gplots Loading required package: gtools Loading required package: gdata- Tenga en cuenta que no me permitirá formatear el mensaje correctamente.
alumno
Luego cargue gplots, gtoolsy gdataantes de cargar ROCR.
2
@Jack, no, vea mi respuesta a continuación para obtener la solución adecuada.
Dirk Eddelbuettel
6
Obligatorio "es un paquete, no una biblioteca" comentario aquí
Spacedman

Respuestas:

149

Solo usa suppressMessages()alrededor de tu library()llamada:

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
fuente
19
¿No se supone que debes usar suppressPackageStartupMessages?
hadley
9
No hay ganancia neta aparte de gastar X personajes más. Además, suppressPackageStartupMessagessolo suprime los mensajes de inicio donde, como mi preferido, suppressMessages()suprime todos y cada uno de los mensajes (pero no, cat()como recuerdo). Pero se supone que uno no debe usar eso en el texto de inicio.
Dirk Eddelbuettel
1
También es genial que la sugerencia de Dirk suprima los mensajes de los paquetes dependientes también cuando se cargan.
Matt Bannert
2
¿Hay alguna forma de capturar esos mensajes de inicio? Puedo capturar advertencias y errores, pero no sé cómo capturar otros mensajes similares.
Adrian
1
@Adrian sí lo hay, envuelva en tryCatch y proporcione el controlador de mensajes
jangorecki
21

La respuesta de Dirk suprime todos los mensajes y no es específica de los mensajes que se generan al cargar paquetes.

La solución más precisa a la pregunta formulada es:

suppressPackageStartupMessages(library(THE_PACKAGE_NAME))

Puede encontrar una explicación un poco más detallada aquí.

Mehrad Mahmoudian
fuente
12

Use suppressPackageStartupMessages, vea la respuesta de @MehradMahmoudian. Para completar, agregue ejemplos de uso:

Para una biblioteca, use suppressPackageStartupMessages(...), por ejemplo:

suppressPackageStartupMessages(library(ggplot2))

Para varias bibliotecas, utilice suppressPackageStartupMessages({...}), por ejemplo:

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

library(ROCR, quietly = TRUE) podría ser una opción más elegante.

Andrei Martins
fuente
4
no realmente, inténtelolibrary(data.table, quietly = TRUE)
Gaurav Singhal
1

Al agregar quietly = Tcomo se muestra a continuación, se resolverá el problema:

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

En caso de paquetes múltiples, puede usar:

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

y usan lapply como se muestra a continuación:

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