Как насчет этого, используя 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
.