{{}}双大括号在dplyr中如何工作?

问题描述

我在RConf看到了哈德利的演讲,他提到在整洁的评估中使用双括号来调用变量。

搜索了Google,但找不到任何有关何时使用它们的信息。

dplyr中双括号的用例是什么?

解决方法

{{}}(卷曲)具有许多应用。它称为元编程,用于编写函数。例如,考虑以下示例:

library(dplyr)
library(rlang)

mtcars %>% group_by(cyl) %>% summarise(new_mpg = mean(mpg))

# A tibble: 3 x 2
#    cyl new_mpg
#  <dbl>   <dbl>
#1     4    26.7
#2     6    19.7
#3     8    15.1

现在,如果要将此函数编写为传递未加引号的变量(而不是字符串)的函数,则可以将{{}}用作:

my_fun <- function(data,group_col,col,new_col) {
  data %>%
    group_by({{group_col}}) %>%
    summarise({{new_col}} := mean({{col}}))
}

mtcars %>% my_fun(cyl,mpg,new_mpg)

#    cyl new_mpg
#  <dbl>   <dbl>
#1     4    26.7
#2     6    19.7
#3     8    15.1

请注意,您将传递所有不带引号的变量和组列(cyl),正在聚合的列(mpg),新列的名称({{1} })都是动态的。这只是其中的一个用例。

要了解更多信息,请参考: