Deaktivieren Sie Nachrichten beim Laden eines Pakets

95

Ich habe ein Paket in R (ROCR), das ich in meine R-Umgebung laden muss. Beim Laden des Pakets wird eine Reihe von Nachrichten gedruckt. Dies ist normalerweise in Ordnung, aber da die Ausgabe meines R-Skripts für die weitere Analyse verwendet wird, möchte ich die gesamte Ausgabe vollständig deaktivieren. Wie mache ich das? Außerdem würde ich es vorziehen, ohne ROCR ändern zu müssen, damit zukünftige Benutzer dieses Skripts dies auch nicht tun müssen.

Bisher:

  • sink()funktioniert hier nicht - das Umleiten von stdout und std err an /dev/nullbringt nichts für mich.
  • Es ist nicht überraschend, dass options(warnings=-1)auch nichts unternommen wird, da dies per se keine Warnungen sind, die gedruckt werden.

Irgendwelche Gedanken?

Lerner
quelle
Welche Nachrichten werden gedruckt?
1
Während die gesamte Ausgabe nicht erforderlich ist, lauten die ersten Zeilen wie Loading required package: gplots Loading required package: gtools Loading required package: gdatafolgt : - Beachten Sie, dass ich die Nachricht nicht korrekt formatieren kann.
Lerner
Dann Last gplots, gtoolsund gdatavor dem Laden ROCR.
2
@ Jack, nein, siehe meine Antwort unten für die richtige Lösung.
Dirk Eddelbuettel
6
Obligatorischer Kommentar "Es ist ein Paket, keine Bibliothek" hier
Spacedman

Antworten:

146

Verwenden suppressMessages()Sie einfach um Ihren library()Anruf:

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
quelle
19
Solltest du nicht benutzen suppressPackageStartupMessages?
Hadley
9
Kein Nettogewinn, außer X weitere Charaktere auszugeben. Plus suppressPackageStartupMessagesunterdrückt nur Startnachrichten, wobei meine bevorzugten suppressMessages()Nachrichten alle Nachrichten unterdrücken (aber nicht, cat()wie ich mich erinnere). Aber das soll man im Starttext nicht verwenden.
Dirk Eddelbuettel
1
Es ist auch großartig, dass Dirks Vorschlag auch Nachrichten von abhängigen Paketen unterdrückt, wenn diese geladen werden.
Matt Bannert
2
Gibt es eine Möglichkeit, diese Startmeldungen zu erfassen? Ich kann Warnungen und Fehler erfassen, weiß aber nicht, wie ich andere solche Nachrichten erfassen soll.
Adrian
1
@ Adrian ja gibt es, wickeln Sie in tryCatch und stellen Sie Nachrichtenhandler
jangorecki
21

Die Antwort von Dirk unterdrückt alle Nachrichten und ist nicht spezifisch für Nachrichten, die beim Laden von Paketen generiert werden.

Die genauere Lösung für die gestellte Frage lautet:

suppressPackageStartupMessages(library(THE_PACKAGE_NAME))

Eine etwas ausführlichere Erklärung finden Sie hier

Mehrad Mahmoudian
quelle
9

Verwenden Sie unterdrückenPackageStartupMessages, siehe die Antwort von @MehradMahmoudian. Fügen Sie der Vollständigkeit halber Anwendungsbeispiele hinzu:

Verwenden Sie suppressPackageStartupMessages(...)für eine Bibliothek beispielsweise:

suppressPackageStartupMessages(library(ggplot2))

Verwenden Sie suppressPackageStartupMessages({...})für mehrere Bibliotheken beispielsweise:

suppressPackageStartupMessages({
    library(ggplot2)
    library(ggdendro)
})
Timur Shtatland
quelle
2

library(ROCR, quietly = TRUE) könnte eine elegantere Option sein.

Andrei Martins
quelle
4
nicht wirklich, versuchen Sielibrary(data.table, quietly = TRUE)
Gaurav Singhal
1

Durch Hinzufügen quietly = Twie unten gezeigt wird das Problem behoben:

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

Bei mehreren Paketen können Sie Folgendes verwenden:

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

und sie verwenden lapply wie folgt:

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