使用R语言的parallel包调用多个线程加快数据处理进度

2021-10-12 12:08:13 浏览数 (1)

R语言里面做并行计算的包很多,如下所示:

代码语言:javascript复制
install.packages(c(
  'foreach',
  'iterators',
  'doMC',
  'doParallel',
  'doSNOW'
))

有意思的是我仍然是选择老牌r包,parallel;

使用方法非常简单, 就是 makeCluster 函数定义好需要并行计算的线程数量,然后之前的apply家族循环就区别在函数名字前面加上par的签字,比如 lapply就替换成为了 parLapply 函数。

最开始的代码是:

代码语言:javascript复制
system.time(lapply(1:1000000, function(x){
  sample(1:100,10)
}))

  user  system elapsed 
  7.105   0.268   7.380 

lapply就替换成为了 parLapply 函数 之后的代码是;

代码语言:javascript复制
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个线程进行并行计算啦,代码如下所示:

代码语言:javascript复制
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电脑里面,效果如下所示:

Windows电脑的R并行计算

看懂这些代码,需要 有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

再怎么强调生物信息学数据分析学习过程的计算机基础知识的打磨都不为过,我把它粗略的分成基于R语言的统计可视化,以及基于Linux的NGS数据处理

  • 生信分析人员如何系统入门R(2019更新版)
  • 生信分析人员如何系统入门Linux(2019更新版)

把R的知识点路线图搞定,如下:

  • 了解常量和变量概念
  • 加减乘除等运算(计算器)
  • 多种数据类型(数值,字符,逻辑,因子)
  • 多种数据结构(向量,矩阵,数组,数据框,列表)
  • 文件读取和写出
  • 简单统计可视化
  • 无限量函数学习

0 人点赞