आर

2011-01-25 11 views
25

में एक कॉल ग्राफ़ उत्पन्न करना मुझे बहुत सारे कार्यों के साथ खराब रूप से स्वरूपित मोनोलिथिक आर कोड का एक बड़ा हिस्सा दिया गया है, और मैं काम करना चाहता हूं कि कौन से फ़ंक्शन कॉल करते हैं।आर

मैंने सोचा कि मैं roxygen की @callGraph सामग्री का उपयोग कर सकता हूं, लेकिन ए) कोड को पैकेज में होना जरूरी है, जो इस कोड के साथ सिरदर्द होगा, और बी) जब मैं दौड़ता हूं तो यह काम नहीं करता है यह मेरा एक साधारण पैकेज पर है। मुझे रोक्सीजन लेखकों में से एक से एक पोस्टिंग दिखाई देती है जिसमें कहा गया है कि आरजीआरपीवीज निर्भरता के कारण कॉल ग्राफ़ जनरेशन अक्षम है, लेकिन कोड वहां है। वैसे भी।

किसी को भी जल्दी से काम करने का बेहतर तरीका मिल गया है कि foo कॉल बार, बाज और qux, और वह qux कॉल quux?

संपादित करें: आर की प्रोफाइलिंग प्रणाली के आधार पर समाधान बहुत अच्छे हैं, मानते हैं कि आप वास्तव में कोड चला सकते हैं ... फ़ाइलों में आधे सामान नहीं चलते हैं, और मुझे नहीं पता कि यह क्या करता है ... स्टेटिक मुझे लगता है कि विश्लेषण के लिए विश्लेषण बहुत अधिक है।

संपादित करें 2: रोक्सीजन की कॉल ग्राफ सामग्री फ़ंक्शन की अभिव्यक्ति के पुनरावर्ती मूल के आधार पर एक स्थिर विश्लेषण करने लगती है और is.callable की जांच कर रही है। किसी भी समारोह पर इसे चलाने में सक्षम होना बहुत अच्छा होगा ... मैं इस कल के साथ खेल सकता हूं ...

उत्तर

17

आप CRAN पर 'mvbutils' पैकेज से 'foodweb' फ़ंक्शन देख सकते हैं।

http://www.r-bloggers.com/r-function-of-the-day-foodweb-2/

अस्वीकरण:: यह मेरी वेबसाइट है और मुझे लगता है कि लेख लिखा था यहाँ एक लेख इसके उपयोग का वर्णन करने के लिए एक कड़ी है।

+0

मैं एक ऐसा फ़ंक्शन लिखने के विचार पर विचार कर रहा था जो इस तरह कुछ करता है। और यह उस समय के बारे में सही था जब आपने उपर्युक्त ब्लॉग पोस्ट पोस्ट किया था। बड़े मन वाले ऐसा सोचते हैं? :) –

+1

काफी ठीक है जो मैं बाद में था। अब आउटपुट को डॉट प्रारूप में बदलने के लिए, या शायद इसे किसी अन्य आर ग्राफ पैकेज में लोड करें ... – Spacedman

3

profr आपकी मदद करेगा? प्रलेखन से:

> ?profr 
> glm_ex <- profr(example(glm)) 
Read 17 items 
>  head(glm_ex) 
      f level time start end leaf source 
8  example  1 0.32 0.00 0.32 FALSE utils 
9 <Anonymous>  2 0.04 0.00 0.04 FALSE <NA> 
10  source  2 0.28 0.04 0.32 FALSE base 
11 prepare_Rd  3 0.02 0.00 0.02 FALSE <NA> 
12  render  3 0.02 0.02 0.04 FALSE <NA> 
13 getSrcLines  3 0.02 0.04 0.06 FALSE base 
>  summary(glm_ex) 
       f   level    time   start  
eval.with.vis :10 Min. : 1.000 Min. :0.02 Min. :0.0000 
<Anonymous> : 3 1st Qu.: 4.000 1st Qu.:0.02 1st Qu.:0.1200 
lazyLoadDBfetch: 3 Median : 6.000 Median :0.02 Median :0.2000 
%in%   : 3 Mean : 7.211 Mean :0.03 Mean :0.1769 
inherits  : 3 3rd Qu.: 9.000 3rd Qu.:0.02 3rd Qu.:0.2600 
is.factor  : 3 Max. :22.000 Max. :0.32 Max. :0.3000 
(Other)  :65             
     end   leaf   source   
Min. :0.0200 Mode :logical Length:90   
1st Qu.:0.1500 FALSE:75  Class :character 
Median :0.2400 TRUE :15  Mode :character 
Mean :0.2069 NA's :0       
3rd Qu.:0.2800          
Max. :0.3200          

> plot(glm_ex) 

enter image description here

काफी नहीं हैं कि क्या आप के बाद कर रहे हैं, लेकिन आप अपनी आवश्यकताओं के अनुकूल करने में सक्षम हो सकता है।

1

मैंने इसका उपयोग नहीं किया है, लेकिन proftools पैकेज पर एक त्वरित नज़र से संकेत मिलता है कि यह ऐसा कर सकता है। आपको पहले Rprof चलाने और आउटपुट का विश्लेषण करने के लिए proftools का उपयोग करना होगा। मुझे लगता है कि आप plotProfileCallGraph() फ़ंक्शन चाहते हैं।

3

प्रोफेसर और प्रोफेसर के अलावा, आर विकी पर रोमेन द्वारा पर्ल स्क्रिप्ट है। ग्राफ़विज़ के साथ संयुक्त, यह ग्राफ करता है (किनारों के भार के साथ) - अधिक के लिए here देखें।

+0

अच्छा। क्या इसे आर बिन निर्देशिका में जाना है? ऐसा लगता है कि एक ./prprof2dot perl स्क्रिप्ट के रूप में चल रहा है, और मुझे कोई आर निर्भरता नहीं दिखाई दे रही है ... – Spacedman

+0

जब मैंने पर्ल स्क्रिप्ट का उपयोग किया, तो मैंने इसे स्थानीय पथ या वर्तमान निर्देशिका में रखा। यह अभी तक आर –

+0

के साथ पूरी तरह से एकीकृत नहीं है लिंक अब मर चुका है। – qed

2

CodeDepends पैकेज (CRAN, website, GitHub) दिलचस्प लग रहा है, मैं इस पर हालांकि देखा नहीं किया है। दूसरों के अलावा, यह makeCallGraph() समारोह के माध्यम से काम करता है

संभवतः के सेट के बीच

  • बनाने कॉल रेखांकन वादा करता है।