替代depars(替换())在函数中获取对象名称

问题描述 投票:0回答:1

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的方法来实现相同的结果吗?

r dplyr
1个回答
0
投票
我们可以使用

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

用rreprexv2.1.1

于2025-03-13创建
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.