马丁摩根
2015年2月3日
系统时间()
那rprof()
那Microbenchmark.打开()
,阅读块,关闭()
。屈服
争论RSAMTOOLS :: BAMFILE()
GenomicFiles :: DreambyByield()
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),乐趣)
迭代文件: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(计数)头(计数)