L'exécution en parallèle de train en signe d'échec avec la fonction n'est pas trouvé
-
21-12-2019 - |
Question
hier, j'ai mis à jour mon packages R et, depuis lors, l'exécution en parallèle de train de la fonction échoue.
Il semble que certaines fonctions qui sont appelées à partir de l'intérieur de la les travailleurs ne sont pas disponibles.Ces fonctions sont au moins flatTable et probFunction.
Je rencontre ce des questions sur ma machine de production, et a été en mesure de le reproduire sur un nettoyer Windows 7 x64 VM.
J'ai ajouté un minimum de travail exemple ci-dessous.Chers utilisateurs de stackoverflow:Toute aide est appréciée!
# R 3.0.2 x64, RStudio Version 0.98.490, Windows 7 x64
data(iris)
library(caret) # 6.0-21
library(doParallel) # 1.0.6
model <- "rf"
# Fail
?probFunction
?flatTable
fitControl <- trainControl(
method = "repeatedcv"
, number = 5 ## 5-fold CV
, repeats = 1 ## repeated one times
, verboseIter =TRUE
)
#### Sequential Version ####
# Runs
train(Species ~ ., data = iris, method = model, trControl = fitControl)
#### Parallelized version ####
# Fails with
# Error in e$fun(obj, substitute(ex), parent.frame(), e$data) :
# worker initialization failed: Error in eval(expr, envir, enclos): could not find function "flatTable"
cl <- makeCluster(3)
registerDoParallel(cl)
train(Species ~ ., data = iris, method = model, trControl = fitControl)
stopCluster(cl)
# Fails with
# Error in { : task 1 failed - "could not find function "probFunction""
fitControl <- trainControl(
method = "repeatedcv"
, number = 5 ## 5-fold CV
, repeats = 1 ## repeated one times
, verboseIter =TRUE
, classProbs = TRUE
)
cl <- makeCluster(3)
registerDoParallel(cl)
train(Species ~ ., data = iris, method = model, trControl = fitControl)
stopCluster(cl)
#### Again sequential version ####
# Fails with
# Error in summary.connection(connection) : invalid connection
train(Species ~ ., data = iris, method = model, trControl = fitControl)
R Informations De La Session
R version 3.0.2 (2013-09-25)
Platform: x86_64-w64-mingw32/x64 (64-bit)
locale:
[1] LC_COLLATE=German_Germany.1252 LC_CTYPE=German_Germany.1252 LC_MONETARY=German_Germany.1252
[4] LC_NUMERIC=C LC_TIME=German_Germany.1252
attached base packages:
[1] parallel stats graphics grDevices utils datasets methods base
other attached packages:
[1] e1071_1.6-1 class_7.3-9 randomForest_4.6-7 doParallel_1.0.6 iterators_1.0.6
[6] foreach_1.4.1 caret_6.0-21 ggplot2_0.9.3.1 lattice_0.20-23
loaded via a namespace (and not attached):
[1] car_2.0-19 codetools_0.2-8 colorspace_1.2-4 compiler_3.0.2 dichromat_2.0-0
[6] digest_0.6.4 grid_3.0.2 gtable_0.1.2 labeling_0.2 MASS_7.3-29
[11] munsell_0.4.2 nnet_7.3-7 plyr_1.8 proto_0.3-10 RColorBrewer_1.0-5
[16] reshape2_1.2.2 scales_0.2.3 stringr_0.6.2 tools_3.0.2
La solution
L'erreur que vous obtenez est provoqué par un bogue dans caret 6.0-21 lors de l'utilisation de doParallel, doSNOW, et doMPI.Il a été corrigé dans la version 6.0-22 R-forge, mais n'a pas été libéré à CRAN encore.Si vous ne voulez pas attendre la nouvelle version pour être libéré, vous pouvez:
- Revenir à caret 5.x
- Installer signe 6.0-22 à partir de R-forge
- Installer et utiliser doSNOW 1.0.10 de R-forge plutôt que doParallel
Le problème a été causé par un changement dans le CRAN de la politique qui interdit l'utilisation de la :::
l'opérateur, même lors de la référence à la non-fonctions exportées à partir dans le même package.
Mise à jour
Signe 6.0-22 a été publié à CRAN sur 2014-01-18.Cela devrait résoudre le problème signalé à l'aide de caret avec doSNOW et parallèle similaire backends.