2014-04-03 6 views
8

मैं एक पेशेवर खेल के मोंटे कार्लो सिमुलेशन के लिए आर कोड बना रहा हूं। चूंकि गेम गतिशीलता बहुत जटिल होती है और डीबगिंग प्रक्रिया को सरल बनाने के लिए, मैं आर में "लॉग फ़ाइल" में होने वाली प्रत्येक क्रिया के लिए टेक्स्ट की एक पंक्ति भेजना चाहता हूं। लॉग फ़ाइल के लिए एक व्यापक, क्या अनुकरण में क्या हो रहा है के खेलने वर्णन करते हुए नाटक होगा, और यह कुछ ऐसा दिखाई देगा ...सामान्य आउटपुट को कंसोल पर प्रिंट करते समय समय-समय पर "लॉग फ़ाइल" में टेक्स्ट कैसे भेजें?

  • "खेल शुरू होता है"
  • कब्जा एक्स टीम को असाइन किया गया
  • खिलाड़ी वाई जाता गेंद
  • खिलाड़ी वाई स्कोर
  • गलत नहीं खिलाड़ी जेड से होता है
  • प्रतिस्थापन होता है (खिलाड़ी डब्ल्यू < -> खिलाड़ी क्यू)
  • ...
  • "खेल समाप्त होता है"

मैं सिर्फ सिंक() फ़ंक्शन का उपयोग नहीं कर सकते क्योंकि सिमुलेशन चल रहा है, जबकि, मैं (setTxtProgressBar समारोह के साथ) एक प्रगति बार सेटअप और वास्तविक समय स्कोर होने के लिए कंसोल पर मुद्रित। अगर मैंने सिंक() का उपयोग किया, तो मैं आर कंसोल पर प्रगति संकेतकों या स्कोर में से कोई भी नहीं देख सका। इसका कोई मतलब भी है क्या? दूसरे शब्दों में मुझे समय-समय पर एक संचयी फैशन में एक लॉग फ़ाइल में पाठ भेजने की आवश्यकता है। यहाँ आप के साथ काम करने के लिए कुछ देने के लिए कुछ उदाहरण कोड ...

धन्यवाद

for (i in 1:100) 
{**SOMEHOW NEED TO PRINT LINE "START LOOP" TO LOG FILE**; 
a <- rnorm(n = 100, mean = i, sd = 5); 
print(mean(a)); #PRINT THIS MEAN TO THE CONSOLE 
**SOMEHOW PRINT "LOOP 'i' COMPLETE" TO LOG FILE**} 

उत्तर

6

?cat देखें है। आप अपनी लॉग फ़ाइल में एक फ़ाइल कनेक्शन खोल सकते हैं और अपने cat कॉल में निर्दिष्ट कर सकते हैं, जब आप कनेक्शन निर्दिष्ट नहीं करते हैं तो यह कंसोल पर प्रिंट होगा।

जैसा कि आप कहते हैं, sink() का उपयोग न करें क्योंकि यह लॉग फ़ाइल को डिफ़ॉल्ट कनेक्शन बना देगा। इसके बजाय, file() के साथ एक नामित कनेक्शन खोलें।

> log_con <- file("test.log") 
> cat("write to log", file = log_con) 
> cat("write to console") 
write to console 

लाइन "लिखने लॉग इन करने" और "सांत्वना देने लिखने" के साथ एक लॉग फ़ाइल में ऊपर दिए गए परिणामों कंसोल पर मुद्रित।

+1

यह लगभग है कि मैं क्या जरूरत है! एकमात्र मुद्दा यह है कि यह लॉग फ़ाइल में एक संचयी तरीके से पाठ नहीं जोड़ता है। यही है, हर बार जब मैं लूप चलाता हूं, तो वह लॉग फ़ाइल साफ़ करता है और जब लूप पूरा हो जाता है, तो केवल अंतिम पंक्ति लॉग फ़ाइल में बनी रहती है। क्या इसे संचयी बनाने का कोई तरीका है? – Slyron

+0

'बिल्ली' देखें। 'Append' के लिए डिफ़ॉल्ट गलत है, लेकिन यदि आप इसे सत्य पर सेट करते हैं और किसी कनेक्शन के बजाय फ़ाइल के नाम का उपयोग करते हैं तो यह संलग्न होगा (यानी, संचयी रूप से जोड़ें)। – Gregor

5

"संलग्न" मोड में लॉग फ़ाइल खोलने के लिए:

log_con <- file("test.log",open="a") 
+0

सुंदर, धन्यवाद – Slyron

2

यह समझ से बाहर, Shujaa और BigFinger के लिए धन्यवाद। , यहाँ संक्षेप में कैसे तुम मेरे उदाहरण कोड के साथ यह करना होगा:

log_con <- file("/filepath/log.txt", open="a") 

for (i in 1:100) 
{ 
cat("loop begins", file = log_con, sep="\n") 
a <- rnorm(n = 100, mean = i, sd = 5) 
print(mean(a)) 
cat("single loop completed", file = log_con, sep="\n") 
} 

close(log_con) 
संबंधित मुद्दे