【发布时间】:2012-05-28 03:05:20
【问题描述】:
我是使用并行包的新手,并已开始探索它们以加快我的一些工作。我经常遇到的一个烦恼是,当我没有clusterExport 相关的函数/变量时,foreach 命令会抛出问题。
示例
我知道下面的示例不一定需要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""
如您所见,有一个错误提示找不到dmy 函数。然后我必须继续添加以下内容:
clusterExport(cl, c("dmy"))
所以我的问题是,除了查看错误以获取有关导出什么的线索之外,是否有一种更优雅的方法可以预先知道要导出哪些对象,或者是否有一种方法可以在运行之前与所有从属共享全局环境foreach?
【问题讨论】:
-
有一个
.packages参数。 -
您介意详细说明一下吗?我试过 (.packages()) 它列出了附加的包。但是如何导出一个包的所有对象呢?我试过 clusterExport(cl, c("library(lubridate)")) 和 clusterExport(cl, c("lubridate")) 无济于事
-
抱歉,我指的是
foreach的.packages参数,而不是.packages函数。 -
哦,好的。我现在知道了。你想把它作为答案让我接受吗?
标签: r foreach parallel-processing