Error when using %dopar% instead of %do% in R (package doParallel)

后端 未结 3 1523
慢半拍i
慢半拍i 2021-01-14 01:12

I\'ve come up with a strange error. Suppose I have 10 xts objects in a list called data. I now search for every three combinations using

   data_names <-          


        
相关标签:
3条回答
  • 2021-01-14 01:39

    The problem is likely that you haven't called library(xts) on each of the workers. You don't say what backend you're using, so I can't be 100% sure.

    If that's the problem, then this code will fix it:

    list <- foreach(i=1:ncol(combs)) %dopar% {
        library(xts)
        tmp_triple <- combs[,i]
    
        p1<-data[tmp_triple[[1]]][[1]]
        p2<-data[tmp_triple[[2]]][[1]]
        p3<-data[tmp_triple[[3]]][[1]]
    
        data.merge <- merge(p1,p2,p3,all=FALSE)
    }
    
    0 讨论(0)
  • 2021-01-14 01:53

    A better solution rather than explicitly loading the libraries within the function would be to utilise the .packages argument of the foreach() function:

    list <- foreach(i=1:ncol(combs),.packages=c("xts","zoo")) %dopar% {
        tmp_triple <- combs[,i]
    
        p1<-data[tmp_triple[[1]]][[1]]
        p2<-data[tmp_triple[[2]]][[1]]
        p3<-data[tmp_triple[[3]]][[1]]
    
        data.merge <- merge(p1,p2,p3,all=FALSE)
    }
    
    0 讨论(0)
  • 2021-01-14 01:57

    Quick fix for problem with foreach %dopar% is to reinstall these packages:

    install.packages("doSNOW")
    
    install.packages("doParallel") 
    
    install.packages("doMPI")
    

    These are responsible for parallelism in R. Bug which existed in old versions of these packages is now removed. It worked in my case.

    0 讨论(0)
提交回复
热议问题