2012-07-26 15 views
11

के तहत आर स्क्रिप्ट चलाने के दौरान आउटपुट त्रुटि/चेतावनी लॉग (txt फ़ाइल) यदि मैं कमांड लाइन के तहत आर स्क्रिप्ट चलाता हूं (वास्तव में मैं इसे VBA में कॉल करने से चलाता हूं), तो मैं किसी त्रुटि/चेतावनी संदेशों को txt में कैसे आउटपुट कर सकता हूं फाइल?कमांड लाइन

+0

yourprogram.exe कैसे के बारे में> anoutputfile.txt (मैं ऐड टिप्पणी समारोह का उपयोग करने के लिए पर्याप्त प्रतिष्ठा नहीं है)? हालांकि यह सब कुछ कैप्चर करता है। * Nix पर आप stderr को निर्देशित कर सकते हैं, Win * के बारे में निश्चित नहीं है। Http://stackoverflow.com/questions/1109017/how-do-you-print-to-stderr-in-r – Pete855217

+1

देखें आप संभवतः 'सिंक() ' – Andrie

+0

का उपयोग कर सकते हैं। मैंने आर में सिंक का उपयोग करने के तरीके पर वेब पर खोजने की कोशिश की लेकिन मेरे मामले में त्रुटि/चेतावनी संदेश आउटपुट करने के तरीके पर थोड़ा उलझन में। क्या आप मुझे ऐसा करने के बारे में एक त्वरित उदाहरण देंगे? फिर से धन्यवाद। – Joyce

उत्तर

26

आप संदेशों को हटाने और फ़ाइल को चेतावनियों को हटाने के लिए sink() का उपयोग कर सकते हैं।

setwd(tempdir()) 

## capture messages and errors to a file. 
zz <- file("all.Rout", open="wt") 
sink(zz, type="message") 

try(log("a")) 

## reset message sink and close the file connection 
sink(type="message") 
close(zz) 

## Display the log file 
readLines("all.Rout") 
[1] "Error in log(\"a\") : Non-numeric argument to mathematical function" 
+0

ग्रेट सामान, धन्यवाद! – Joyce

+3

हालांकि, मैं लॉग फ़ाइल के साथ कनेक्शन कैसे बंद कर सकता हूं? मैंने सिंक() की कोशिश की, लेकिन जब मैं लॉग फ़ाइल को मिटाना चाहता हूं, तो मैं इसे हटा नहीं सकता, जैसा कि लगता है कि अभी भी कनेक्शन है। मेरे आर बंद करने के बाद ही, मैं इसे हटा सकता हूं। मुझे कनेक्शन को कैसे बंद करना चाहिए? – Joyce

+1

ऐसा इसलिए है क्योंकि मूल उत्तर में, सिंक को 'type = "message" के साथ समाप्त नहीं किया गया था और कनेक्शन बंद नहीं था। (अद्यतन उत्तर में फिक्स्ड) – Jthorpe

17

लॉग फ़ाइल के सिलसिले को बंद करने के sink(type="message") बजाय sink() और फिर close(zz) उपयोग करने के लिए आपके पास:

यहाँ एक उदाहरण ?sink के लिए मदद से अनुकूलित है: चाल तर्क type="message" स्थापित करने के लिए है ।