如何测试函数参数是否是“可量化的”名称?

问题描述 投票:1回答:1

我正在制作一个函数,该函数应该能够为其第一个参数处理多个类:公式,字符,整洁选择,变量名...然后目标是将整洁选择与tidyselect::vars_select一起使用,除了裸公式之外。

问题是,当我测试此参数的类时,如果该值是要整齐选择的名称,它将被抛出错误,因为它将被视为未找到的对象。

我发现了tryCatch的变通办法,如果它的评估失败(因此在该范围内不存在),它会引用第一个参数。

library(rlang)
foo=function(.vars){
    .vars2=tryCatch(.vars, error=function(e) enquo(.vars))
    print(class(.vars2))
    print(class(.vars))
}

foo(Species) 
# [1] "quosure" "formula"
# Error in print(class(.vars)) : object 'Species' not found
# In addition: Warning message:
# In print(class(.vars)) : restarting interrupted promise evaluation

foo(~Species)
# [1] "formula"
# [1] "formula"

foo(1) 
# [1] "numeric"
# [1] "numeric"

foo("Species")
# [1] "character"
# [1] "character"

这对我来说似乎并不干净,因为我捕获了所有错误而没有根据我的具体情况进行过滤。

是否有内置功能对此功能进行测试,或者比此替代方法更干净的解决方案?

r rlang quosure
1个回答
0
投票

我不使用rlang,所以我不清楚您想要什么还是为什么。但是,我认为以下是您要尝试做的事情(仅在此处使用基数R)。如果我不能正确理解您想要的结果,请告诉我,我将删除此答案。

© www.soinside.com 2019 - 2024. All rights reserved.