ACTUALIZACIÓN: caret ahora se usa foreachinternamente, por lo que esta pregunta ya no es realmente relevante. Si puede registrar un backend paralelo que funcione foreach, caret lo usará.
Tengo el paquete de caret para R, y estoy interesado en usar la trainfunción para validar de forma cruzada mis modelos. Sin embargo, quiero acelerar las cosas, y parece que caret proporciona soporte para el procesamiento paralelo. ¿Cuál es la mejor manera de acceder a esta función en una máquina con Windows? Tengo el paquete doSMP , pero no puedo entender cómo traducir la foreachfunción a una lapplyfunción, así que puedo pasarla a la trainfunción.
Aquí hay un ejemplo de lo que quiero hacer, de la traindocumentación: Esto es exactamente lo que quiero hacer, pero usando el doSMPpaquete, en lugar del doMPIpaquete.
## 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)
Aquí hay una versión de la función de mbq que usa los mismos nombres de variables que la documentación de 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)