Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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
事先知道要clusterExport的对象_R_Foreach_Parallel Processing - Fatal编程技术网

事先知道要clusterExport的对象

事先知道要clusterExport的对象,r,foreach,parallel-processing,R,Foreach,Parallel Processing,我刚开始使用并行软件包,并已开始探索它们,以加快我的一些工作。我经常遇到的一个烦恼是,foreach命令会在我没有clusterExport相关函数/变量时抛出问题 例子 我知道下面的示例不一定需要foreach来加快速度,但为了便于说明,我将使用它 library(doParallel) library(parallel) library(lubridate) library(foreach) cl <- makeCluster(c("localhost", &qu

我刚开始使用并行软件包,并已开始探索它们,以加快我的一些工作。我经常遇到的一个烦恼是,
foreach
命令会在我没有
clusterExport
相关函数/变量时抛出问题

例子 我知道下面的示例不一定需要
foreach
来加快速度,但为了便于说明,我将使用它

library(doParallel)
library(parallel)
library(lubridate)
library(foreach)

cl <- makeCluster(c("localhost", "localhost", "localhost","localhost"), type = "SOCK")
registerDoParallel(cl, cores = 4)

Dates <- sample(c(dates = format(seq(ISOdate(2010,1,1), by='day', length=365), format='%d-%m-%Y')), 500, replace = TRUE)

foreach(i = seq_along(Dates), .combine = rbind) %dopar% dmy(Dates[i])

Error in dmy(Dates[i]) : task 1 failed - "could not find function "dmy""

因此,我的问题是,除了查看错误以获取导出内容的线索外,是否有一种更优雅的方法可以事先知道要导出哪些对象,或者在运行
foreach
之前,是否有一种方法可以与所有从机共享全局环境?

无需像这样手动导出单个包函数。您可以将
.packages
参数用于
foreach
函数来加载所需的包,这样所有包函数都将可用于
%dopar%
表达式。

有一个
.packages
参数用于此。您介意详细说明吗?我尝试了(.packages()),它列出了附加的包。但是如何导出包的所有对象?我尝试了clusterExport(cl,c(“库(lubridate)”)和clusterExport(cl,c(“lubridate”))但是没有用。我指的是
foreach
.packages
参数,而不是
.packages
函数。哦,好的。我现在明白了。你想把它作为一个答案,这样我就可以接受了吗?这对2.14.0中的新并行库(例如Parlappy)有效吗?@mindles.panda:您应该能够使用
clusterEvalQ(cl,library(packageName))
在每个集群节点上加载包。谢谢,我刚刚在parlappy的匿名函数中放置了一个
library(packageName)
clusterExport(cl, c("dmy"))