第八届中国R语言(广州)会议
R语言并行计算实战
游皓麟
日期:2015-5-23 (广州)
from
Data Energy
cador@sina.com
http://blog.csdn.net/u013524655
③ 并行计算平台Yiyou
• 简要介绍
• 系统架构
• 多级分发
• 算法案例
• 参考资料
• Q&A
目 录
① 从向量化计算说起
• 向量
• 矩阵
• apply族
• 案例
② R语言常见并行计算技术
• 概览
• multicore
• snow
• snowfall
• doParallel
• doSNOW
• parallel
• RHadoop
• 总结
从向量化计算说起 - 向量
向量是R语言最基本的数据类型,它的下标从1开始,正的下标用于提取向量中对应的元素,负的下标则去掉
向量中对应的元素,通过逻辑运算提出向量中满足条件的元素
创建向量
(1)使用c(1,2,5,…)创建一个微量(基本操作,元素数据类型一致)
(2)使用rep(0,10)创建一个向量(第一参数可以是数值,也可以是因子或向量,第二参数表示倍数)
(3)使用seq(1:10)创建一个向量(创建一个序列向量,如通过如下语句创建一个日期序列)
字符向量操作
微信用户A=c("lucy","cador","david") QQ用户B=c("cador","pork","bruce")
(1) A与B的交集= intersect(A,B) =c("cador")
(2) A与B的并集= union(A,B)=c("lucy","cador","david","pork","bruce")
(3) A与B的差集= setdiff(A,B)=c("lucy","david")
数值向量操作
sum(xx)---和
max(xx)---最大值
min(xx)---最小值
range(xx)---取值范围
mean(xx)---平均值
var(xx)---方差
sort(xx)---从小到大排序
rev(xx)---反排列
从向量化计算说起 - 矩阵
矩阵是一个二维向量,矩阵中的每个元素都具有相同的类型(数值型、字符型或逻辑型)。在矩阵中可执行
更复杂的向量化计算
创建一个矩阵
(1)直接使用matrix函数
(2)将数据框转换为矩阵
矩阵的转置
使用t函数对矩阵进行转置,通常用于对属
性进行分类,按记录标准化等场景
矩阵的合并
(1)按行增加记录
(2)按列增加属性
矩阵的乘法
为不同的研究对象计算综合得分
(1)对应相乘,再求和
(2)使用%*%运算,提取对角线上的值
从向量化计算说起 - apply族
R语言的apply族函数为数组、矩阵、列表等数据类型的操作提供了很多方便,不仅代码简洁,运行效率也是
很高的。下面举例说明常见的apply 、lapply、sapply、tapply、mapply函数的用法
• apply,抽取matrix或data.frame的每行或每列,作为vector执行指定FUN
举例:apply(matrix(runif(10,0,1),nrow=5),1,sum)
• lapply,输入一个list,经过函数处理后,返回一个list对象。
举例:out=lapply(1:10,function(x){return(x^3)})
• sapply,相比lapply更加灵活,是lapply函数的包装版
举例:out=sapply(matrix(1:4,nrow=2),function(x){return(x)},simplify=T)
• tapply,把vector根据INDEX(比如因子)分组,对每一组执行FUN
举例:
students=as.factor(c("lucy","lucy","bruce","bruce","bruce"))
scores=c(78,92,87,85,73)
计算students的平均得分
tapply(scores,students,mean)
• mapply,是sapply的多变量版本。将对…中的每个参数运行FUN函数,如有必要,参数将被循环
举例:mapply(rep, 1:8, 8:1)