我想说我想创建一个带有值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
我想知道如何编写一个可以采用向量参数的函数,并将参数与相应的计算相匹配,然后将方法名称和值放在表中?
我正在考虑创建一个类似上面第一个表的表,然后通过将第一列与参数名称匹配来执行子集。是可行的吗?
答案 0 :(得分:0)
可以尝试使用eval
和parse
,如下所示。我们必须为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