识别R中过滤器输入的函数?

Recognition of a function input by filter in R?

在我下面的 foo() 调用中,有没有办法在函数内部识别 filter_var =(即 test)的输入?

目前无法识别输入。

library(tidyverse)
library(rlang)

foo <- function(..., filter_var = NULL){

filter_var <- rlang::ensyms(filter_var)
  
dat <- expand_grid(...)  

dat %>%
filter(
  
    {{filter_var}} != "A"   ## HERE `filter_var` is not recognized. 
  )
}

foo(study = 1:2, test = LETTERS[1:2], filter_var = test)

#  study test 
#  <int> <chr>
#1     1 A    
#2     1 B    
#3     2 A    
#4     2 B 

您不能组合 ensym{{}}。要么使用 {{}} 而不显式 ensym

foo <- function(..., filter_var = NULL){
  dat <- expand_grid(...)  
  dat %>%
    filter({{filter_var}} != "A")
}

foo(study = 1:2, test = LETTERS[1:2], filter_var = test)

或将 !!ensym 一起使用(请注意,您只解码一个符号,因此请使用 ensym 而不是 ensyms)。

foo <- function(..., filter_var = NULL){
  filter_var <- rlang::ensym(filter_var)
  dat <- expand_grid(...)  
  dat %>%
    filter(!!filter_var != "A")
}