使用R语言的parallel包调用多个线程加快数据处理进度
R语言里面做并行计算的包很多,如下所示:
install.packages(c(
'foreach',
'iterators',
'doMC',
'doParallel',
'doSNOW'
))
有意思的是我仍然是选择老牌r包,parallel;
使用方法非常简单, 就是 makeCluster 函数定义好需要并行计算的线程数量,然后之前的apply家族循环就区别在函数名字前面加上par的签字,比如 lapply就替换成为了 parLapply 函数。
最开始的代码是:
system.time(lapply(1:1000000, function(x){
sample(1:100,10)
}))
user system elapsed
7.105 0.268 7.380
lapply就替换成为了 parLapply 函数 之后的代码是;
library(parallel)
cl <- makeCluster(8)
system.time(parLapply(cl,1:1000000, function(x){
sample(1:100,10)
}))
实战举例:是使用ChIPseeker包对十万多个ChIP-seq的bed坐标文件进行注释,就自定义了函数 run_ChIPseeker,然后把全部的bed文件路径名字存储在 fs这个向量,然后就可以使用 parLapply 的模式,使用8个线程进行并行计算啦,代码如下所示:
library(parallel)
cl <- makeCluster(8)
source('../function.R')
parLapply(cl,fs,
function(bedPeaksFile){
source('../function.R')
run_ChIPseeker(bedPeaksFile,'human')
}) # lapply的并行版本
stopCluster(cl) # 关闭集群
值得注意的是,8个线程内部都需要定义 run_ChIPseeker 函数哦。
在我的Windows电脑里面,效果如下所示:
看懂这些代码,需要 有R语言基础哦:
生信基石之R语言
B站的10个小时教学视频务必看完,参考 GitHub 仓库存放的相关学习路线指导资料:https://github.com/jmzeng1314/R_bilibili ,可以参考一些优秀笔记,比如https://mubu.com/doc/2KUiSCfVsg
初级10 个题目:http://www.bio-info-trainee.com/3793.html 中级要求是:http://www.bio-info-trainee.com/3750.html 高级要求是完成20题:http://www.bio-info-trainee.com/3415.html 统计专题 30题:http://www.bio-info-trainee.com/4385.html 可视化专题30题:http://www.bio-info-trainee.com/4387.html