Ich verwendete fread
mit foreach
und doParallel
Paket in R 3.2.0 in ubuntu 14.04. Der folgende Code funktioniert einwandfrei, obwohl ich registerDoParallel
nicht verwendet habe.Mit fread mit foreach und doParallel in R
library(foreach)
library(doParallel)
library(data.table)
write.csv(iris,'test.csv',row.names=F)
cl<-makeCluster(4)
tmp<-foreach(i=1:10) %dopar% { t <- fread('test.csv') }
tmp<-rbindlist(tmp)
stopCluster(cl)
Beim Wechsel zu Windows 7 funktioniert es jedoch nicht mehr, mit oder ohne 'registerDoParallel'.
library(foreach)
library(doParallel)
#library(doSNOW)
library(data.table)
write.csv(iris,'test.csv',row.names=F)
cl<-makeCluster(4)
registerDoParallel(cl)
#registerDoSNOW(cl)
tmp<-foreach(i=1:10) %dopar% { t <- fread('test.csv') }
tmp<-rbindlist(tmp)
stopCluster(cl)
"DoSNOW" -Paket funktioniert auch nicht. Unten ist die Fehlermeldung.
Error in { : task 1 failed - "could not find function "fread""
Hat jemand ähnliche Erfahrung?
Eine weitere Frage betrifft verschachtelte foreach
. Es scheint, dass das Folgende nicht funktioniert.
cl<-makeCluster(4)
registerDoParallel(cl)
clusterEvalQ(cl , library(data.table))
tmp<-foreach(j=1:10) %dopar% {
tmp1<-foreach(i=1:10) %dopar% {
t<-fread('test.csv',data.table=T)
}
rbindlist(tmp1)
}
stopCluster(cl)
Hinweis ohne die 'registerDoParallel' wird es nicht parallel laufen (Sie erhalten nur eine Warnung beim ersten Mal). Um 'fread' zum Arbeiten zu bringen, müssen Sie eventuell die Funktionen an jeden Cluster weiterleiten, so etwas wie' clusterEvalQ (cl, library (data.table)) '(ungetestet) – user20650
könnte von Interesse sein http://stackoverflow.com/ Fragen/17345271/r-how-does-a-foreach-loop-find-a-function-das-sollte-aufgerufen-werden und http://stackoverflow.com/questions/27341210/foreach-works-even-without- Export-Variable-und-Angabe-Paket-Abhängigkeit – user20650
Ja, Sie haben Recht. Danke, dass du es aufgezeigt hast. Ich bekomme diese Warnung auch nur zum ersten Mal. Sieht aus, als hätte ich das gleiche Problem sowohl für Ubuntu als auch für Windows. – Lamothy