2017-06-27 3 views
2

私は特定の接頭辞で始まる列の関数を実行できるようにする関数を構築しようとしています。私は名前を正しいものに評価する方法を理解するのに苦労しています。ビルドされた変数名のためのDplyr Tidyyeval

私はdplyrウェブサイトを見て、programmingについて語っていますが、正しく評価する方法を理解できませんでした。

私は@hadleyがtidyeval

Reprex

library(tidyverse) 

tbl1 <- tibble(
    urn = c(1 ,2 ,3), 
    a_width = c(10,20,30), 
    a_height = c(12,13,14), 
    b_width = c(25,50,75), 
    b_height = c(25,50,75) 
) 

my_mean <- function(x, group) { 
    width <- paste0(quo_name(group), "_width") 
    height <- paste0(quo_name(group), "_height") 

    summarise(x, 
    !!paste0(group, "_mean_width") := mean(!!width),   
    !!paste0(group, "_mean_height") := mean(!!height)   
) 
} 

my_mean(tbl1, "a") 

# # A tibble: 1 x 2 
# a_mean_width a_mean_height 
# <dbl>   <dbl> 
# 1   NA   NA 
# Warning messages: 
# 1: In mean.default("a_width") : 
# argument is not numeric or logical: returning NA 
# 2: In mean.default("a_height") : 
# argument is not numeric or logical: returning NA 
+1

あなたは 'summarize'コマンドでカンマを忘れたと思います。 – amarchin

+0

あなたは正しいですが、コンマは見落とされましたが、それは問題の原因ではなく、貧弱なタイプ入力のケースです。 – Dan

+0

確かに私はあなたのエラーを再現しようとしていましたが、逃したコンマはこれを不可能にしました:) – amarchin

答えて

0

!!widthを導入していCRAN(v0.70)のdplyrの最新バージョンを利用していますが文字列"a_width"を返します。 !!sym(width)の名前に変更する必要があります。 !!heightについても同様です。

+3

'sym(幅)'ではなく 'sym(!! width)'が必要だと思います – aosmith

+1

'could関数symを見つけられません ' – Dan

+0

'sym'はdplyrがこのものに使うものであるrlangパッケージの関数です –

関連する問題