有没有办法在运行时决定函数名称时调用函数?例如,调用pdf
将如下所示:
pdf("myfile.pdf")
但是有办法,我可以这样做:
media_type = "pdf"
media_type("myfile.pdf")
答案 0 :(得分:3)
1)do.call 使用do.call
do.call(media_type, list("myfile.pdf"))
2)match.fun 另一种方法是match.fun
fun <- match.fun(media_type)
fun("myfile.pdf")
3)切换下面的另一种方法是为每种媒体类型添加switch
的参数。 stop
是默认值。调用时会产生错误。
fun <- switch(media_type, pdf = pdf, stop)
fun("myfile.pdf")
4)eval / call 虽然使用eval
通常不赞成,但这也有效:
eval(call(media_type, "myfile.pdf"))
答案 1 :(得分:1)
我不确定这是不是你想要的,但考虑到你问题中的例子,这是可能的。假设您有代码确定要调用哪个函数,则可以使用do.call
传递基于字符串的函数名称。我不得不将输入包装在列表中以使其快乐,但这在大多数情况下并不是什么大问题。
f = "mean"
d = c(1,2,3)
do.call(f,list(d))
#> 2