事先知道要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"))