识别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")
}
在我下面的 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")
}