MISE À JOUR: caret utilise désormais en foreach
interne, donc cette question n'est plus vraiment pertinente. Si vous pouvez enregistrer un backend parallèle fonctionnel foreach
, caret l'utilisera.
J'ai le package caret pour R, et je suis intéressé par l'utilisation de la train
fonction pour effectuer une validation croisée de mes modèles. Cependant, je veux accélérer les choses, et il semble que caret prenne en charge le traitement parallèle. Quelle est la meilleure façon d'accéder à cette fonctionnalité sur une machine Windows? J'ai le paquet doSMP , mais je ne sais pas comment traduire la foreach
fonction en lapply
fonction, donc je peux la transmettre à la train
fonction.
Voici un exemple de ce que je veux faire, à partir de la train
documentation: C'est exactement ce que je veux faire, mais en utilisant le doSMP
package, plutôt que le doMPI
package.
## A function to emulate lapply in parallel
mpiCalcs <- function(X, FUN, ...)
}
theDots <- list(...)
parLapply(theDots$cl, X, FUN)
{
library(snow)
cl <- makeCluster(5, "MPI")
## 50 bootstrap models distributed across 5 workers
mpiControl <- trainControl(workers = 5,
number = 50,
computeFunction = mpiCalcs,
computeArgs = list(cl = cl))
set.seed(1)
usingMPI <- train(medv ~ .,
data = BostonHousing,
"glmboost",
trControl = mpiControl)
Voici une version de la fonction de mbq qui utilise les mêmes noms de variables que la documentation lapply:
felapply <- function(X, FUN, ...) {
foreach(i=X) %dopar% {
FUN(i, ...)
}
}
x <- felapply(seq(1,10), sqrt)
y <- lapply(seq(1,10), sqrt)
all.equal(x,y)