5

ubuntu 14.04のR 3.2.0で使用freadforeachてパッケージ化しました。doParallelを使用していなくても、次のコードは問題なく動作しますregisterDoParallel

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)

ただし、Windows 7 に切り替えると、「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」パッケージも機能しません。以下はエラーメッセージです。

Error in { : task 1 failed - "could not find function "fread""

誰か似たような経験がありますか?


フォローアップの質問は、ネストされたに関するものforeachです。以下はうまくいかないようです。

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)

   

4

1 に答える 1

3

ここuser20650で参照してくれてありがとう。基本的には関数に設定することで解決できます。.export='fread'foreach

より正確には、次の手順で問題を解決します。

 tmp<-foreach(i=1:10,.export = 'fread') %dopar% { 
              t <- fread('test.csv',data.table=T) 
      }

nested に関する私のフォローアップの質問に対して、彼のコメントforeachで答えました。user20650つまり、追加しclusterEvalQ(cl , c(library(data.table),library(foreach)))ます。次のコードは、ubuntu と Windows の両方で機能するようです。

cl<-makeCluster(4)
registerDoParallel(cl)
clusterEvalQ(cl , c(library(data.table),library(foreach)))

tmp<-foreach(j=1:10) %dopar% {

     tmp1<-foreach(i=1:10) %dopar% { t <- fread('test.csv',data.table=T) }
     rbindlist(tmp1)
     }
于 2015-06-16T01:57:32.273 に答える