Nonaktifkan pesan setelah memuat paket

103

Saya memiliki paket dalam R (ROCR) yang perlu saya muat di lingkungan R. Setelah memuat paket, satu set pesan akan dicetak. Ini biasanya baik-baik saja, tetapi karena output dari skrip R saya digunakan untuk analisis lebih lanjut, saya ingin menonaktifkan semua output ini sepenuhnya. Bagaimana aku melakukan itu? Selain itu, saya lebih suka melakukannya tanpa harus memodifikasi ROCR sama sekali, sehingga pengguna skrip ini di masa mendatang juga tidak perlu melakukan itu.

Sejauh ini:

  • sink()tidak berfungsi di sini - mengalihkan baik stdout dan std err untuk /dev/nulltidak melakukan apa pun bagi saya.
  • Tidak mengherankan, options(warnings=-1)juga tidak melakukan apa-apa, karena ini bukan peringatan, yang sedang dicetak.

Ada pemikiran?

pelajar
sumber
Pesan apa yang sedang dicetak?
1
Meskipun keseluruhan keluaran tidak diperlukan, beberapa baris pertama adalah: Loading required package: gplots Loading required package: gtools Loading required package: gdata- Perhatikan bahwa saya tidak dapat memformat pesan dengan benar.
pelajar
Kemudian muat gplots,, gtoolsdan gdatasebelum memuat ROCR.
2
@ Jack, tidak, lihat jawaban saya di bawah untuk perbaikan yang tepat.
Dirk Eddelbuettel
6
Wajib "ini adalah paket, bukan perpustakaan" beri komentar di sini
Spacedman

Jawaban:

152

Cukup gunakan di suppressMessages()sekitar library()panggilan Anda :

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
sumber
20
Bukankah kamu seharusnya menggunakan suppressPackageStartupMessages?
hadley
10
Tidak ada keuntungan bersih selain menghabiskan X lebih banyak karakter. Plus suppressPackageStartupMessageshanya menekan pesan startup di mana sebagai pilihan saya suppressMessages()menyembunyikan setiap dan semua pesan (tapi tidak cat()seingat saya). Tapi seseorang tidak seharusnya menggunakannya dalam teks startup.
Dirk Eddelbuettel
1
Ini juga bagus bahwa saran Dirk menekan pesan dari paket yang bergantung juga saat mereka sedang dimuat.
Matt Bannert
2
Apakah ada cara untuk menangkap pesan startup tersebut? Saya dapat menangkap peringatan dan kesalahan, tetapi tidak tahu bagaimana cara menangkap pesan lain seperti itu.
Adrian
1
@Adrian ya ada, bungkus ke tryCatch dan berikan penangan pesan
jangorecki
23

Jawaban Dirk menyembunyikan semua pesan dan tidak spesifik untuk pesan yang dibuat saat memuat paket.

Solusi yang lebih akurat untuk pertanyaan yang diajukan adalah:

suppressPackageStartupMessages(library(THE_PACKAGE_NAME))

Penjelasan yang lebih detail dapat ditemukan di sini

Mehrad Mahmoudian
sumber
14

Gunakan suppressPackageStartupMessages, lihat jawaban dari @MehradMahmoudian. Untuk kelengkapan, menambahkan contoh penggunaan:

Untuk satu pustaka, gunakan suppressPackageStartupMessages(...), misalnya:

suppressPackageStartupMessages(library(ggplot2))

Untuk beberapa pustaka, gunakan suppressPackageStartupMessages({...}), misalnya:

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

library(ROCR, quietly = TRUE) mungkin pilihan yang lebih elegan.

Andrei Martins
sumber
4
tidak juga, cobalibrary(data.table, quietly = TRUE)
Gaurav Singhal
1

Dengan menambahkan quietly = Tseperti yang ditunjukkan di bawah ini akan menyelesaikan masalah:

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

Jika ada banyak paket, Anda dapat menggunakan:

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

dan mereka menggunakan lapply seperti di bawah ini:

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