动态生成要调用的函数的名称

时间:2018-02-07 18:39:42

标签: r function

有没有办法在运行时决定函数名称时调用函数?例如,调用pdf将如下所示:

pdf("myfile.pdf")

但是有办法,我可以这样做:

media_type = "pdf"
media_type("myfile.pdf")

2 个答案:

答案 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