2016-07-03 4 views
10

मैं इस उदाहरण पाने के लिए कोशिश कर रहा हूँ:धन चिह्न (आर)

ggplot (एमपीजी, एईएस (displ, HWY)) + geom_point()

कर सकते हैं कोई मुझे बताता है कि इन 2 कार्यों के बीच क्या हो रहा है?

क्या ggplot2 अधिभार "प्लस" ऑपरेटर है? इन 2 को सारांशित करने का नतीजा क्या है, और इसे क्या सौंपा गया है? क्या यह आर-विशिष्ट सुविधा है, या ggplot2-specific है? क्या यह पाइप की तरह है?

+9

यह खोजना आसान नहीं है, लेकिन 'मदद ("+। Gg")' की जानकारी आपके पास है। मुझे पता चला कि '+ .gg' ggplot2 लोड के साथ 'विधियों ("+")' का उपयोग कर मौजूद है। –

+6

हां और नहीं; यह प्रभावी रूप से एक पाइप है (हैडली ने ggplot2 के बाद magrittr की खोज की/coauthored magrittr, और कहा है कि अब ggplot को बदलने में बहुत देर हो चुकी है), लेकिन यह वास्तव में एक ggplot ऑब्जेक्ट में जोड़ रहा है, जिसे कॉल पूरा होने तक प्लॉट नहीं किया गया है। तो हाँ, आप इसे कार्यों के बीच 'डेटा' पैरामीटर को पारित करने के बारे में सोच सकते हैं, लेकिन इसके बारे में सोचने के लिए और अधिक उपयोगी है ... additive। ऑब्जेक्ट्स के अंदर क्या है इसका एक अनुमान प्राप्त करने के लिए 'ggplot_build' में एक साजिश लपेटें। – alistaire

+0

स्पष्टीकरण के लिए धन्यवाद दोस्तों! – mimic

उत्तर

3

फ़ंक्शन परिभाषा कि @Richard Scriven टिप्पणी में संदर्भित है plot-construction.r में परिभाषित किया गया है, जो इसे स्पष्ट कर सकता है। आपको यह देखने के लिए स्रोत के माध्यम से जाना होगा कि वास्तव में उन दो (अप्रत्याशित) फ़ंक्शन क्या करते हैं (चाहे कॉल का एलएचएस theme या ggplot ऑब्जेक्ट है) लेकिन नाम आपको एक बहुत अच्छा विचार देना चाहिए। वापसी मूल्य e1e2 "जोड़कर" संशोधित है।

"+.gg" <- function(e1, e2) { 
    # Get the name of what was passed in as e2, and pass along so that it 
    # can be displayed in error messages 
    e2name <- deparse(substitute(e2)) 

    if  (is.theme(e1)) add_theme(e1, e2, e2name) 
    else if (is.ggplot(e1)) add_ggplot(e1, e2, e2name) 
} 

तो, हाँ, + इनहेरिट वर्ग gg (सभी ggplot2 वस्तुओं) वस्तुओं के लिए ओवरलोड हो गया है।

मुझे लगता है कि 'पाइप' (@ एलिस्टायर की टिप्पणी) एक भ्रामक समानता है; यह मानक ओपीएस समूह जेनेरिक की शैली में बहुत अधिक है।

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