重命名后如何使用整洁的 eval 引用函数内的变量?

duf*_*fei 1 r tidyverse tidyeval

使用 tidy 评估重命名后是否可以引用变量名称?作为示例,我想编写一个与以下代码执行相同操作但允许在函数参数中指定新变量名称的函数:

library(tidyverse)

mtcars %>% 
  rename(cylinder = cyl) %>% 
  group_by(cylinder) %>% 
  summarize(mean_mpg = mean(mpg))
Run Code Online (Sandbox Code Playgroud)

但是,我被困在行中group_by(在下面的代码中),因为既不能替代!!varname问号{{ varname }},也不能替代问号。我认为这!!varname不起作用,因为它会扩展为字符串;这{{ varname }}不起作用,因为调用该函数时不存在具有新名称的列。我也没有看到使用该语法的方法,glue因为该行中没有分配任何内容。

my_rename <- function(df, varname) {
  df %>% 
    rename("{varname}" := cyl) %>% 
    group_by(???) %>%
    summarize(mean_mpg = mean(mpg))
}
Run Code Online (Sandbox Code Playgroud)

小智 5

使用 {{varname}} 运行似乎可以

my_rename <- function(df, varname) {
  df %>% 
    rename({{varname}} := cyl) %>% 
    group_by({{varname}}) %>%
    summarize(mean_mpg = mean(mpg))
}

my_rename(mtcars, cylinder)

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

Run Code Online (Sandbox Code Playgroud)