在R中我有两个函数几乎做同样的事情,除了它们有一组不同的默认变量。
说我有function1<-function(a=1,b=2,c=3){...}
我现在所拥有的是函数2调用函数1,除了定义一组不同的默认变量function2<-function(a=3,b=4,c=5){function1(a=a,b=b,c=c)}
显然这不是最优的,我想知道是否有更好的方法来编写这两个函数(可能有一个共同的函数,并使另外两个别名具有不同的默认变量?)
答案 0 :(得分:2)
您可以按formals<-
修改默认参数。
> f1 <- function(a = 1) a
> f2 <- f1
> formals(f2)$a <- 2
>
> f1
function(a = 1) a
> f2
function (a = 2)
a
>
> f1()
[1] 1
> f2()
[1] 2
答案 1 :(得分:0)
我想你可以在原始函数中添加另一个参数作为一个标志来指示要使用哪组默认值:
function1 <- function(a=1, b=2, c=3, altDefaults = FALSE){
if (altDefaults){
a <- 3; b <- 4; c <- 5
}
}
我可以扩展这个,我想要包含多组默认值,但它可能会变得很麻烦。
答案 2 :(得分:0)
请看Hadley关于一阶函数的wiki。讨论的函数之一是Curry
,它允许您定义函数的变体,就像您在问题中提到的那样。