使用大数据

马丁摩根
2015年2月3日

可扩展计算

  1. 高效的R.代码
  2. 迭代
  3. 限制
  4. 采样
  5. 并行评估

并行评估生物体

实验室

高效代码

将以下内容作为函数写入。用系统时间()探索这需要多长时间执行N从100到10000增加。使用完全相同的()Microbenchmark.比较替代方案F1()F2(), 和F3()对于这三种不同功能的正确性和性能。这些功能使用哪些策略?

f0 < - 函数(n){##效率低下!ANS < -  numeric()for(i在seq_len(n))ANS < -  C(ANS,EXP(I))ANS} F1 <函数(n){ANS < -  numeric(n)for(i在seq_len(n))ANS [[i]] < -  exp(i)ans} f2 <函数(n)sapply(seq_len(n),exp)f3 <函数(n)exp(seq_len(n))

平行睡觉

去睡觉1秒钟,然后返回一世。这需要8秒钟。

图书馆(Biocparallel)有趣< - 函数(i){sys.sleep(1)i} ##串行f0 < - 函数(n)lapply(seq_len(n),fun)##并行f1 < -  function(n)bppppply(SEQ_LEN(N),乐趣)

计数重叠 - 我们自己的版本

迭代文件:genomicfiles :: dreambybyield()

suppressPackageStartUpMessages({库(基因组)库(基因组)库(RSAMTools)库(TXDB.hsapiens.ucsc.hg19.knowngene)})产量< - #如何输入数据函数的下一个块(x,...){readgalignments(x)} map < - #到每个块函数(value,...,roi){olaps < -  sopeoverlaps(value,roi,type =“内部”,ignore.strand = true)count < -Tabulate(主题(OLAPS),主管长度(OLAP))符合inmes(计数,名称(ROI))}减少< - #如何组合映射的块`+`

改进:“产量厂”跟踪输入有多少录

exitingFactory < - #返回具有本地状态函数(){n_records < -  0l函数(x,...){aln < -  readgalignments(x)n_records <<  -  n_records + length(aln)消息(n_records)aln}}

感兴趣的区域,像BAM文件中的染色体命名。

Exbytx < -  Exonsbyens(Txdb.hsapiens.ucsc.hg19.knowngene,“Tx”)Map0 < -  read.delim(“〜/ Igv / genomes / hg19_alias.tab”,header = false,stringsasfactors = false)seqlevels(Exbytx,force = true)< -  setNames(Map0 $ V1,Map0 $ V2)

通过BAM文件迭代的函数

count1 < - 函数(filename,roi){message(文件名)##创建和打开BAM文件BF < -  BAMFILE(FILENAME,ExuctionSize = 1000000)DreambyByield(BF,EucketFactory(),Map,Defile,ROI = ROI)}

在行动中

filename < - “〜/ bam / srr1039508_sorted.bam”count < -  count1(filename,exbytx)

并行化

库(生物竞争)##所有BAM文件文件名< -  dir(“〜/ bam”,pattern =“bam $”,full = true)名称(文件名)< - 子(“_ sorted.bam”,“”,basename(文件名))##迭代计数< -  BPLAPPLY(FILENAMES,COUNT1,EXBYTX)计数< -  simpleify2ARRAY(计数)头(计数)

资源