Wyłącz wiadomości po załadowaniu pakietu

103

Mam pakiet w R (ROCR), który muszę załadować w moim środowisku R. Po załadowaniu paczki drukowany jest zestaw komunikatów. Zwykle jest to w porządku, ale ponieważ wynik mojego skryptu R jest używany do dalszej analizy, chcę całkowicie wyłączyć wszystkie te dane wyjściowe. Jak mogę to zrobić? Ponadto wolałbym to zrobić bez konieczności modyfikowania ROCR w ogóle, aby przyszli użytkownicy tego skryptu również nie musieli tego robić.

Jak dotąd:

  • sink()nie działa tutaj - przekierowanie zarówno stdout, jak i std err na /dev/nullnic nie robi.
  • Nic dziwnego, options(warnings=-1)że również nic nie robi, ponieważ nie są to same ostrzeżenia, które są drukowane.

jakieś pomysły?

uczeń
źródło
Jakie wiadomości są drukowane?
1
Chociaż całe dane wyjściowe są niepotrzebne, kilka pierwszych wierszy to: Loading required package: gplots Loading required package: gtools Loading required package: gdata- Zauważ, że nie pozwoli mi to poprawnie sformatować wiadomości.
uczeń
Następnie załaduj gplots, gtoolsi gdataprzed załadowaniem ROCR.
2
@Jack, nie, zobacz moją odpowiedź poniżej, aby poprawnie naprawić.
Dirk Eddelbuettel
6
Obowiązkowy komentarz „to pakiet, a nie biblioteka”
Spacedman

Odpowiedzi:

152

Po prostu użyj suppressMessages()wokół swojego library()połączenia:

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
źródło
20
Nie powinieneś używać suppressPackageStartupMessages?
Hadley
10
Żadnego zysku netto poza wydaniem X dodatkowych postaci. Plus suppressPackageStartupMessagespomija tylko wiadomości startowe, gdzie jako preferowane suppressMessages()pomija wszystkie wiadomości (ale nie cat()tak, jak pamiętam). Ale nie należy tego używać w tekście startowym.
Dirk Eddelbuettel
1
Wspaniale jest również to, że sugestia Dirka blokuje komunikaty z zależnych pakietów również podczas ich ładowania.
Matt Bannert
2
Czy istnieje sposób na przechwycenie tych wiadomości startowych? Potrafię przechwytywać ostrzeżenia i błędy, ale nie wiem, jak przechwytywać inne tego typu komunikaty.
Adrian
1
@Adrian tak, zawiń w tryCatch i zapewnij obsługę wiadomości
jangorecki
23

Odpowiedź Dirka blokuje wszystkie wiadomości i nie jest specyficzna dla wiadomości generowanych podczas ładowania pakietów.

Bardziej trafnym rozwiązaniem postawionego pytania jest:

suppressPackageStartupMessages(library(THE_PACKAGE_NAME))

Nieco bardziej szczegółowe wyjaśnienie można znaleźć tutaj

Mehrad Mahmoudian
źródło
14

Użyj suppressPackageStartupMessages, zobacz odpowiedź @MehradMahmoudian. Dla kompletności, dodaj przykłady użycia:

Dla jednej biblioteki użyj suppressPackageStartupMessages(...)na przykład:

suppressPackageStartupMessages(library(ggplot2))

W przypadku wielu bibliotek użyj suppressPackageStartupMessages({...})na przykład:

suppressPackageStartupMessages({
    library(ggplot2)
    library(ggdendro)
})
Timur Shtatland
źródło
1

library(ROCR, quietly = TRUE) może być bardziej elegancką opcją.

Andrei Martins
źródło
4
nie bardzo, spróbujlibrary(data.table, quietly = TRUE)
Gaurav Singhal
1

Dodanie, quietly = Tjak pokazano poniżej, rozwiąże problem:

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

W przypadku pakietów wielokrotnych można skorzystać z:

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

i używają lapply jak poniżej:

lapply(PKGs, library, character.only = TRUE ,quietly = T)
Yousef
źródło