2009-09-17 11 views
8

मैं एक विशेष नौकरी करने के लिए एक फ़ंक्शन लिखने की कोशिश कर रहा हूं (मेरे मामले में, आउटलाइनर्स के लिए डेटा सेट का विश्लेषण करें) ताकि पहली चीजें जो मैं करना चाहता हूं यह देखते हैं कि अन्य लोगों ने समान नौकरियां कैसे की हैं।आर में किसी फ़ंक्शन के कोड की जांच कैसे करें ऑब्जेक्ट क्लास संवेदनशील

मैं किसी विशेष पैकेज लोड और एक समारोह के कोड की जांच करने के ऐसा कर सकते हैं, लेकिन कुछ कार्यों वस्तु का क्या वर्ग आप पर यह

>library(outliers) 
> fix(outlier) 

function (x, opposite = FALSE, logical = FALSE) 
{ 
    if (is.matrix(x)) 
     apply(x, 2, outlier, opposite = opposite, logical = logical) 
    else if (is.data.frame(x)) 
     sapply(x, outlier, opposite = opposite, logical = logical) 
    else { 
     if (xor(((max(x) - mean(x)) < (mean(x) - min(x))), opposite)) { 
      if (!logical) 
       min(x) 
      else x == min(x) 
     } 
     else { 
      if (!logical) 
       max(x) 
      else x == max(x) 
     } 
    } 
} 

फेंक पर निर्भर करने लगते हैं आप कोड में कैसे देख सकते हैं वस्तु के आधार पर कुछ बदलता है?

संपादित करें:

ठीक है, पाम < - चेहरा। एक उदाहरण के रूप में इस्तेमाल किया गया फ़ंक्शन बस स्वयं को कॉल करता है, लेकिन वह कोड भी वहां है ... मैंने अन्य उदाहरण देखे हैं (लेकिन किसी भी ऑफहैंड के बारे में नहीं सोच सकते हैं) जहां फ़ंक्शन ने ऑब्जेक्ट की कक्षा के आधार पर अन्य चीजें की हैं उस पर, सवाल खड़ा है, भले ही यह एक बुरा उदाहरण है!

उत्तर

7

जब आप कहते हैं कि

समारोह अन्य बातों के कर वस्तु के वर्ग में यह

आप पहले से ही S3 प्रेषण तंत्र के दिल में हैं फेंका के आधार पर किया! तो मैं आर पर एक प्रोग्रामिंग पुस्तक पढ़ने की सिफारिश करता हूं उदा।

  • (क्लासिक लेकिन दिनांकित) Venables/रिप्ले "एस प्रोग्रामिंग",
  • जेंटलमैन 'आर के साथ जैव सूचना विज्ञान ",
  • ब्राउन/मर्डोक" सबसे पहले आर के साथ सांख्यिकीय प्रोग्रामिंग में पाठ्यक्रम ",
  • मंडलों" डेटा विश्लेषण के लिए सॉफ्टवेयर: आर के साथ प्रोग्रामिंग,

या this SO question on R books से अन्य संसाधनों के साथ उदाहरण पैकेज या दो सीआरएएन पैकेजों के समृद्ध सेट से दो संसाधनों के साथ।

4

उदाहरण के लिए, साजिश() ऑब्जेक्ट के आधार पर अलग-अलग चीजें करेगी। आप plot.ts(), plot.lm(), आदि का उपयोग कर विशिष्ट प्लॉट फ़ंक्शंस (विधियों कहा जाता है) देख सकते हैं, यानी प्लॉट() अगर plot ऑब्जेक्ट पास हो जाता है तो plot.ts() को कॉल करेगा। सामान्य रूप से, plot.xxx() वर्ग xxx की वस्तुओं पर लागू होता है। यदि वर्ग के लिए कोई विशिष्ट विधि नहीं है, तो plot.default() का उपयोग किया जाता है।

फ़ंक्शन प्लॉट() को सामान्य कार्य कहा जाता है क्योंकि यह कई अलग-अलग वर्गों पर लागू हो सकता है। अन्य सामान्य सामान्य कार्य सारांश(), प्रिंट() और भविष्यवाणी() हैं।

जैसा कि डिर्क कहते हैं, एस 3 विधियों और कक्षाओं पर प्रलेखन पढ़ने योग्य है। समारोह कोड को खोजने के लिए

