是否可以复制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
背景:我使用插入符号包中的rfe来选择功能。我使用rfFuncs作为函数,但我想用selectSize
函数替换默认的pickSizeTolerance
函数,其公差值(2或3)高于默认值(1.5)。这是一个例子
# Create dummy data
trainData <- data.frame(a=runif(100), b=runif(100), c=runif(100), d=runif(100), e=runif(100), f=runif(100), g=runif(100), h=runif(100),i=runif(100),j=runif(100))
trainData$label <- factor(c(rep("Class A", 50), rep("Class B", 50)))
rfFuncs$selectSize <- pickSizeTolerance
ctrlRF <- rfeControl(functions = rfFuncs,
method = "cv",
number = 5,
verbose = F
)
# Do feature selection
rfProfile <- rfe(subset(trainData, select=-c(label)),
trainData[, "label"],
rfeControl = ctrlRF,
sizes = 1:10,
metric = "Accuracy"
)
答案 0 :(得分:0)
如果函数是您记下的函数,则不需要复制它,因为param1是一个可以在调用函数时定义的变量。您所要做的就是运行myFunc(param1=2)
答案 1 :(得分:0)
感谢Gregor,这是我的解决方案。他在评论中提供了答案。
myPickSizeTolerance <- function(x, metric, tol=2, maximize) {
return(caret::pickSizeTolerance(x, metric, tol, maximize))
}
rfFuncs$selectSize <- myPickSizeTolerance
答案 2 :(得分:0)
从字面上看,OP是一种复制函数但更改默认参数的方式,如下所示:
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"