ОНОВЛЕННЯ: тепер caret використовується foreach
внутрішньо, тому це питання вже не є актуальним. Якщо ви можете зареєструвати робочий паралельний бекенд для foreach
, caret буде використовувати його.
У мене є пакет 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)