用于构建变量名称的 Dplyr Tidyyeval

Dplyr Tidyyeval for built variable names

我正在尝试构建一个函数,允许我对以特定前缀开头的列执行函数。我正在努力弄清楚如何让名称评估为正确的东西。

我查看了 dplyr 网站,其中讨论了 programming 但不太明白如何正确评估它。

我正在 CRAN (v0.70) 上使用最新版本的 dplyr,@hadley 在其中引入了 tidyeval

代表

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

!!width returns 字符串 "a_width"。您必须执行 !!sym(width) 才能将其变成 name!!height.

同样