【问题标题】:using = inside bquote inside dplyr function calls在 dplyr 函数调用中使用 = inside bquote
【发布时间】:2020-10-18 01:47:42
【问题描述】:
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)) ="

【问题讨论】:

  • 为什么...? .......

标签: r dplyr tidyverse metaprogramming non-standard-evaluation


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-01
    • 2021-06-11
    • 2017-01-05
    • 2021-02-01
    • 2017-01-28
    • 1970-01-01
    相关资源
    最近更新 更多