【问题标题】:Recognition of a function input by filter in R?通过R中的过滤器识别函数输入?
【发布时间】:2021-12-08 18:07:09
【问题描述】:

在我下面的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 

【问题讨论】:

    标签: r function dplyr tidyverse rlang


    【解决方案1】:

    您不能组合 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")
    }
    

    【讨论】:

      猜你喜欢
      • 2021-12-08
      • 1970-01-01
      • 2014-02-09
      • 1970-01-01
      • 2018-11-19
      • 2017-07-16
      • 1970-01-01
      • 1970-01-01
      • 2016-11-01
      相关资源
      最近更新 更多