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?


¿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> 

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í.


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)
})


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)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.