Bir paketi yükledikten sonra mesajları devre dışı bırakın


104

R ortamıma yüklemem gereken R (ROCR) bir paketim var. Paketi yükledikten sonra bir dizi mesaj yazdırılır. Bu genellikle iyidir, ancak R betiğimin çıktısı daha fazla analiz için kullanıldığından, bu çıktının tümünü tamamen devre dışı bırakmak istiyorum. Bunu nasıl yaparım? Dahası, bunu ROCR'yi hiç değiştirmeden yapmayı tercih ederim, böylece bu komut dosyasının gelecekteki kullanıcıları da bunu yapmak zorunda kalmaz.

Şimdiye kadar:

  • sink()burada çalışmıyor - hem stdout hem de std err yönlendirmek /dev/nullbenim için hiçbir şey yapmıyor.
  • Şaşırtıcı olmayan bir şekilde, options(warnings=-1)bunlar basılmış uyarılar olmadığından hiçbir şey yapmaz.

Düşüncesi olan var mı?


Hangi mesajlar yazdırılıyor?

1
Çıktının tamamı gereksiz olsa da, ilk birkaç satır: Loading required package: gplots Loading required package: gtools Loading required package: gdata- Mesajı doğru biçimlendirmeme izin vermeyeceğini unutmayın.
öğrenci

Sonra yük gplots, gtoolsve gdatayüklemeden önce ROCR.

2
@ Jack, hayır, doğru düzeltme için aşağıdaki cevabıma bakın.
Dirk Eddelbuettel

6
Zorunlu "bu bir kitaplık değil, bir paket" yorumu burada
Spacedman

Yanıtlar:


152

Sadece kullanmak suppressMessages()için etrafında library()çağrı:

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> 

20
Kullanman gerekmiyor suppressPackageStartupMessagesmu?
hadley

10
X karakter daha harcamanın dışında net kazanç yok. Artı, suppressPackageStartupMessagesyalnızca benim tercih ettiğim gibi tüm mesajları bastırdığı (ama hatırladığım kadarıyla değil ) başlangıç ​​mesajlarınısuppressMessages() bastırır cat(). Ancak bunun başlangıç ​​metninde kullanılması gerekmiyor.
Dirk Eddelbuettel

1
Dirk'in önerisinin, yüklenirken de bağlı paketlerden gelen mesajları bastırması da harika.
Matt Bannert

2
Bu başlangıç ​​mesajlarını yakalamanın bir yolu var mı? Uyarıları ve hataları yakalayabilirim, ancak bu tür diğer mesajları nasıl yakalayacağımı bilmiyorum.
Adrian

1
@Adrian evet var, tryCatch'e sarın ve mesaj işleyici sağlayın
jangorecki

23

Dirk'in cevabı tüm mesajları bastırır ve paketler yüklenirken oluşturulan mesajlara özgü değildir.

Sorulan soruya daha doğru çözüm şudur:

suppressPackageStartupMessages(library(THE_PACKAGE_NAME))

Biraz daha ayrıntılı açıklama burada bulunabilir


14

SuppressPackageStartupMessages kullanın, @MehradMahmoudian tarafından verilen cevaba bakın. Tamlık için, kullanım örnekleri ekleyerek:

Bir kitaplık suppressPackageStartupMessages(...)için örneğin şunları kullanın :

suppressPackageStartupMessages(library(ggplot2))

Birden çok kitaplık için suppressPackageStartupMessages({...}), örneğin kullanın :

suppressPackageStartupMessages({
    library(ggplot2)
    library(ggdendro)
})

2

quietly = TAşağıda gösterildiği gibi eklemek sorunu çözecektir:

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

Birden fazla paket olması durumunda şunları kullanabilirsiniz:

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

ve aşağıdaki gibi lapply kullanırlar:

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.