tidyeval:将字符串转换为 dplyr 函数中的变量

tidyeval: convert a character string to a variable in a dplyr function

我无法将字符串传递给使用 dplyr 的函数。

首先,我有一个简单的版本,可以生成我想要的输出,但没有按照我想要的方式调用。

接下来我将展示一个版本,在该版本中我以我想要的方式调用函数,即使该版本不起作用。

这会产生我想要的结果:

car_column <- function(d,Column,Value,Regex) {
 d %>%  
    filter(str_detect(car_name, regex('mazda', ignore_case = TRUE))) %>% 
    rename(Measurement = mpg) %>%  
    select(car_name, Measurement)
}
mtcars %>% 
  tibble::rownames_to_column() %>%  
  rename(car_name = rowname) %>% 
  car_column(car_name, mpg, "mazda")

这段代码调用了我想调用的函数。请注意 "car_name" 很难 在此函数定义中编码,但应更改为 "Column".

car_column <- function(d,Column,Value,Regex, Statistic) {
 d %>% 
  filter(str_detect(car_name, regex(Regex, ignore_case = TRUE))) %>% 
    rename({{Statistic}}:= {{Value}}) %>% 
  select({{Column}}, {{Statistic}})
}
mtcars %>% 
  tibble::rownames_to_column() %>%  
  rename(car_name = rowname) %>% 
  car_column("car_name", "mpg", "mazda","Measurement")

由于输入参数是字符串,将其转换为 symbowl 并计算 (!!)

car_column <- function(d,Column,Value,Regex, Statistic) {
 d %>% 
  filter(str_detect(!! rlang::sym(Column), regex(Regex, ignore_case = TRUE))) %>% 
   rename({{Statistic}}:= {{Value}}) %>% 
   select({{Column}}, {{Statistic}})
  }

mtcars %>% 
   tibble::rownames_to_column() %>%  
   rename(car_name = rowname) %>% 
   car_column("car_name", "mpg", "mazda","Measurement")
#       car_name Measurement
#1     Mazda RX4          21
#2 Mazda RX4 Wag          21