如何通过dplyr和filter_以编程方式提供要应用的过滤器列表

sch*_*nee 6 r dplyr

我想创建一个应用于数据帧的过滤器列表.就像是:

filters = list(cyl=4, am=1)
Run Code Online (Sandbox Code Playgroud)

然后将其应用于'mtcars'数据框,以获得cyl = 4和am = 1的记录.我可以做这个:

filter_(mtcars, 
        lazyeval::interp(~ val == var, val = as.name(names(filters[1])), 
                                       var = filters[[1]]))
Run Code Online (Sandbox Code Playgroud)

但这只会在过滤器列表中选择第一个条目.

应用所有过滤器的惯用方法是什么?

(我正在尝试创建一个有点通用的函数,它可以接受一个数据框和一个标准集,并将输出转换.现在,相等对于标准是好的,但更通用的习语会很好)

kon*_*vas 1

这里的所有答案都很好,但如果您严格想要保留定义过滤器的原始方式(通过列表),您可以简单地将其转换为字符串并将其传递给filter_喜欢

filter_(mtcars, paste(names(filters), filters, sep = "==", collapse = "&"))
Run Code Online (Sandbox Code Playgroud)

(额外的好处是,这允许您使用的逻辑运算符具有灵活性,例如可以将折叠更改为“|”等)