Catch函数名称作为参数传递给函数,用于不同的处理?

时间:2018-05-07 22:31:02

标签: r function parameter-passing

假设我有一个功能:fun1 <- function(x, fun2) { # do something }其中x是一个向量,fun2是一个函数的名称。

如何测试函数中的fun2名称?例如,如果fun2是&#34;意思是&#34;,那么我想要返回一个向量,如果fun2是&#34;摘要&#34;我想返回一个清单。

1 个答案:

答案 0 :(得分:1)

使用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具有良好的属性,它也匹配部分参数。例如,fun1(c(1,2,3), "sum")也会返回summary