我有一段通用的代码,A,在一系列程序中反复出现.A的每一个实例都采用以下形式
output_data = input_data %>%
do common operations %>%
do specific dplyr methods that vary from instance to instance %>%
do more common operations
由于对A的重复调用,将此代码包装在函数中是有意义的.为了处理特定于实例的dqr方法调用,我希望将dqr方法作为参数传递给函数.因此,我想知道你如何以简洁的方式将multiple个dither方法(每个方法都有任意数量的条件)传递到一个函数中.
将一个单一的dqr方法传递给一个具有任意数量参数的函数并不太难,
insert_dplyr_method = function(input_data, dplyr_method, ...) {
output_data = input_data %>%
dplyr_method(...)
return(output_data)
}
测试
dframe = data.frame(start = c(1,1,1,2,2,3,3,3,3),
middle = sample(1:9),
end = c(1,2,3,1,2,1,2,3,4))
dframe_1 = insert_dplyr_method(dframe,
dplyr::filter,
start == 1,
end == 2)
dframe_2 = insert_dplyr_method(dframe,
dplyr::select,
all_of("start"))
我真正想做的是传入n个dplyr方法,每个方法都有任意数量的参数,即对于n=2的情况,类似于
insert_dplyr_method_2 = function(input_data, dplyr_method_1, ...1, dplyr_method_2, ...2) {
output_data = input_data %>%
dplyr_method_1(..._1) %>%
dplyr_method_2(..._2)
return(output_data)
}
我能想到的唯一方法是将dplyr方法及其对应的省略号传递到列表中的函数中,即
dplyr_methods = list(c(dplyr_method_1, ...), c(dplyr_method_2, ...), etc.)
然后使用do.call()方法(参见here、here和here),尽管我无法使其工作.
我想知道有没有人能教我怎么做?我也乐于接受更好的方法,如果有人知道的话.