ATUALIZAÇÃO: o sinal de intercalação agora usa foreach
internamente, portanto, essa pergunta não é mais realmente relevante. Se você pode registrar um back-end paralelo em funcionamento foreach
, o caret o usará.
Eu tenho o pacote de interpolação para R e sou interessante em usar a train
função para validar cruzadamente meus modelos. No entanto, quero acelerar as coisas e parece que o sinal de intercalação fornece suporte para processamento paralelo. Qual é a melhor maneira de acessar esse recurso em uma máquina Windows? Eu tenho o pacote doSMP , mas não consigo descobrir como converter a foreach
função em uma lapply
função, para que eu possa passar para a train
função.
Aqui está um exemplo do que eu quero fazer, a partir da train
documentação: É exatamente isso que eu quero fazer, mas usando o doSMP
pacote, e não o doMPI
pacote.
## 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)
Aqui está uma versão da função mbq que usa os mesmos nomes de variáveis que a documentação da 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)