UPDATE: caret sekarang menggunakan foreachinternal, jadi pertanyaan ini tidak lagi benar-benar relevan. Jika Anda dapat mendaftarkan backend paralel yang berfungsi untuk foreach, caret akan menggunakannya.
Saya memiliki paket caret untuk R, dan saya menarik menggunakan trainfungsi untuk memvalidasi silang model saya. Namun, saya ingin mempercepat, dan tampaknya caret memberikan dukungan untuk pemrosesan paralel. Apa cara terbaik untuk mengakses fitur ini pada mesin Windows? Saya memiliki paket doSMP , tetapi saya tidak tahu bagaimana menerjemahkan foreachfungsi menjadi lapplyfungsi, jadi saya bisa meneruskannya ke trainfungsi.
Berikut adalah contoh dari apa yang ingin saya lakukan, dari traindokumentasi: Ini persis apa yang ingin saya lakukan, tetapi menggunakan doSMPpaket, bukan doMPIpaket.
## 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)
Berikut adalah versi fungsi mbq yang menggunakan nama variabel yang sama dengan dokumentasi 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)