R 评估 character/string 作为调用函数名称

R evaluate character/string as the calling function name

我有一个用例,我想将命令行 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-loop 来处理它,它很快就会变得乏味。

有没有办法,例如使用quosureeval或类似的方法来替换这个逻辑,这样我只需要写几行代码就可以完成工作?

例如,理想的逻辑是,

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

我已经尝试 enquo 编写一个包装函数,但它没有用;我尝试了 eval_tidy 但无济于事(代码无效。)

如果我理解了,你想使用第一个参数作为函数名?然后尝试以某种方式使用 get()

do_something <- function(fct, arg) {
   get(fct)(arg)
}

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

do_something("mean", 1:5)
#> 3

请注意,您必须小心传入的内容。然后你可以将参数称为 args[1],而不是 args$print,如果它总是第一个,就像这样:

func_enquo -> get(args[1])  # func is in place of `print`
func_enquo(value)           # what matters is the print argument here.

有帮助吗?