我有一个使用dplyr来汇总变量的函数 . 我希望能够将摘要函数的名称作为参数传递 . 下面的方法有效(使用match.fun) . 我想知道是否有更好/更简单的方法?
exampleFunction <- function(df, var, function_name, ...){
var <- enquo(var)
apply_some_function <-function(data, function_name, ...){
FUN <- match.fun(function_name)
FUN(data,...)
}
results <- df %>%
summarize (result=apply_some_function(!!var, function_name,...))
}
exampleFunction(iris, Sepal.Width, "mean")
exampleFunction(iris, Sepal.Width, "min")
2 回答
通常不需要在R中通过其名称传递函数 - 因为函数是第一类(ish),所以几乎总是可以只传递函数本身!
例如:
请注意,虽然在
dplyr::
中将列名称传递给函数是令人讨厌和复杂的,但将函数作为参数传递给其他函数在R中是非常自然的事情 . 特别是当与magrittr::
管道结合使用时,这会启用超紧凑的摘要 . 只举一个例子:你可以使用
summarize_at