UPDATE: Caret wird jetzt foreachintern 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 trainFunktion 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 foreachFunktion in eine lapplyFunktion übersetzt werden soll, sodass ich sie an die trainFunktion übergeben kann.
Hier ist ein Beispiel für das, was ich tun möchte, aus der trainDokumentation: Genau das möchte ich tun, aber das doSMPPaket anstelle des doMPIPakets 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)