2017-05-02 6 views
14

system.time का उपयोग करके कुछ कोड चलाने के लिए उपयोग किया गया समय रिकॉर्ड करना संभव है। यह एक छोटा सा उदाहरण है:क्या आर में अंकगणितीय परिचालनों की संख्या गिनना संभव है?

system.time(
    mean(rnorm(10^6)) 
) 

लेकिन मैं केवल कुछ ही समय में लेकिन यह भी अंकगणितीय आपरेशनों की संख्या में रुचि (जो है +, -, *, /) नहीं कर रहा हूँ कि कोड के लिए इस्तेमाल किया गया।

उपर्युक्त मामले में माध्य प्राप्त करने के लिए सारांश और विभाजन की संख्या को गिनना आसान होगा, लेकिन जिस कोड को मैं इसे लागू करना चाहता हूं वह कहीं अधिक जटिल है।

इसलिए, मेरा प्रश्न है: क्या आर में कोई फ़ंक्शन है जो अंकगणितीय परिचालनों की संख्या को गिना जाता है?

+4

आर स्तर पर या संकलित स्तर (फोरट्रान, सी/सी ++) पर भी? – Roland

+0

आपकी टिप्पणी के लिए धन्यवाद! व्यक्तिगत रूप से मैं आर स्तर पसंद करूंगा क्योंकि मैं फोरट्रान और सी से परिचित नहीं हूं लेकिन शायद आप दूसरों के लिए अच्छा लगेगा यदि आप अपना समाधान साझा कर सकते हैं। – ehi

उत्तर

25

आप ब्याज की अनुसंधान कार्यों का पता लगाने कर सकते हैं:

counter <- 0 

trace("+", at = 1, print = FALSE, 
     tracer = quote(.GlobalEnv$counter <- .GlobalEnv$counter + 1)) 
#Tracing function "+" in package "base" 
#[1] "+" 

Reduce("+", 1:10) 
#[1] 55 

counter 
#[1] 9 

untrace("+") 
#Untracing function "+" in package "base" 

मुझे यकीन है कि यह आर स्तर यहां कॉल गिनती करने के लिए किया जाएगा कि कैसे उपयोगी नहीं हूँ। कई (अधिकांश?) कार्य सी या फोरट्रान कोड या यहां तक ​​कि बीएलएएस में अंकगणित करते हैं। और मेरे पास संकलित कोड में कॉल गिनने का कोई समाधान नहीं है। संकलन के दौरान आपको इसे सेट अप करने की आवश्यकता होगी यदि यह संभव है।

+0

आपके समाधान के लिए बहुत बहुत धन्यवाद! उदाहरण के लिए एक रैखिक मॉडल के लिए इसका उपयोग करना भी संभव है? उदाहरण के लिए 'एलएम (एमजीपी ~ डीपी, डेटा = एमटीकेआर)' के अंकगणितीय परिचालनों की गणना करने के लिए? – ehi

+0

मेरे उत्तर का अंतिम अनुच्छेद 'lm' पर लागू होता है। – Roland

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