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
来处理它,它很快就会变得乏味。
有没有办法,例如使用quosure
、eval
或类似的方法来替换这个逻辑,这样我只需要写几行代码就可以完成工作?
例如,理想的逻辑是,
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.
有帮助吗?
我有一个用例,我想将命令行 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
来处理它,它很快就会变得乏味。
有没有办法,例如使用quosure
、eval
或类似的方法来替换这个逻辑,这样我只需要写几行代码就可以完成工作?
例如,理想的逻辑是,
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.
有帮助吗?