{{}} 双大括号如何在 dplyr 中工作?
How do {{}} double curly brackets work in dplyr?
我在 RConf 看到了 Hadley 的演讲,他提到在 tidy evals 中使用双括号调用变量。
我搜索了 Google 但我找不到任何关于何时使用它们的内容。
dplyr 中双括号的用例是什么?
{{}}
(curly-curly) 有很多应用。它被称为 meta-programming 并用于编写函数。例如,考虑这个例子:
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
现在如果你想把它写成一个传递不带引号的变量(不是字符串)的函数,你可以使用 {{}}
as :
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
请注意,您正在传递所有不带引号的变量和 group-column (cyl
)、正在聚合的列 (mpg
)、新列的名称 ( new_mpg
) 都是动态的。这只是其中的一个 use-case。
要了解更多信息,请参阅:
我在 RConf 看到了 Hadley 的演讲,他提到在 tidy evals 中使用双括号调用变量。
我搜索了 Google 但我找不到任何关于何时使用它们的内容。
dplyr 中双括号的用例是什么?
{{}}
(curly-curly) 有很多应用。它被称为 meta-programming 并用于编写函数。例如,考虑这个例子:
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
现在如果你想把它写成一个传递不带引号的变量(不是字符串)的函数,你可以使用 {{}}
as :
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
请注意,您正在传递所有不带引号的变量和 group-column (cyl
)、正在聚合的列 (mpg
)、新列的名称 ( new_mpg
) 都是动态的。这只是其中的一个 use-case。
要了解更多信息,请参阅: