复制R函数并对其进行更改

复制R函数并对其进行更改,r,r-caret,R,R Caret,是否可以复制R中的函数并更改复制函数中参数的默认值?比如说, myFunc <- function(param1 = 1) { return(1+param1) } # Duplicate function and alter param1 myFunc2 <- some way to duplicate myFunc and alter param1=1 to param1=2 如果函数是您写下的函数,则不需要复制它,因为param1是一个变量,您可以在调用该函数时定义它。

是否可以复制R中的函数并更改复制函数中参数的默认值?比如说,

myFunc <- function(param1 = 1) {
  return(1+param1)
}

# Duplicate function and alter param1
myFunc2 <- some way to duplicate myFunc and alter param1=1 to param1=2

如果函数是您写下的函数,则不需要复制它,因为param1是一个变量,您可以在调用该函数时定义它。您只需运行
myFunc(param1=2)

多亏了Gregor,下面是我的解决方案。他在评论中提供了答案

myPickSizeTolerance <- function(x, metric, tol=2, maximize) {
  return(caret::pickSizeTolerance(x, metric, tol, maximize))
}
rfFuncs$selectSize <- myPickSizeTolerance

myPickSizeTolerance从字面上看,复制函数但更改默认参数的方法可能是这样的:

copyfun <- function(f, ...){
  l <- pairlist(...)
  a <- formals(f)
  n <- names(l)[names(l) %in% names(a)]
  a[n] <- l[n]
  formals(f) <- a
  f
}

myPickSizeTolerance=function(…,tol=3)pickSizeTolerance(…,tol=tol)
Awesome@Gregor。。太简单了。不知道为什么我没有想到。是的,真的。也许我的第一个例子有点误导。我想将
pickSizeTolerance
与另一个公差值一起使用。但是,此函数是插入符号包的一部分,因此已定义。
copyfun <- function(f, ...){
  l <- pairlist(...)
  a <- formals(f)
  n <- names(l)[names(l) %in% names(a)]
  a[n] <- l[n]
  formals(f) <- a
  f
}
> copyfun(myFunc, param1=2)
function (param1 = 2) 
{
    return(1 + param1)
}


dummy <- function(a=1,b=2,c=3,d=4) paste(a,b,c,d)
> copyfun(dummy, b=100)
function (a = 1, b = 100, c = 3, d = 4) 
paste(a, b, c, d)
> copyfun(dummy, b=100, c=NULL)()
[1] "1 100  4"
> copyfun(dummy, b=100, c=NULL)(a=101, c="C")
[1] "101 100 C 4"