ОБНОВЛЕНИЕ: каретка теперь используется foreach
внутри, поэтому этот вопрос больше не актуален. Если вы можете зарегистрировать рабочий параллельный бэкэнд для foreach
, caret будет использовать его.
У меня есть пакет каретки для R, и мне интересно использовать train
функцию для перекрестной проверки моих моделей. Тем не менее, я хочу ускорить процесс, и, похоже, карета обеспечивает поддержку параллельной обработки. Каков наилучший способ доступа к этой функции на компьютере с Windows? У меня есть пакет doSMP , но я не могу понять, как преобразовать foreach
функцию в lapply
функцию, поэтому я могу передать ее train
функции.
Вот пример того, что я хочу сделать из train
документации: это именно то, что я хочу сделать, но с использованием doSMP
пакета, а не doMPI
пакета.
## 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)
Вот версия функции mbq, которая использует те же имена переменных, что и документация 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)