R计算字符/字符串作为调用函数名

R计算字符/字符串作为调用函数名,r,function,tidyverse,expression-evaluation,R,Function,Tidyverse,Expression Evaluation,我有一个用例,希望将命令行args作为函数名进行评估。比如说, r_script.R print --number 2 这里我将以r包docopt为例。参数通常由其自己的名称索引,例如,args$print引用字符串值“print”。实际的R代码应该是 if (args$print){ if (args$number){ # call print() print(as.numeric(args$number)) } } 当我有一长串函数,比如print

我有一个用例,希望将命令行
args
作为函数名进行评估。比如说,

r_script.R print --number 2
这里我将以r包
docopt
为例。参数通常由其自己的名称索引,例如,
args$print
引用字符串值
“print”
。实际的R代码应该是

if (args$print){
   if (args$number){
       # call print()
       print(as.numeric(args$number))
   }
}
当我有一长串函数,比如
print
,我会编写大量的
if-else循环来处理它,它很快就会变得单调乏味

是否有一种方法,例如使用
quosure
eval
,或类似的方法来替换此逻辑,以便我只需编写几行代码即可完成工作

例如,理想的逻辑是

func_enquo -> enquo(args$func)  # func is in place of `print`
func_enquo(value)  # what matters is the print argument here.

我曾经尝试过编写一个包装函数,但没有成功;我尝试了
eval_tidy
,但没有效果(代码无效)。

如果我理解,您想使用第一个参数作为函数名吗?然后试着使用:


这有帮助吗?

谢谢这看起来很有希望,让我很快试用一下,我会回来的。谢谢你的解决方案奏效了!我不得不稍微调整我的代码以使其正常工作,但它符合我的目的
do_something <- function(fct, arg) {
   get(fct)(arg)
}

do_something("print", "Hello")
#>[1] "Hello"

do_something("mean", 1:5)
#> 3
func_enquo -> get(args[1])  # func is in place of `print`
func_enquo(value)           # what matters is the print argument here.