2013-08-12 3 views
5

मैं एक साथ क्रम में एक Emacs समारोह काट दिया मेरी "भेजें करने के लिए R" कुंजी से पहलेआर में स्वचालित रूप से हमेशा समय कार्यों

tOne <- proc.time()[3] 

भेजने के लिए,

tTwo <- proc.time()[3] 
बाद में

, तो मुद्रण के बाद अंतर। प्रिंटिंग हालांकि काफी गन्दा हो जाता है।

आर में स्वचालित रूप से आर को भेजने के लिए आर में एक बेहतर तरीका है? (जैसे एफ # में के रूप में #time "on")


संपादित करें: वर्तमान में, यह कुछ अतिरिक्त नई-पंक्तियों भेजता है के बाद से अवर बफर तार भेजे जाने की आवश्यकता:

> > a<-ocorrelate.parallel(replicate(2, rnorm(100000)), 0.5) 


> 
+ user 0.072 sys 0.020 elapsed 14.925 
> > a<-ocorrelate.parallel(replicate(2, rnorm(100000)), 0.5) 


> 
+ user 0.088 sys 0.032 elapsed 16.868 
> > 

फंक्शन:

(defun ess-timed-cc (vis) 
    (interactive "P") 
    (process-send-string "R" "tone <- proc.time()[1:3];") 
    (ess-eval-region-or-function-or-paragraph-and-step vis) 
    (process-send-string "R" "ttwo <- proc.time()[1:3]; cat(paste(c(\"\", 
     format(ttwo-tone)), c(\"user\", \"sys\", \"elapsed\", \"\n\")));") 
    (other-window 1) 
    (inferior-ess-send-input) 
    (inferior-ess-send-input) 
    (goto-char (point-max)) 
    (other-window -1) 
) 
+0

प्रिंटिंग के बारे में वास्तव में गन्दा क्या है? – eddi

+0

@eddi ने उत्तर को अपडेट किया। – PascalVKooten

+0

मैं देखता हूं, क्या आप उस आउटपुट को प्राप्त करने के लिए उपयोग किए गए emacs फ़ंक्शन भी जोड़ सकते हैं? – eddi

उत्तर

1

आप आर में प्रोफाइलिंग चालू कर सकते हैं और यह आपको प्रत्येक कार्य में बिताए गए समय की सापेक्ष राशि बताएगा, जो आप चाहते हैं। विवरण के लिए ?Rprof देखें।

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

कुछ हुक भी हो सकते हैं जिन्हें आप सेट कर सकते हैं जो समय शुरू और बंद कर देंगे, लेकिन सभी कार्यों में हुक नहीं हैं।

emacs समाधान के लिए आप को दो बार और घटाकर कॉल करने के बजाय system.time में कॉल को लपेटने के लिए उपयोग कर सकते हैं।

आप trace फ़ंक्शन का उपयोग भी कर सकते हैं ताकि proc.time पर 2 कॉल डालने के लिए प्रत्येक कार्य की शुरुआत और अंत में 2 कॉल डालें। इसके लिए उन कार्यों के नामों के वेक्टर की आवश्यकता होगी जिन्हें आप समय पर चाहते थे, लेकिन ls इससे मदद कर सकता था।

+0

मुझे Rprof के बारे में पता है, लेकिन में मेरा दृष्टिकोण जो बाधाओं को खोजने के लिए और अधिक था। जिस तरह से मैं कल्पना करता हूं कि यह एक आरामदायक आसानी से देखने योग्य प्रिंट है। – PascalVKooten

+0

+1 addTaskCallback हालांकि एक अच्छा सुझाव है। – PascalVKooten

+0

@Dualinity, मैंने कुछ और विचार जोड़े जो संभावनाएं हो सकती हैं। –

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