UPDATE: Caret wird jetzt foreach
intern verwendet, sodass diese Frage nicht mehr wirklich relevant ist. Wenn Sie ein funktionierendes paralleles Backend für registrieren können foreach
, wird es von Caret verwendet.
Ich habe das Caret- Paket für R und bin daran interessiert, die train
Funktion zur Kreuzvalidierung meiner Modelle zu verwenden. Ich möchte die Dinge jedoch beschleunigen, und es scheint, dass Caret die Parallelverarbeitung unterstützt. Wie kann ich auf einem Windows-Computer am besten auf diese Funktion zugreifen? Ich habe das doSMP- Paket, kann aber nicht herausfinden, wie die foreach
Funktion in eine lapply
Funktion übersetzt werden soll, sodass ich sie an die train
Funktion übergeben kann.
Hier ist ein Beispiel für das, was ich tun möchte, aus der train
Dokumentation: Genau das möchte ich tun, aber das doSMP
Paket anstelle des doMPI
Pakets verwenden.
## 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)
Hier ist eine Version der Funktion von mbq, die dieselben Variablennamen wie die lapply-Dokumentation verwendet:
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)