J'ai un problème alors que je tente de récupérer la trame de données déjà ejecuted par l'algorithme parLapply R.parLapply en R - dataframes
I joint l'exemple suivant avec les données de l'iris définie pour indiquer la question. J'ai créé une fonction qui fait un modèle de revêtement pour chaque espèce d'iris, puis une boucle sur eux.
uniques<-unique(iris$Species)
model<-function(i){
table<-iris[iris$Species==uniques[i],]
fit<-lm(Petal.Width ~ Petal.Length + Sepal.Width + Sepal.Length, data=table)
predicted_df <- data.frame(pred = predict(fit, table), table)
assign(paste0("predicted_df_",i),predicted_df,envir = .GlobalEnv)
}
#Loop over Species
loop<- for (i in 1:3){
model(i)
}
Ici, les bases de données d'arbres ("predicted_df_1/2/3") est apparu correctement dans l'environnement local.
Lorsque j'exécute la même chose mais avec l'algorithme parLapply je ne trouve pas où sont les trames de données ou comment les amener à l'environnement local. Aucune erreur n'est affichée.
library("foreach")
library("doParallel")
cl <- makeCluster(mc <- getOption("cl.cores", 4))
clusterExport(cl=cl, varlist=c("iris"))
clusterEvalQ(cl, library(DAAG))
registerDoParallel(cl) # register the cluster
system.time(
df <- parLapply(cl, 1:3,
function(i) {
tryCatch({ model(i)}, error=function(e){cat("ERROR :",conditionMessage(e), "\n")})
})
)
stopCluster(cl)
Comment quelqu'un m'aide dans cette tâche? Merci!
Oui, ce n'est qu'un exemple. Les données réelles contiennent plus de 20k itérations, donc, si j'applique une simple boucle, la tâche demande plusieurs heures. Donc, avec le parallélisme, le processus serait plus rapide. – lolo
@lolo Je ne comprends pas. Je viens de vous donner la solution pour paralléliser votre problème, pas dit que vous n'avez pas besoin de le paralléliser. –