2017-08-22 9 views
8

は、この単純な例ここで関数にggplotとdplyrを結合する方法は?

library(dplyr) 
library(ggplot2) 

dataframe <- data_frame(id = c(1,2,3,4), 
         group = c('a','b','c','c'), 
         value = c(200,400,120,300)) 

# A tibble: 4 x 3 
    id group value 
    <dbl> <chr> <dbl> 
1  1  a 200 
2  2  b 400 
3  3  c 120 
4  4  c 300 

を考えてみましょう私は、データフレームを受け取り、入力としてグループ化変数機能を書きたいです。理想的には、グループ化して集計した後、ggpplotの図表を印刷したいと考えています。 上記の機能にggplotを追加し、残念ながら

get_charts2 <- function(data, mygroup){ 

    quo_var <- enquo(mygroup) 

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

    df_agg 
} 



> get_charts2(dataframe, group) 
# A tibble: 3 x 3 
    group mean count 
    <chr> <dbl> <int> 
1  a 200  1 
2  b 400  1 
3  c 210  2 

私はここで間違っているものを理解しない

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() 

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


> get_charts1(dataframe, group) 
Error in !quo_var : invalid argument type 

を失敗します。

これは動作します。何か案は? ありがとう!

編集:ここhow to create factor variables from quosures in functions using ggplot and dplyr?

+0

上記のコードをどうすれば修正できますか?ありがとう!! –

答えて

10

ggplot面白いフォローアップは、まだ(あなたが!!を使用することはできません)整頓evalの構文をサポートしていません。より伝統的な標準評価呼び出しを使用する必要があります。あなたはこれを助けるためにggplotにaes_qを使うことができます。

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() 

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


get_charts1(dataframe, group) 
+0

ありがとう!本当にきれい。どうして私が '引用する '必要があるのか​​を説明しても構いませんが、' quo_var'をそのままにしておくことはできますか? –

+2

'aes_q'はシンボル(またはシンボルを解決する変数)を必要とするためです。この場合、文字通り 'count'という名前の変数ではなく、単に' count'を使いたいと思っています。しかし、 'quo_var'はシンボルのような式' group'を含んでいる変数なので、その変数を評価する必要があります。 – MrFlick

+0

ありがとう、私はこれが地獄のように混乱していることを認めなければなりません。これについてしばらく考えてみる必要があります。 –

関連する問題