error: object '.doSnowGlobals' not found?

前端 未结 4 726
既然无缘
既然无缘 2021-01-05 01:34

I\'m trying to parallelize a code on 4 nodes(type = \"SOCK\"). Here is my code.

library(itertools)
library(foreach)
library(doParallel)
library(parallel)

wo         


        
4条回答
  •  春和景丽
    2021-01-05 01:59

    You can get this error if any of the workers are unable to load the doParallel package. You can make that happen by installing doParallel into some directory and pointing the master to it via ".libPaths":

    > .libPaths('~/R/lib.test')
    > library(doParallel)
    > cl <- makePSOCKcluster(3, outfile='')
    starting worker pid=26240 on localhost:11566 at 13:47:59.470
    starting worker pid=26248 on localhost:11566 at 13:47:59.667
    starting worker pid=26256 on localhost:11566 at 13:47:59.864
    > registerDoParallel(cl)
    > foreach(i=1:10) %dopar% i
    Warning: namespace ‘doParallel’ is not available and has been replaced
    by .GlobalEnv when processing object ‘’
    Warning: namespace ‘doParallel’ is not available and has been replaced
    by .GlobalEnv when processing object ‘’
    Warning: namespace ‘doParallel’ is not available and has been replaced
    by .GlobalEnv when processing object ‘’
    Error in checkForRemoteErrors(lapply(cl, recvResult)) : 
      3 nodes produced errors; first error: object '.doSnowGlobals' not found
    

    The warning happens when a function from doParallel is deserialized on a worker. The error happens when the function is executed and tries to access .doSnowGlobal which is defined in the doParallel namespace, not in .GlobalEnv.

    You can also verify that doParallel is available on the workers by executing:

    > clusterEvalQ(cl, library(doParallel))
    Error in checkForRemoteErrors(lapply(cl, recvResult)) : 
      3 nodes produced errors; first error: there is no package called ‘doParallel’
    

提交回复
热议问题