2012-08-07 13 views
9

संभव डुप्लिकेट:
R suppress startupMessages from dependencyप्रतिलेख का उपयोग, क्या गैर-स्क्रिप्ट आउटपुट को दबाने का कोई शानदार तरीका है?

मैं sink("NUL")/sink("/dev/null") उपयोग के बारे में पढ़ा है, लेकिन उनमें से कोई भी समस्या मैं आ रही तय किया है। यहां तक ​​कि अगर मैं sink("NUL") और sink() में library() आदेशों लपेट, Rscript करने के लिए अपने कॉल जानकारी के सभी तरह के आउटपुट मैं देख रहा हूँ नहीं करना चाहती:

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 

अंत में सामान केवल उत्पादन मैं वास्तव में चाहते हैं, और यह भी एकमात्र आउटपुट है जो मुझे लगता है कि sink() कमांड के साथ दबाने में सक्षम है। ऐसा लगता है कि Rscript पर केवल एक तर्क होना चाहिए जो इस आउटपुट को दबाता है (जो कि अगर मैं source कंसोल में मेरी स्क्रिप्ट) दिखाता हूं तो कोई इनपुट नहीं है?

+5

शायद '? SuppressPackageStartupMessages' मदद करेगा? – Chase

+3

बस डुप्लिकेट के रूप में बंद होने के संबंध में उल्लेख करना चाहता था कि यह प्रश्न एक स्क्रिप्ट के बारे में पूछ रहा है और पैकेज के संदर्भ में एक प्रश्न के डुप्लिकेट के रूप में चिह्नित किया जा रहा है। तो जोरीस द्वारा 'मूक' नेमस्पेस विधि का भी उपयोग नहीं किया जाएगा, और ओपी के रूप में उपयोग किए जाने पर 'suppressMessages() 'पूर्ण दमन नहीं करता है। तो इस उपयोगकर्ता को 'सटीक डुप्लिकेट' में मदद नहीं करता है। – Thell

+0

धन्यवाद, @Thell। जब मैंने इस सवाल से पूछा, तो मैंने पहले से ही पहचाने गए पोस्ट को पढ़ा था, इसलिए मुझे खुशी है कि आप सहमत हैं। –

उत्तर

6

एंड्रयू, मैं एक ही बात में पड़ गए और suppressMessages() सभी अतिरिक्त उत्पादन को दूर नहीं किया, लेकिन suppressMessages() काम करता है के चारों ओर लिपटा capture.output() के रूप में sink() का उपयोग कर।

$ 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)))' 

क्या जब Rmpfr पैकेज लोड हो रहा है पर जा रहा है कई अच्छी तरह व्यवहार स्टार्टअप एक बहुत अच्छा नहीं संदेश output कनेक्शन का उपयोग कर के साथ साथ message कनेक्शन का उपयोग कर लिखे संदेश है। निश्चित रूप से, आप अपने आप पर sink() बना और कुशल बना सकते हैं, लेकिन यह capture.output() पहले से ही करने के लिए सेटअप है।

शायद पाने के लिए एक छोटे से अधिक नियंत्रण सहायक :: होगा एक वर्बोज़ आर्ग की स्थापना

$ 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") 

कौन सा पैदावार ::

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


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

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

सामान के बहुत सारे तुम वहाँ के साथ चारों ओर खेल सकते हैं, लेकिन कम से कम से कम आप देख सकते हैं कि कैसे संदेश आउटपुट को पूरी तरह दबाया जाए।

उम्मीद है कि यह मदद करता है। मज़े करो!

+0

ऐसा लगता है कि यह समाधान होने जा रहा है। मुझे यह जोड़ना चाहिए था कि मेरी मुख्य स्क्रिप्ट स्रोत चार अन्य लोगों के साथ शुरू होनी चाहिए, और 'लाइब्रेरी() 'कथन इन सहायक स्क्रिप्ट में हैं। फिर भी, 'capture.output (suppressMessages()) में 'स्रोत()' कॉल को लपेटना 'लगभग काम करता है ... अब, मेरे पास प्रत्येक स्रोत() के लिए आउटपुट' वर्ण (0)' की एक पंक्ति है वांछित आउटपुट से पहले कॉल। कोई विचार क्या हो सकता है? बहुत बहुत धन्यवाद! –

+0

वहां यह है: 'capture.output()' के बिना 'suppressMessages() 'का उपयोग करके पूरी समस्या हल करती है। एक बार फिर धन्यवाद! –

+1

आपको 'वर्ण (0)' प्राप्त करने का कारण यह है कि आपने कब्जे वाले आउटपुट को किसी भी चीज़ पर असाइन नहीं किया था, इसलिए इसे मुद्रित किया गया था और आपके विशेष मामले में पूरा संदेश पहले ही दबा दिया गया था।ध्यान रखें कि 'suppressMessages()' स्वयं ही आपको खाली वर्ण सरणी के साथ नहीं छोड़ेगा; जैसा कि उपरोक्त दूसरे उदाहरण कमांड के साथ है, जहां Rmpfr 'suppressMessages() 'का उपयोग करने के बाद भी प्रारंभिक संदेश निकालता है। – Thell

संबंधित मुद्दे

 संबंधित मुद्दे