2016-07-18 4 views
2

と関数定義の内側に要約:は、動的に、我々は次のように開始すると仮定しdplyr

library(dplyr) 
library(magrittr) 
library(tibble) 

set.seed(123) 

tbl <- data_frame(value=rnorm(100), class=rep(LETTERS[1:5], each=20)) 

私は同じ出力を返し、tblを与え、"value"、および"class"、機能summarize_means(data, values, groupby)を書きたいのですが次のコード:

tbl %>% 
    group_by(class) %>% 
    summarise(mean(value)) 

私の最初の試みだった:

summarise_means <- function(data, values, groupby) { 
    data %>% 
    group_by(groupby) %>% 
    summarise(mean(values)) 
} 
もちろん、掘りのビットの後、私は group_by_summarize_機能を使用するべきであると判断し、私は、私はまだこのよう誤っここでそれらを使用していますことを疑う

Error: unknown variable to group by : groupby 

で失敗し、

動作しません:

summarise_means <- function(data, values, groupby) { 
    data %>% 
    group_by_(groupby) %>% 
    summarise_(mean(values)) 
} 

私はsummarise_means(tbl, 'value', 'class')を呼び出すと、私が手:

# A tibble: 5 x 2 
    class NA_real_ 
    <chr> <dbl> 
1  A  NA 
2  B  NA 
3  C  NA 
4  D  NA 
5  E  NA 
Warning message: 
In mean.default(values) : argument is not numeric or logical: returning NA 

ここで何がうまくいかないのか分かりません。どんな助けでも大歓迎です!

+0

もlazyvalパッケージから 'summarise_(interpの(〜平均(VAR)、VAR = as.name(値)))'使用することができます。次に、あなたの関数はあなたの現在の入力で動作します –

答えて

0

あなたは引数と一緒に関数を渡す必要があります。

summarise_means <- function(data, values, groupby) { 
      data %>% 
        group_by_(groupby) %>% 
        summarise_(Mean = values) 
    } 

summarise_means(tbl, 'mean(value)', 'class') 

# A tibble: 5 x 2 
    class  Mean 
    <chr>  <dbl> 
1  A 0.14162380 
2  B -0.05125716 
3  C 0.10648523 
4  D -0.11991706 
5  E 0.37509474 
関連する問題