在我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
uj5u.com熱心網友回復:
你不能組合ensymand {{}}。要么在{{}}沒有明確說明的情況下使用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")
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/330881.html
