2011-08-25 11 views
5

मैं कुछ कोड को समझने की कोशिश कर रहा हूं जिसे मैंने नहीं लिखा था (mgcv में plot.gam), और कुछ अजीब पैरामीटर के साथ एक प्लॉट() फ़ंक्शन पर कॉल है जिसे मैं पहचान नहीं पा रहा हूं (उदाहरण के लिए, "पी") । मैं यह जानना चाहता हूं कि इस कॉल पर कौन सी साजिश विधि भेजी जा रही है। findMethod() और इसी तरह के फ़ंक्शंस मदद नहीं करते हैं (मुझे लगता है कि साजिश एस 3 है)। मैंने डीबग लाइब्रेरी की कोशिश की, लेकिन यह आपको फ़ंक्शन कॉल में "कदम" नहीं देता है (और न ही बेस डीबग फ़ंक्शन करता है)।आर में, किसी विशेष फ़ंक्शन कॉल के लिए कौन सी विधि भेजी जाती है, यह जानने के लिए कैसे?

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

+0

बस एक तरफ। । । फ़ंक्शन कॉल में पैरामीटर निर्दिष्ट करते समय आप पैरामीटर के नाम को किसी भी चीज़ पर छोटा कर सकते हैं। इसलिए, यदि हस्ताक्षर में 'P' के साथ _starts_ केवल एक पैरामीटर है, तो आप उस पैरामीटर को 'पी =' द्वारा निर्दिष्ट कर सकते हैं। यह आपके प्रश्न का उत्तर नहीं देता है, इसलिए कारण यह केवल एक टिप्पणी है। – adamleerich

उत्तर

5

plot.gam() में हम ध्यान दें कि plot()x$smooth[[i]] पर कहा जाता है, जो वर्ग की एक वस्तु है:

class(x$smooth[[i]]) 
[1] "tprs.smooth" "mgcv.smooth" 

वहाँ है वर्ग "mgcv.smooth" के लिए एक plot() विधि और यह इस है कि साजिश के लिए इस्तेमाल किया जा रहा है सामान्य मामले में। ?plot.gam कहा गया है कि यह डिफ़ॉल्ट सबसे smooths के लिए इस्तेमाल किया विधि है, लेकिन वहाँ gam() द्वारा समर्थित चिकनी के कुछ प्रकार के लिए विशिष्ट विधियों (?plot.gam के विवरण अनुभाग से कर रहे हैं:

For smooth terms ‘plot.gam’ actually calls plot method functions 
depending on the class of the smooth. Currently random effect and 
Markov random field smooths have special methods, the rest use the 
defaults described below. 

किसी कारण से, methods() है इन तरीकों नहीं मिल रहा है, लेकिन वे मौजूद हैं:

> mgcv:::plot.mgcv.smooth 
function (x, P = NULL, data = NULL, label = "", se1.mult = 1, 
    se2.mult = 2, partial.resids = FALSE, rug = TRUE, se = TRUE, 
    scale = -1, n = 100, n2 = 40, pers = FALSE, theta = 30, phi = 30, 
    jit = FALSE, xlab = NULL, ylab = NULL, main = NULL, ylim = NULL, 
    xlim = NULL, too.far = 0.1, shade = FALSE, shade.col = "gray80", 
    shift = 0, trans = I, by.resids = FALSE, scheme = NULL, ...) 
{ 
.... 

यह methods() में एक बग कि plot.function मतलब नहीं दिखा था से संबंधित हो सकता सूची में n और मेरे वर्तमान आर उस फिक्स को शामिल नहीं कर सकता है। इस विधि को सामान्य रूप से दिखाया जाना चाहिए, और ऐसी परिस्थितियों में सामान्य सलाह ऑब्जेक्ट की श्रेणी (जैसा कि मैंने ऊपर दिखाया है) की पहचान करना होगा और फिर methods() और इसी तरह के कार्यों (उदाहरण के लिए showMethods()) का उपयोग करना होगा ताकि यह पता चल सके कि कक्षा के लिए उपलब्ध विशिष्ट विधियां (es वस्तु वापस लौटा दिया।

+0

हाँ, यह मेरी समस्या थी - यह विधियों() में दिखाई नहीं दे रहा था। लेकिन यह सही है - धन्यवाद! – dan

2

एस 3 कक्षाओं के लिए, methods("plot") किसी विशेष कार्य के लिए परिभाषित सभी विधियों को देगा। एक एस 3 प्रेषण के रूप में, जिसे बुलाया जाता है वह पहले तर्क के वर्ग पर आधारित होगा। plot.gam को देखते हुए, मुझे लगता है कि हिस्सा आप के बारे में पूछ रहे हैं plot(x$smooth[[i]]) शुरू होता है, तो आप को देखने के लिए क्या x$smooth[[i]] का वर्ग है (जहां x वस्तु gam वस्तु है) निर्धारित करने के लिए क्या plot विधि बुलाया जाएगा की जरूरत है।

मुझे यह स्वचालित रूप से करने का कोई तरीका नहीं पता है।

+0

मैंने बिल्कुल ऐसा करने की कोशिश की थी। मुझे पता है कि x $ चिकनी [[i]] वर्ग mgcv.smooth का है, लेकिन मुझे यकीन नहीं है कि, एक एस 3 कक्षा के साथ, मैं यह जानकर जा सकता हूं कि कौन सी साजिश() भेज दी जाती है। कुछ भी विशिष्ट नहीं है जो एक विधियों() कॉल से बाहर निकलता है। यदि यह एस 4 था, तो getMethod() और क्लास हस्ताक्षर जैसे कुछ काम करेंगे। लेकिन मुझे यकीन नहीं है कि एस 3 विधि के साथ क्या करना है।(मैंने मैन्युअल रूप से सभी दृश्य साजिश कार्यों की जांच की, और कुछ भी सही नहीं देखा।) – dan

+0

टाइपो: 'विधियों', 'विधि' नहीं। –

+0

@ हांग, धन्यवाद। फिक्स्ड। –

0

फ़ंक्शन के अंदर से ऑब्जेक्ट की श्रेणी मुद्रित करें। या तो फ़ंक्शन हैक या ट्रेस का उपयोग करें()।

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

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