以下是一个我在使用
...
参数和tidyselect
选择变量的包中函数的简化版本:# this toy function just selects the ... variables
foo <- function(dat = mtcars, ...){
expr <- rlang::expr(c(...))
cols_to_select <- tidyselect::eval_select(expr, data = dat)
dplyr::select(dat, all_of(cols_to_select))
}
这样可以:foo(mtcars, cyl)
但是我的实际函数在...
参数之前有更多的参数,所有具有默认值。在我调用函数时将这些默认值保持不变,并传递一个值给 ...
的情况下,将它们全部输入很繁琐。
这就是我想要的 - 假设 dat = mtcars
- 但它不起作用:
foo(... = cyl)
错误:名称不得为形式为
...
或..j
。
我能修改函数或调用方式以直接指定 ...
吗?
do.call
来解包它们。例如,请参见 https://dev59.com/hXA75IYBdhLWcg3wOGPS#3414202。你可能也会对尝试使用match.call(expand.dots = FALSE)$\
...`` 感兴趣。 - Dan Chaltiel