Я пишу функцию, которая объединяет шаг 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, который включает выражение по умолчанию?