马丁摩根
2015年2月3日
系统时间()
那rprof()
那Microbenchmark.打开()
,阅读块,关闭()
。屈服
争论RSAMTOOLS :: BAMFILE()
RSAMTOOLS :: SCANBAMPARAM()
Shortread :: FastQSampler()
lapply()
- 滑稽的运作bpppply()
为了lapply()
-like函数,越来越多地被包装开发人员使用,以提供简单,标准的获得并行评估方式。2021欧洲杯体育投注开户将以下内容作为函数写入。用系统时间()
探索这需要多长时间执行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),乐趣)
感兴趣的区域,像BAM文件中的染色体命名。
库(TXDB.HSAPIENS.CUCSC.HG19.KNOKNOKNGENE)EXBYTX < - EXONSBIENS.UCSC.HG19.KNOKNGENE,“TX”)MAP0 < - READ.DELIM(“〜/ IGV / GENOMES / HG19_ALIAS.TAB”,标题= false,stringsasfactors = false)地图< - setNames(map0 $ v1,map0 $ v2)seqlevels(exbytx,force = true)< - 地图
通过BAM文件迭代的函数
count1 < - 函数(文件名,ROI){##创建和打开BAM文件BF < - BAMFILE(FILENAME,ExuctionSize = 1000000)打开(BF)##初始化变量n < - 0#读取的读数< - 整数(长度(ROI))#读取的读数重叠ROI名称(计数)< - 名称(ROI)##读取和数量的数据,直到完成重复{##输入ALN < - Readgalignments(BF)#输入下一块if(长度(aln)== 0)#停止条件中断n < - n +长度(aln)#我们如何做?消息(n)##重叠OLAP < - sopeoverlaps(ALN,ROI,Type =“内部”,Ignore.Strand = True)Count < - Count + Tabulate(主题(OLAP),主管长度(OLAP))} ##完成和返回结果关闭(bf)计数}
一种提升:基因组夫妇:: dreambyyield()
替换重复 {}
部分
suppresspackagestartupmessages({libraryfiricfiles)})##如何输入数据产量的下一个块< - 函数(x,...)readgalignments(x)} ##到每个块映射到哪些块映射< - 函数(值,......,ROI){OLAPS < - sopeoverlaps(值,ROI,Type =“内部”,Ignore.Strand = True)表格(主题(OLAP),主管长度(OLAP))} ##如何组合映射的块减少<- `+`reamenByyield(BF,产量,地图,减少,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(计数)头(计数)