关于本站
人大经济论坛-经管之家:分享大学、考研、论文、会计、留学、数据、经济学、金融学、管理学、统计学、博弈论、统计年鉴、行业分析包括等相关资源。
经管之家是国内活跃的在线教育咨询平台!
获取电子版《CDA一级教材》
完整电子版已上线CDA网校,累计已有10万+在读~ 教材严格按考试大纲编写,适合CDA考生备考,也适合业务及数据分析岗位的从业者提升自我。
论文
- 毕业论文 | 写毕业论文
- 毕业论文 | 为毕业论文找思路
- 毕业论文 | 可以有时间好好写 ...
- 毕业论文 | 毕业论文如何选较 ...
- 毕业论文 | 毕业论文选题通过 ...
- 毕业论文 | 还有三人的毕业论 ...
- 毕业论文 | 毕业论文答辩过程 ...
- 毕业论文 | 本科毕业论文,wi ...
考研考博
- 考博 | 南大考博经济类资 ...
- 考博 | 考博英语10000词汇 ...
- 考博 | 如果复旦、南大这 ...
- 考博 | 有谁知道春招秋季 ...
- 考博 | 工作与考博?到底 ...
- 考博 | 考博应该如何选择 ...
- 考博 | 考博失败了
- 考博 | 考博考研英语作文 ...
TOP热门关键词
原文出处:http://www.r-bloggers.com/lang/chinese/1131用Parallel和foreach包玩转并行计算September26,2012By写长城的诗Thispostwaskindlycontributedby数据科学与R语言-gotheretocommentandtoreadthefullpost.htt ...
坛友互助群![]() |
扫码加入各岗位、行业、专业交流群![]() |
By 写长城的诗
| This post was kindly contributed by 数据科学与R语言 - go there to comment and to read the full post. |
http://4.bp.blogspot.com/-17whRDAaHBo/UGJgxGei0nI/AAAAAAAABMw/jCqLCLmaYU8/s320/lrg.jpg
众所周知,在大数据时代R语言有两个弱项,其中一个就是只能使用单线程计算。但是在2.14版本之后,R就内置了parallel包,强化了R的并行计算能力。parallel包实际上整合了之前已经比较成熟的snow包和multicore包。前者已经在之前的文章中介绍过了,而后者无法在windows下运行,所以也就先不管了。parallel包可以很容易的在计算集群上实施并行计算,在多个CPU核心的单机上,也能发挥并行计算的功能。我们今天就来探索一下parallel包在多核心单机上的使用。
parallel包的思路和lapply函数很相似,都是将输入数据分割、计算、整合结果。只不过并行计算是用到了不同的cpu来运算。下面的例子是解决欧拉问题的第14个问题。
# 并行计算euler14问题
# 自定义函数以返回原始数值和步数
func <- function(x) {
n = 1
raw <- x
while (x > 1) {
x <- ifelse(x%%2==0,x/2,3*x+1)
n = n + 1
}
return(c(raw,n))
}
library(parallel)
# 用system.time来返回计算所需时间
system.time({
x <- 1:1e6
cl <- makeCluster(4)# 初始化四核心集群
results <- parLapply(cl,x,func) # lapply的并行版本
res.df <- do.call('rbind',results) # 整合结果
stopCluster(cl) # 关闭集群
})
# 找到最大的步数对应的数字
res.df[which.max(res.df[,2),1
上例中关键的函数就是parLapply,其中三个参数分别是集群对象、输入参数和运算函数名。我们最后算出的结果是837799。
foreach包是revolutionanalytics公司贡献给R开源社区的一个包。它能使R中的并行计算更为方便。与sapply函数类似,foreach函数中的第一个参数是输入参数,%do%后面的对象表示运算函数,而.combine则表示运算结果的整合方式。 下面的例子即是用foreach来完成前面的同一个任务。如果要启用并行,则需要加载doParallel包,并将%do%改为%dopar%。这样一行代码就能方便的完成并行计算了。
library(foreach)
# 非并行计算方式,类似于sapply函数的功能
x <- foreach(x=1:1000,.combine='rbind') %do% func(x)
# 启用parallel作为foreach并行计算的后端
library(doParallel)
cl <- makeCluster(4)
registerDoParallel(cl)
# 并行计算方式
x <- foreach(x=1:1000,.combine='rbind') %dopar% func(x)
stopCluster(cl)
下面的例子是用foreach函数来进行随机森林的并行计算。我们一共要生成十万个树来组合成一个随机森林,每个核心负责生成两万五千个树。最后用combine进行组合。
# 随机森林的并行计算
library(randomForest)
cl <- makeCluster(4)
registerDoParallel(cl)
rf <- foreach(ntree=rep(25000, 4),
.combine=combine,
.packages='randomForest') %dopar%
randomForest(Species~., data=iris, ntree=ntree)
stopCluster(cl)
并行不仅可以在建模时进行,也可以在数据整理阶段进行。之前我们提到过的plyr包也可以进行并行,前提是加载了foreach包,并且参数.parallel设置为TURE。当然不是所有的任务都能并行计算,而且并行计算前你需要改写你的代码。
参考资料:
http://stat.ethz.ch/R-manual/R-devel/library/parallel/doc/parallel.pdf
http://cran.r-project.org/web/packages/foreach/vignettes/foreach.pdf
http://cran.r-project.org/web/packages/doParallel/vignettes/gettingstartedParallel.pdfhttp://file:///Y:/study!!/R%20language/%E5%B9%B6%E8%A1%8C%E8%AE%A1%E7%AE%97/%E7%94%A8Parallel%E5%92%8Cforeach%E5%8C%85%E7%8E%A9%E8%BD%AC%E5%B9%B6%E8%A1%8C%E8%AE%A1%E7%AE%97%20%20%20R%20blogs%20%20%20lang_files/486244449122404425-4015526432442517184
Tags: 并行计算, 随机森林
扫码或添加微信号:坛友素质互助


「经管之家」APP:经管人学习、答疑、交友,就上经管之家!
免流量费下载资料----在经管之家app可以下载论坛上的所有资源,并且不额外收取下载高峰期的论坛币。
涵盖所有经管领域的优秀内容----覆盖经济、管理、金融投资、计量统计、数据分析、国贸、财会等专业的学习宝库,各类资料应有尽有。
来自五湖四海的经管达人----已经有上千万的经管人来到这里,你可以找到任何学科方向、有共同话题的朋友。
经管之家(原人大经济论坛),跨越高校的围墙,带你走进经管知识的新世界。
扫描下方二维码下载并注册APP
免流量费下载资料----在经管之家app可以下载论坛上的所有资源,并且不额外收取下载高峰期的论坛币。
涵盖所有经管领域的优秀内容----覆盖经济、管理、金融投资、计量统计、数据分析、国贸、财会等专业的学习宝库,各类资料应有尽有。
来自五湖四海的经管达人----已经有上千万的经管人来到这里,你可以找到任何学科方向、有共同话题的朋友。
经管之家(原人大经济论坛),跨越高校的围墙,带你走进经管知识的新世界。
扫描下方二维码下载并注册APP
您可能感兴趣的文章
人气文章
1.凡人大经济论坛-经管之家转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。




