复制R函数并对其进行更改
是否可以复制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是一个变量,您可以在调用该函数时定义它。
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"