2012-08-07 12 views
9

Olası Çoğalt:
R suppress startupMessages from dependencyRscript'i kullanma, komut dosyası olmayan çıktıyı bastırmanın iyi bir yolu var mı?

Ben sink("NUL")/sink("/dev/null") kullanma hakkında okudum, ama ikisi de yaşıyorum problem belirlemiştir. Ben sink("NUL") ve sink() yılında library() komutları sarın bile, Rscript benim çağrısı görmek istemiyorum bilgilerin her şekilde verir: sonunda şeyler aslında istediğim tek çıkış

Loading required package: Matrix 
Loading required package: methods 
Loading required package: lattice 
Loaded glmnet 1.8 

Loading required package: MASS 
Loading required package: lme4 

Attaching package: 'lme4' 

The following object(s) are masked from 'package:stats': 

    AIC, BIC 

Loading required package: R2WinBUGS 
Loading required package: coda 

Attaching package: 'coda' 

The following object(s) are masked from 'package:lme4': 

    HPDinterval 

Loading required package: abind 
Loading required package: foreign 

arm (Version 1.5-05, built: 2012-6-6) 

Working directory is C:/Users/andrews/bootstraps/user/_branches/ER-PoC/Bootstraps/R 


Attaching package: 'arm' 

The following object(s) are masked from 'package:coda': 

    traceplot 

[1] "client=51"   "date='01-01-2011'" 
[1] "01-01-2011" 
[1] 51 

olduğunu

ve Ayrıca sadece sink() komutları ile bastırmak mümkün çıktı çıktı. Bu çıktıyı bastırmak için sadece Rscript argümanı olması gerektiği gibi görünüyor (konsolda source komutumda bile görünmüyor bile) ... herhangi bir girdi var mı?

+5

belki?? SuppressPackageStartupMessages' yardımcı olur? – Chase

+3

Sadece bu sorunun bir betik hakkında soru sorduğunu ve bir paket açısından konuşulan soruların bir kopyası olarak işaretlendiğini yinelemeli olarak kapatmaktan bahsetmek istedim. Yani Joris tarafından 'sessiz' ad alanı yöntemi bile kullanılmayacaktı ve 'suppressMessages() ', OP belirtildiği gibi kullanıldığında tam bir bastırma yapmaz. Yani her iki durumda da 'tam kopya' bu kullanıcıya yardımcı olmaz. – Thell

+0

Teşekkürler, @Thell. Bu soruyu sorduğumda tespit edilen yazıyı zaten okumuştum, bu yüzden kabul ettiğine sevindim. –

cevap

6

Andrew, aynı şeyle karşılaştım ve suppressMessages() tüm ekstra çıktıları kaldırmadı, ancak capture.output()suppressMessages() çalışmalarının etrafına sarılmış sink() kullanıyor. Rmpfr paketini yüklerken neler oluyor

$ rscript --vanilla -e 'library(Rmpfr)' 
Loading required package: methods 
Loading required package: gmp 
---->8---- 
Loading C code of R package 'Rmpfr': GMP using 32 bits per limb 
---->8---- 


$ rscript --vanilla -e 'suppressMessages(library(Rmpfr))' 
Loading C code of R package 'Rmpfr': GMP using 32 bits per limb 


$ rscript --vanilla -e 'msg.out <- capture.output(suppressMessages(library(Rmpfr)))' 

output bağlantısı kullanarak çok güzel bir mesajla birlikte message bağlantısı kullanarak yazılı birkaç iyi huylu başlangıç ​​mesajlar olduğunu. Elbette, bir sink()'u kendi başınıza oluşturabilir ve değiştirebilirsiniz, ancak bu zaten capture.output()'un yapması gereken ayardır.

Belki biraz daha fazla kontrol yararlı :: olacağını almak için bir ayrıntılı arg ayarı verir :: şeyler

$ ./sample.R 
[1] "Hello" 


$ ./sample.R "verbose=TRUE" 
Loading required package: methods 
Loading required package: gmp 

Attaching package: 'gmp' 
---->8---- 
[1] "Hello" 

sürü orada oynayabilir, ama en olabilir

$ cat sample.R 
#!/c/opt/R/R-2.15.0/bin/rscript --vanilla 

cmd_args <- commandArgs(TRUE); 

if(length(cmd_args) > 0) { 
    eval(parse(text = cmd_args[1])) 
} 

if(exists("verbose")) { 
    library(Rmpfr) 
} else { 
    msg.trap <- capture.output(suppressMessages(library(Rmpfr))) 
} 

print("Hello") 

En azından msg çıktısını tamamen nasıl bastırabileceğinizi görebilirsiniz.

Yardım edin. İyi eğlenceler!

+0

Bu çözüm olacak gibi görünüyor. Ana senaryonun başlayacağı diğer dört kaynağı da ekledim ve kütüphane() ifadelerinin hepsi bu yardımcı betiklerde. Öyle olsa bile, 'source()' 'capture.output (suppressMessages()) işlevindeki çağrılar neredeyse işliyor ... şimdi,' source() 'ın her biri için bir çıkış karakterine (0) sahibim. 'istenilen çıktıdan önce çağırır. Bunun ne olabileceği hakkında bir fikrin var mı? Her iki şekilde de teşekkürler! –

+0

Orada: sadece '' pushpress.output() 'olmadan' 'suppressMessages()' kullanarak tüm sorunu çözer. Tekrar teşekkürler! –

+1

Bir karakter (0) 'almanızın nedeni, yakalanan çıktıyı herhangi bir şeye atamadınız, bu nedenle yazdırıldı ve özel durumunuzda tüm mesaj zaten bastırılmıştı.'SuppressMessages()' ın kendi başınıza her zaman boş bir karakter dizisi bırakmayacağını unutmayın; Yukarıdaki ikinci örnek komutunda olduğu gibi, Rmpfr 'suppressMessages()' kullandıktan sonra bile bir başlatma mesajı çıkarır. – Thell

İlgili konular