在
vignette("programming", package = "dplyr")
有以下示例代码
my_summarise2 <- function(data, expr) {
data %>% summarise(
mean = mean({{ expr }}),
sum = sum({{ expr }}),
n = n()
)
}
我想适应它,以便输出中包含
expr
对象的名称,我可以使用deparse(substitute(())
my_summarise2 <- function(data, expr) {
exprname = deparse(substitute(expr))
data %>% summarise(
var = exprname,
mean = mean({{ expr }}),
sum = sum({{ expr }}),
n = n()
)
}
my_summarise2(iris, Petal.Width)
# var mean sum n
#1 Petal.Width 1.199333 179.9 150
有另一种tidyverse-recmondended的方法来实现相同的结果吗?
rlang::enquo
和
rlang::as_name
::
library(dplyr)
my_summarise3 <- function(data, expr) {
exprname = rlang::as_name(rlang::enquo(expr))
data %>% summarise(
var = exprname,
mean = mean({{ expr }}),
sum = sum({{ expr }}),
n = n()
)
}
my_summarise3(iris, Petal.Width)
#> var mean sum n
#> 1 Petal.Width 1.199333 179.9 150
或使用
rlang::enexpr
和rlang::as_label
::library(dplyr)
my_summarise3 <- function(data, expr) {
exprname = rlang::as_label(rlang::enexpr(expr))
data %>% summarise(
var = exprname,
mean = mean({{ expr }}),
sum = sum({{ expr }}),
n = n()
)
}
my_summarise3(iris, Petal.Width)
#> var mean sum n
#> 1 Petal.Width 1.199333 179.9 150
于2025-03-13创建