R 在Windows上并行使用ddply()的简单工作示例

R 在Windows上并行使用ddply()的简单工作示例,r,foreach,plyr,R,Foreach,Plyr,我一直在寻找一个并行使用ddply()的简单工作示例。我已经安装了“foreach”包,但是当我调用ddply(.parallel=TRUE)时,我得到一个警告:“没有并行后端注册”) 有人能提供一个简单的并行使用ddply的工作示例吗?您是否已将并行后端注册到foreach 在与plyrA一起使用foreach之前,您可能需要仔细阅读它的使用情况。我一直在与Hadley沟通,近期没有计划修复此错误。任何人都可以尝试修复本身。以下是我从哈德利那里得到的一些提示: “在最简单的层面上,这相对容易—

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


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

您是否已将并行后端注册到
foreach


在与
plyr
A一起使用
foreach
之前,您可能需要仔细阅读它的使用情况。我一直在与Hadley沟通,近期没有计划修复此错误。任何人都可以尝试修复本身。以下是我从哈德利那里得到的一些提示:

“在最简单的层面上,这相对容易——你只需要通过考试 .将参数导出到foreach。理想情况下,plyr会找出 自动导出,但同时修改。并行于 将参数列表作为foreach(而不仅仅是T/F)的参数 迈出了一大步。从llply开始,如果你能让它起作用,那就是 让所有其他功能也工作起来相当简单。”

我强烈推荐snow和doSNOW在Windows上使用并行foreach。其他平行后端为:1。不支持Windows 2。不在64位Windows 3上工作。应该可以在窗户上工作,但是太难了。 斯诺/多斯诺是唯一“开箱即用”的解决方案


祝你好运

在Unix环境中,可以使用doMC包及其函数registerDoMC()执行此操作

>registerDoMC()

>示例下面是一个简单的工作示例:

> 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 
df库(doSNOW) >registerDoSNOW(makeCluster(2,type=“SOCK”)) >系统时间(打印(ddply(df,.(ind),函数(x){Sys.sleep(2);sum(x)},.parallel=FALSE))) ind V1 1 2 25 2 3 55 用户系统运行时间 0.00 0.00 4.01 >系统时间(打印(ddply(df,.(ind),函数(x){Sys.sleep(2);sum(x)},.parallel=TRUE))) ind V1 1 2 25 2 3 55 用户系统运行时间 0.02 0.00 2.02
我查看了函数列表,但没能找到它。我也看了小插曲,但找不到术语“后端”或“注册”=)我希望有人能发布一个简单、完整的工作示例。@SFun28-您是否签出了小插曲(“gettingstartedMC”)?在我的标题中添加了“在Windows上”…在32位的实验性多核软件包上似乎是可能的,但是不能在64位上使用。除了Dirk的评论,我很喜欢使用snowfall软件包(如果你喜欢这类软件的话)。根据这篇文章,似乎下一版本的plyr中可能会有一个补丁。我已经给哈德利发了电子邮件来获取独家新闻:ddply现在支持这一点真是太好了。谢谢你把这个从墓地里挖出来@Shane在LinuxBox上运行它的指令会有所不同吗?问题是关于WINDOWS而不是Unix的。
> 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