更新:キャレットはforeach
内部的に使用するようになったため、この質問はもはや関連性がありません。の動作する並列バックエンドを登録できる場合foreach
、キャレットはそれを使用します。
私は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)
次に、lapplyのドキュメントと同じ変数名を使用するmbqの関数のバージョンを示します。
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)