Есть несколько способов решить эту проблему:
library(dplyr)
library(rlang)
1) Используйте filter_at
:
select_fun1 <- function(df, x) {
a <- df %>% filter_at(vars(x), any_vars(. > 2))
return(a)
}
2) Используйте базовое подмножество R
select_fun2 <- function(df, x) {
a <- df[df[[x]] > 2,]
return(a)
}
3) Используйте нестандартную оценку
select_fun3 <- function(df, x) {
a <- df %>% filter(!!sym(x) > 2)
return(a)
}
Убедитесь, что результаты 3 совпадают.
identical(select_fun1(mpg, 'displ'), select_fun2(mpg, 'displ'))
#[1] TRUE
identical(select_fun1(mpg, 'displ'), select_fun3(mpg, 'displ'))
#[1] TRUE