Поймать имя функции, переданное в качестве аргумента функции, для другой обработки? - PullRequest
0 голосов
/ 08 мая 2018

Предположим, у меня есть функция: fun1 <- function(x, fun2) { # do something }, где x - вектор, а fun2 - имя функции.

Как проверить имя fun2 в функции? Например, если fun2 означает «среднее», то я хочу вернуть вектор, если fun2 означает «сводка», я хочу вернуть список.

1 Ответ

0 голосов
/ 08 мая 2018

Как насчет этого, используя match.arg?

custom_function <- function(x) return(cat(sprintf("%05.4f\n", x)));

fun1 <- function(x, fun2 = c("mean", "summary", "custom_function")) {
    fun2 <- match.arg(fun2);
    if (fun2 == "mean") return(mean(x));
    if (fun2 == "summary") return(summary(x));
    if (fun2 == "custom_function") return(custom_function(x));
}

fun1(c(1,2,3), "mean");
[1] 2
fun1(c(1,2,3), "summary");
#Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
# 1.0     1.5     2.0     2.0     2.5     3.0
fun1(c(1,2,3), "custom");
#1.0000
# 2.0000
# 3.0000

arg.match имеет свойство nice, которое также соответствует частичным аргументам. Например, fun1(c(1,2,3), "sum") также вернет summary.

...