在dplyr函数调用中使用=内部bquote

问题描述

a <- "A"
bquote(tibble::tibble(a = 1:10) %>% dplyr::mutate(`=`(.(as.name(a)),a*2))) %>% eval()
# A tibble: 10 x 2
       a `A = a * 2`
   <int>       <dbl>
 1     1           2
 2     2           4
 3     3           6
 4     4           8
 5     5          10
 6     6          12
 7     7          14
 8     8          16
 9     9          18
10    10          20

很显然,列名不正确。应该是A。

但是,如果我这样做:

a <- "A"
bquote(tibble::tibble(a = 1:10) %>% dplyr::mutate(.(as.name(a)) = a*2)) %>% eval()
Error: unexpected '=' in "bquote(tibble::tibble(a = 1:10) %>% dplyr::mutate(.(as.name(a)) ="

解决方法

tidyverse工具有自己的元编程方式,不涉及bquoteeval()。相反,您会这样做

tibble::tibble(!!a := 1:10) %>% dplyr::mutate(!!a := .data[[a]]*2)

:=让您动态分配参数名称。有关更多信息,请查看vignette("programming","dplyr")