22

我一直在寻找并行使用 ddply() 的简单工作示例。我已经安装了“foreach”包,但是当我调用 ddply(.parallel = TRUE) 时,我收到“未注册并行后端”的警告)

有人可以提供一个简单的并行使用 ddply 的工作示例吗?

4

4 回答 4

18

这是一个简单的工作示例:

> df <- data.frame(val=1:10, ind=c(rep(2, 5), rep(3, 5)))
> library(doSNOW)
> registerDoSNOW(makeCluster(2, type = "SOCK"))
> system.time(print(ddply(df, .(ind), function(x) { Sys.sleep(2); sum(x) }, .parallel=FALSE)))
  ind V1
1   2 25
2   3 55
   user  system elapsed 
   0.00    0.00    4.01 
> system.time(print(ddply(df, .(ind), function(x) { Sys.sleep(2); sum(x) }, .parallel=TRUE)))
  ind V1
1   2 25
2   3 55
   user  system elapsed 
   0.02    0.00    2.02 
于 2013-01-23T20:20:42.457 回答
6

您是否注册了并行后端foreach

foreach将其与plyr.

于 2011-07-21T17:33:29.370 回答
6

答:我一直在与 Hadley 沟通,近期内没有修复此错误的计划。任何人都可以尝试修复本身。以下是我从哈德利那里得到的一些建议:

“在最简单的级别上相对容易 - 您只需将 .export 参数传递给 foreach。理想情况下,plyr 会自动确定要导出的内容,但同时修改 .parallel 以获取参数列表到 foreach ( “而不仅仅是 T/F) 将是一大步。从 llply 开始,如果你能让它工作,那么让所有其他功能也能工作是相当简单的。”

B. 我强烈推荐 snow 和 doSNOW 让并行 foreach 在 Windows 上工作。其他并行后端: 1. 不支持 Windows 2. 不能在 64 位 Windows 3 上工作。 应该可以在 Windows 上工作,但问题太多。snow/doSNOW 是唯一“开箱即用”的解决方案

C. 祝你好运!

于 2011-07-27T15:55:34.723 回答
4

在 Unix 环境中,您可以使用 doMC 包及其函数 registerDoMC()

> registerDoMC()
> example <- ddply(..., .parallel=TRUE)
于 2011-11-14T18:25:38.540 回答