我正在编写一个函数,该函数dplyr::filter
在执行其他操作之前结合了一个步骤(我想对其进行参数化)。我想为可以覆盖的过滤条件提供一个默认参数。这排除了通过...
一次尝试传递过滤参数,如下所示:
library(rlang)
library(dplyr)
filter_and_stuff1 = function(tbl, filter_args = list(mpg > 33, gear == 4), arg3, arg4){
as_expr = enexpr(filter_args)
sub_tbl = filter(tbl, !!!as_expr)
# do some other things with sub_tbl, arg3 and arg4
sub_tbl
}
但
filter_and_stuff1(mtcars)
Error: Argument 2 filter condition does not evaluate to a logical vector
逗号分隔似乎产生了问题。查看 dplyr 的代码,它是通过调用内部函数来处理的,该函数 quo_reduce
似乎将逗号分隔的值与&
. 我不明白如何在不使用的情况下做到这一点...
TLDR:如何以编程方式将一组参数传递给包含默认表达式的 dplyr::filter?