2017-08-22 16 views
5

यह how to combine ggplot and dplyr into a function? से एक फॉलो अप है।ggplot और dplyr का उपयोग कर कार्यों में quosures से कारक चर बनाने के लिए कैसे?

समस्या यह है कि dplyr, ggplot का उपयोग करने वाले फ़ंक्शन को कैसे लिखना है और संभावित रूप से quosures से कारक चर निर्दिष्ट करना है?

यहाँ एक उदाहरण

dataframe <- data_frame(id = c(1,2,3,4,5,6), 
         group = c(1,1,0,0,3,4), 
         value = c(200,400,120,300,100,100)) 

# A tibble: 6 x 3 
    id group value 
    <dbl> <dbl> <dbl> 
1  1  1 200 
2  2  1 400 
3  3  0 120 
4  4  0 300 
5  5  3 100 
6  6  4 100 

आप देख सकते हैं, समूहीकरण चर group यहाँ संख्यात्मक है समूहीकरण चर के लिए एक सतत पैमाने के साथ

get_charts1 <- function(data, mygroup, myoutput){ 

    quo_var <- enquo(mygroup) 
    quo_output <- enquo(myoutput) 

    df_agg <- data %>% 
    group_by(!!quo_var) %>% 
    summarize(mean = mean(!!quo_output, na.rm = TRUE), 
       count = n()) %>% 
    ungroup() 

    ggplot(df_agg, aes_q(x = quote(count), y = quote(mean), color = quo_var, group = quo_var)) + 
    geom_point() + 
    geom_line() 
} 

get_charts1(dataframe, 
      mygroup = group, 
      myoutput = value) 

इच्छा उत्पादन एक चार्ट, है, इसलिए जो वांछित नहीं है

enter image description here

आदर्श रूप में, मैं ऑन-द-मक्खी कारक वैरिएबल निर्धारित करना चाहते हैं। यही है, इस समारोह में ऐसा कुछ है:

ggplot(df_agg, aes_q(x = quote(count), 
         y = quote(mean), 
         color = factor(quo_var), 
         group = factor(quo_var))) + 
    geom_point() + 
    geom_line() 

जो निश्चित रूप से काम नहीं करता है।

सवाल यह है कि: यहां क्या किया जा सकता है?

धन्यवाद !!

उत्तर

5

अन्य rlang कार्यों का उपयोग करने की संभावना यहां है।

get_charts1 <- function(data, mygroup){ 

    quo_var <- enquo(mygroup) 

    df_agg <- data %>% 
    group_by(!!quo_var) %>% 
    summarize(mean = mean(value, na.rm = TRUE), 
       count = n()) %>% 
    ungroup() 

    cc <- rlang::expr(factor(!!(rlang::get_expr(quo_var)))) 
    # or just cc <- expr(factor(!!get_expr(quo_var))) if you include library(rlang) 

    ggplot(df_agg, aes_q(x = quote(count), y = quote(mean), color = cc)) + 
    geom_point() + 
    geom_line() 
} 

हम अभिव्यक्ति factor(group)expr() समारोह का उपयोग कर निर्माण। हम से प्रतीक नाम "समूह" निकालने के लिए get_expr() का उपयोग करते हैं। एक बार जब हम अभिव्यक्ति बना लेंगे, तो हम इसे aes_q पर पास कर सकते हैं।

उम्मीद है कि ggplot जल्द ही साफ-सुथरा-अनुकूल होगा और यह अब आवश्यक नहीं होगा।

+0

बहुत प्यारा! धन्यवाद! किसी भी तरह का अच्छा क्या है कि 'फ़ंक्शन' var पर सरल संचालन के साथ इस फ़ंक्शन को कॉल करना वास्तव में काम करेगा: 'get_charts1 (डेटाफ्रेम, mygroup = समूह, myoutput = log (value)) ' –

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