2017-05-19 8 views
0

Rの関数を複製して、重複関数のパラメータのデフォルト値を変更することはできますか?例えば、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のデフォルトの値(1.5)より高い許容値(2または3)を持つ関数pickSizeToleranceをデフォルトの値に置き換えます。ここでは関数は、あなたが書いたものである場合のparam1は、関数を呼び出すときに定義することができ、可変であるので、あなたはそれを複製する必要はありません例

# 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" 
       ) 
+1

'myPickSizeTolerance =関数(...、TOL = 3)pickSizeTolerance(...、TOL = TOL)' – Gregor

+0

恐ろしい@Gregor ..秀シンプル。なぜ私はそれを考えなかったのか分からない。 –

答えて

0

グレゴールのおかげで、私の解決策です。彼は彼のコメントで答えを提供しました。

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

です。あなたがしなければならないことは実行されますmyFunc(param1=2)

+0

はいはい。たぶん私の最初の例は少し誤解を招くかもしれません。 'pickSizeTolerance'を別の許容値で使いたいです。ただし、この関数はキャレットパッケージの一部であるため、すでに定義されています。 –

関連する問題