【发布时间】:2022-01-04 19:21:53
【问题描述】:
fun1、fun2 和 fun3 似乎按预期工作:
fun1 <- function(fun, x) {
fun(x)
}
fun1(mean, 1:10)
fun1(as.character, 1:10)
fun1(notafun, 1:10)
fun2 <- function(fun, x) {
fun <- match.fun(fun)
fun(x)
}
fun2(mean, 1:10)
fun2(as.character, 1:10)
fun2(notafun, 1:10)
fun3 <- function(fun, x) {
fun <- deparse(substitute(fun))
do.call(fun, list(x))
}
fun3(mean, 1:10)
fun3(as.character, 1:10)
fun3(notafun, 1:10)
一般来说,一种策略是首选的吗?到目前为止,我只注意到match.fun 在将fun 指定为字符串时也有效。
我的用例是本地使用的包中的非导出函数(如果我不能将fun 指定为字符串,这不是限制)。使用match.fun 而不是“直接”提供函数(如fun1)有什么好处。
【问题讨论】:
-
谢谢。我编辑了我的问题以提供更多信息。