R

使用 doSMP 並行化插入符號包

  • March 23, 2011

更新:插入符號現在foreach在內部使用,所以這個問題不再相關。如果您可以為 註冊一個有效的並行後端foreach,插入符號將使用它。


我有 R 的caret包,我對使用該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)

嘗試

computeFunction=function(onWhat,what,...){foreach(i=onWhat) %do% what(i,...)},

引用自:https://stats.stackexchange.com/questions/8696

comments powered by Disqus