+2

और यदि आप उत्सुक हैं, तो आप किसी भी शीर्ष-स्तरीय फ़ोल्डर में थे, आप इन तरीकों में से किसी भी विधि को विधि (functionname) दर्ज करके एक्सेस कर सकते हैं। विधियों (प्रिंट) का प्रयास करें, उदाहरण के लिए, यदि आप अपना दिमाग उड़ा देना चाहते हैं। –

28

मेरे विचार प्रक्रिया हो जाता है:

सबसे पहले, समारोह

केस 1 का नाम टाइप करें: यह कोड

ग्रेट पता चलता है, बस हो गया।

उदाहरण: diag

केस 2: समारोह एक एक पंक्ति UseMethod बयान

आप एक S3 विधि के रूप में आता। उपलब्ध विधियों को देखने के लिए methods(fnname) टाइप करें, फिर getAnywhere(fnname.myclass)

उदाहरण: मतलब

methods(mean) 
getAnywhere(mean.default) 
केस 3: समारोह एक .internal या .Primitive बयान

समारोह सी में लिखा है बेहतर प्रदर्शन के लिए, शामिल हैं। आर स्रोत कोड की एक प्रति डाउनलोड करें और टैरबॉल निकालें। फ़ंक्शन नाम के लिए src निर्देशिका में खोजें।

संपादित करें: आप Google या Yahoo साइट खोज का उपयोग कर फ़ाइल की खोज भी कर सकते हैं।

site:https://svn.r-project.org/R/trunk/src functionname 

समाप्ति संपादित

उदाहरण: qnorm

"qnorm" आर स्रोत कोड के स्रोत निर्देशिका में के लिए एक सरल खिड़कियों खोज से पता चलता है फ़ाइल qnorm.c, जो समारोह में शामिल परिभाषा।

संपादित करें: qnorm.c भी खोज से शीर्ष परिणाम है

site:https://svn.r-project.org/R/trunk/src qnorm 

समाप्ति संपादित

प्रकरण 4: फिर भी समारोह

यह शायद एक है नहीं मिल सकता है एक एस 4 वर्ग की विधि।

कक्षा को खोजने के लिए class(myobj) टाइप करें।

उस श्रेणी के लिए उपलब्ध विधियों को खोजने के लिए showMethods(class="myclass") टाइप करें।

टाइप getMethods("fnname", "myclass")

उदाहरण: भूखंड पिक्समैप

यह पिक्समैप पैकेज की आवश्यकता है।

library(pixmap) 
pixie <- pixmap(1:12, nrow=3, ncol=4) 
class(pixie) #"pixmap" 
showMethods(class="pixmap") 
getMethod("plot", "pixmap") 
+0

बहुत बढ़िया जवाब! – MaHo

0

जवाब यहां उत्तर "view source code in R"

जो कार्यों कि के रूप में "गैर दिखाई" दिखाने के लिए जब आप तरीकों को चलाने के मामले से संबंधित है (समारोह में सूचना दी देखें में शामिल नहीं एक अन्य मामले के लिए .I.am.looking.for)

संक्षेप में आप तो के रूप में आदेश का उपयोग कर सकते हैं: पैकेज ::: function.class कोड आप चाहते हैं को देखने के लिए।

0

मैंने हाल ही में CRAN Meta repository on GitHub पर ठोकर खाई, जो मूल रूप से सीआरएएन भंडार में सभी संकुलों का एकमात्र संस्करण रखती है।तुम्हें पता है, पैकेज का नाम से खोज सकते हैं पैकेज आप कर रहे हैं के बाद वहाँ जो आर

उदाहरण के लिए में स्रोत कोड घरों एक फ़ोल्डर आर भीतर कहा जाता है, का चयन करने के बाद, मैं पैकेज के लिए खोज की mboost, क्लिक किए गए आर फ़ोल्डर में, और यह list of code दिखाता है।

मेरे पास अभी तक कोई मामला नहीं है जहां मुझे वह नहीं मिला जो मैं बाद में था। मुझे यह भी देखने के लिए नहीं मिला है कि सभी अंतर्निहित सी/सी ++ कोड दिखाया गया है या लिंक किया गया है, लेकिन यह ऊपर mboost उदाहरण के लिए था। सी-कोड src

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