相关疑难解决方法(0)

对多个任意过滤条件使用 tidy eval

我想使用整洁的评估来编写多个、完全灵活的过滤条件。一个相关但不太复杂的问题已在 Stackoverflow Question 中得到解决。以下代码(改编自上述其他问题)正在运行。它将两个过滤条件应用于gapminder数据集,并返回过滤后的数据。

library(tidyverse)
library(gapminder)

my_filter <- function(df, cols, vals){    
  paste_filter <- function(x, y) quo(!!sym(x) %in% {{y}})
  fp <- pmap(list(cols, vals), paste_filter)
  filter(df, !!!fp)
}

cols <- list("country", "year")
vals = list(c("Albania", "France"), c(2002, 2007))
gapminder %>% my_filter(cols, vals) 
Run Code Online (Sandbox Code Playgroud)

问题:到目前为止,该解决方案仅限于一种类型的过滤运算符 ( %in%)。我想扩展这种方法以接受任意类型的运算符(==, %in%, >, ...)。预期的函数my_filter应该处理以下内容:

cols <- list("country", "year")
ops <- list("%in%", ">=")
vals = list(c("Albania", "France"), 2007))
gapminder %>% my_filter(cols, ops, vals)
Run Code Online (Sandbox Code Playgroud)

我脑海中浮现的用例是闪亮的应用程序。使用这样的功能,我们可以更轻松地让用户对数据集的变量设置任意过滤条件。

r shiny tidyverse tidyeval

1
推荐指数
1
解决办法
230
查看次数

标签 统计

r ×1

shiny ×1

tidyeval ×1

tidyverse ×1