ACTUALIZACIÓN: caret ahora se usa foreach
internamente, 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 train
funció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 foreach
función a una lapply
función, así que puedo pasarla a la train
función.
Aquí hay un ejemplo de lo que quiero hacer, de la train
documentación: Esto es exactamente lo que quiero hacer, pero usando el doSMP
paquete, en lugar del doMPI
paquete.
## 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)