R-矢量参数匹配并执行相应的计算

时间:2018-02-24 05:36:40

标签: r function arguments match

我想说我想创建一个带有值x,y和类型参数的函数,比如

myfun <- function(x, y, type=c("all", "add", "multiply", "mean")){
    method <- match.arg(type, several.ok = TRUE)
    * body of the function
}

当我通过myfun(10,20, type = "all")调用该函数时,它将返回一个执行所有类型指标的表

method    value
sum         30
multiply    200
mean        15

当我通过myfun(10,20, type = c("sum", "multiply"))调用该函数时,它将返回一个这样的表

method    value
sum         30
multiply    200

我想知道如何编写一个可以采用向量参数的函数,并将参数与相应的计算相匹配,然后将方法名称和值放在表中?

我正在考虑创建一个类似上面第一个表的表,然后通过将第一列与参数名称匹配来执行子集。是可行的吗?

1 个答案:

答案 0 :(得分:0)

可以尝试使用evalparse,如下所示。我们必须为multiply定义一个自定义函数,因为这样的函数不可用。

multiply <- function(x, y){
  x*y
}

myfun <- function(x, y, type=c("all", "sum", "multiply", "mean")){
  if("all" %in% type)
  {
    type=c("sum", "multiply", "mean")
  }
  method <- match.arg(type, several.ok = TRUE)
  df<- data.frame(method = character(0), value = double(0))
  #body of the function
  for(m in seq_along(method)){
    df<-rbind(df, data.frame(method=method[m], 
              value=eval(parse(text = sprintf("%s(%f,%f)",method[m],x,y)))))
  }

  df
}

<强>测试

myfun(2,3)   #like "All"
#    method value
#1      sum     5
#2 multiply     6
#3     mean     2

myfun(12,4, "mean")
#  method value
#1   mean     8

> myfun(12,4, "multiply")
#    method value
#1 multiply    48