我在某个函数中使用了 tidyselection,我必须将第一个参数与省略号连接起来,因为它可能是需要特定处理的特定类。
正常的行为是这样的:
foo = function(x, ...){
xloc = eval_select(expr(c(x, ...)), data = iris)
return(xloc)
}
foo(everything())
我希望将其everything()
作为默认值x
(NULL
由于某种原因,我不能将其直接放在标题中)。
不幸的是,这种语法是不允许的:
bar = function(x, ...){
if(is_null(x))
x=everything() #throws an error
xloc = eval_select(expr(c(x, ...)), data = iris)
return(xloc)
}
bar(NULL)
# Error: `everything()` must be used within a *selecting* function.
# i See <https://tidyselect.r-lib.org/reference/faq-selection-context.html>.
我试图everything()
用我知道的所有“神秘”函数来包装:parse
, deparse
, call
, substitute
, quo
, sym
, enquo
, ensym
, ... 没有任何效果(你可以在这里看到我没有很好地掌握这些)。
我可以用什么表达式替换我x=everything()
的第二个代码块中的行以使该函数起作用?
版本:
- tidyselect 版本 1.0.0
- rlang 版本 0.4.5
- dplyr 版本 0.8.5