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.