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