我是一个新手,正在尝试编写通用函数,其中一个我目前遇到的问题是为分类变量编写多个筛选条件。这是我目前正在使用的代码:
create_expr <- function(name, val){
if(!is.null(val))
val <- paste0("c('", paste0(val, collapse = "','"), "')")
paste(name, "%in%", val)
}
my_filter <- function(df, cols, conds){
# Args:
# df: dataframe which is to be filtered
# cols: list of column names which are to be filtered
# conds: corresponding values for each column which need to be filtered
cols <- as.list(cols)
conds <- as.list(conds)
args <- mapply(create_expr, cols, conds, SIMPLIFY = F)
if(!length(args))
stop(cat("No filters provided"))
df <- df %>% filter_(paste(unlist(args), collapse = " & "))
return(df)
}
my_filter(gapminder, cols = list("continent", "country"),
conds = list("Europe", c("Albania", "France")))
我想知道如何使用整洁评估实践来重新编写这个内容。我找到了关于使用quos()处理多个参数的材料,但是正如您所看到的,我在这里有两个不同的参数列表需要映射到一起。
任何帮助都会受到赞赏,谢谢!
%in%
,==
,>
,...)??我刚刚在这里发布了一个新问题here。 - Till