使用单个命令运行具有不同参数的函数列表

Ali*_*Ali 4 multicore r classification svm nnet

我期待在相同的数据上测试不同的回归/分类算法(即svm,nnet,rpart,randomForest,naiveBayes等)的结果,看看哪个更好.但我需要让我的代码尽可能短而干净.要测试所有算法,我想使用一次mclapply()包调用来运行它们multicore:

invisible(lapply(c("party","nnet","caret","klaR","randomForest","e1071","rpart",
                   "multicore"), require, character.only = T))
algorithms <- c(knn3, NaiveBayes, nnet, ctree, randomForest, svm, naiveBayes, rpart)
data(iris)
model <- mclapply(algorithms, function(alg) alg(Species ~ ., iris))
Run Code Online (Sandbox Code Playgroud)

问题是某些算法需要额外的参数,即nnet()需要size设置参数.当然,这可以通过几个if,else命令来解决,但有没有更简单的解决方案?

Mat*_*rde 5

你可以做的一件事就是用algorithms需要额外参数的部分函数来替换那些,例如

algorithms <- c(knn3, ctree, function(...) nnet(..., size=2))
Run Code Online (Sandbox Code Playgroud)