您的位置: 河源资讯网 > 星座

一個簡單并行運行R的方法

发布时间:2019-11-08 23:28:19

一个简单并行运行R的方法

摘要:当耗尽内存的时候该如何在R中处理数据对此本文列举了一个很简单的方法,即.parallel由于在Plyr所包含的大部分功能中都有.parallel选项因此可用它来并行处理代码而最直观的效果是处理命令的时间大大缩短

也许很多人对R都是既爱又恨而人们常见的一个争论的主题就是并行计算,换一种更直接的说法:“当耗尽内存的时候我该如何在R中处理数据”不必担心,实际上在R中有一些简易的方式去使用并行包在这里也为大家介绍了一种:选择一个库首先做的事情是,你需要选择一个并行计算方案在这里以doMC和plyr作为测试组合配置环境当挑选完库之后,我们需要加载它们导入之后,我们实际上需要“告诉”doMC我们机器上有多少核是可以使用的要做到这一点可参考以下代码:library(plyr)library(doMC)doMC::registerDoMC(cores=32) # or however many cores you have access to如果你紧接着链接时,你会发现32核等同于“104个ec2计算单位”编者注:关于ec2可查看《Amazon EC2 常见问题》处理数据接下来,我们需要使用plyr来执行数据处理plyr将自动的使用多核这里你不需要用到doMC举个简单的例子来说,使用ddply函数来处理iris数据集,功能将暂停2秒由于iris有三种类型,所以该命令将花费6秒me(ddply(iris, .(Species), function(x) { eep(2) nrow(x)}))# user system elapsed# 0.005 0.001 6.016不过当你向ddply中添加.parallel = TRUE时,你发现了什么me(ddply(iris, .(Species), function(x) { eep(2) nrow(x)}, .parallel = TRUE))# user system elapsed# 0.018 0.015 2.031正如结果所显示的那样,时间缩短为2秒这意味着我们在同一时间内处理了iris的三个种类而在plyr中,几乎所有的功能都有.parallel选项接下来我们再用雅虎搜索市场广告竞价数据集来测试一下,读取它并通过phrase_id和account_id对它进行划分:headers - c("timestamp", "phrase_id", "account_id", "price", "auto")df - ble("./ydata-ysm-advertiser-bids-v1_t")colnames(df) - me(ddply(df, .(phrase_id, account_id), function(x) { ame(mean=mean(x$price, =T), median=median(x$price, =T)) nrow(x)}))# user system elapsed# 96.645 3.343 99.964当我们使用并行处理相同的代码时,我们可以看到只有48.5秒:me(ddply(df, .(phrase_id, account_id), function(x) { ame(mean=mean(x$price, =T), median=median(x$price, =T)) nrow(x)}, .parallel = TRUE))# user system elapsed# 94.228 16.267 48.553最后并行计算并没有想的那么困难和复杂,在R中保持并行的简单性可以让你不那么“头痛”这里也列举了其他好的并行处理R包的方法感兴趣的可以点击查看:parallelsnowdoParallelParallel R原文来自:yhathq

本文为CSDN编译整理,未经允许不得转载,如需转载请联系market#(#换成@)

生物谷药业
生物谷
治疗拉肚子方法
猜你会喜欢的
猜你会喜欢的