Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 错误:对象';。doSnowGlobals&x27;找不到?_R_Foreach_Parallel Processing_Snow - Fatal编程技术网

R 错误:对象';。doSnowGlobals&x27;找不到?

R 错误:对象';。doSnowGlobals&x27;找不到?,r,foreach,parallel-processing,snow,R,Foreach,Parallel Processing,Snow,我正在尝试在4个节点上并行化代码(type=“SOCK”)。这是我的密码 library(itertools) library(foreach) library(doParallel) library(parallel) workers <- ip address of 4 nodes cl = makePSOCKcluster(workers, master="ip address of master") registerDoParallel(cl) z <- read.csv

我正在尝试在4个节点上并行化代码(type=“SOCK”)。这是我的密码

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

workers <- ip address of 4 nodes
cl = makePSOCKcluster(workers, master="ip address of master")
registerDoParallel(cl)

z <- read.csv("ProcessedData.csv", header=TRUE, as.is=TRUE)
z <- as.matrix(z)


system.time({
  chunks <- getDoParWorkers()
  b <- foreach (these = isplitIndices(nrow(z),
                                      chunks=chunks),
                .combine = c) %dopar% {
                  a <- rep(0, length(these))
                  for (i in 1:length(these)) {
                    a[i] <- mean(z[these[i],])
                  }
                  a
                }
})
库(itertools)
图书馆(foreach)
图书馆(双平行)
图书馆(平行)

workers如果任何worker无法加载doParallel包,则会出现此错误。您可以将doParallel安装到某个目录中,并通过“.libpath”将主机指向该目录:


@Steve Weston回答的一个具体案例是,您的员工无法加载给定的包(例如doParallel),因为该包位于Packrat项目中。将软件包安装到系统库或工作人员能够找到它们的其他地方。

要在您可以运行的每个工作人员上设置库路径,请执行以下操作:

clusterEvalQ(cl, .libPaths("Your library path"))

今天我遇到了同样的问题,我尝试了上面所有的答案,但没有一个对我有效。然后,我简单地重新安装了doSNOW包,奇迹般地解决了问题。

我从中发现,我需要在foreach包中重新指定libpath。然后它能够找到所需的包以及.doSnowGlobals。在对我的问题做了更多的研究之后,packrat本身并不是问题所在,而是我用packrat加载了R,然后使用setwd()将其加载到一个子文件夹。启动worker时,它在project dir中找不到.Rprofile,也不会加载packrat libraries.perfect。为什么在某些系统上这是必要的,但在某些系统上却不是?
> clusterEvalQ(cl, library(doParallel))
Error in checkForRemoteErrors(lapply(cl, recvResult)) : 
  3 nodes produced errors; first error: there is no package called ‘doParallel’
clusterEvalQ(cl, .libPaths("Your library path"))