參考:Huber W , Carey V J , Gentleman R , et al. Orchestrating high-throughput genomic analysis with Bioconductor[J]. Nature Methods, 2015, 12(2):115-121.
Orchestrating high-throughput genomic analysis with Bioconductor
使用Bioconductor進(jìn)行高通量基因組分析
Bioconductor是一個(gè)開(kāi)源的(open-source)、開(kāi)放開(kāi)發(fā)(open-development)的軟件項(xiàng)目(software project),用于分析和理解基因組學(xué)和分子生物學(xué)中的高通量數(shù)據(jù)。該項(xiàng)目旨在促進(jìn)跨學(xué)科(interdisciplinary)研究、協(xié)作(collaboration)和科學(xué)軟件的快速發(fā)展。基于統(tǒng)計(jì)編程語(yǔ)言R(statistical programming language R),Bioconductor包括934個(gè)能共同操作的包(interoperable packages),由一個(gè)龐大的、多樣化的科學(xué)家團(tuán)體(community of scientists)貢獻(xiàn)。Packages涵蓋了一系列生物信息和統(tǒng)計(jì)的應(yīng)用(bioinformatic and statistical applications)。他們經(jīng)過(guò)正式的初步審查和持續(xù)的自動(dòng)測(cè)試。 我們概述了潛在的(prospective)用戶和貢獻(xiàn)者。
生物技術(shù)的進(jìn)步不斷導(dǎo)致新類型的數(shù)據(jù),數(shù)據(jù)集的體積、分辨率和多樣性(volume, resolution and diversity)迅速增加。這保證了我們對(duì)生物系統(tǒng)和醫(yī)學(xué)的理解取得前所未有的進(jìn)展。然而,數(shù)據(jù)的復(fù)雜性和體積(complexity and volume)也挑戰(zhàn)了科學(xué)家分析它們的能力。應(yīng)對(duì)這一挑戰(zhàn)需要不斷改進(jìn)分析工具和相關(guān)軟件工程。
Bioconductor提供核心數(shù)據(jù)結(jié)構(gòu)和方法,在R項(xiàng)目(R project)提供的豐富的統(tǒng)計(jì)編程環(huán)境背景下,使高通量數(shù)據(jù)的基因組規(guī)模的分析成為可能。它支持多種類型的高通量測(cè)序數(shù)據(jù)(包括DNA、RNA、染色質(zhì)免疫沉淀、Hi-C、甲基和核糖體譜分析)和相關(guān)的注釋資源;包含成熟的微陣列(microarray)分析設(shè)施;涵蓋蛋白質(zhì)組學(xué)、代謝組學(xué)、流式細(xì)胞術(shù)、定量成像、化學(xué)和其他高通量數(shù)據(jù)。Bioconductor可以快速創(chuàng)建工作流程,將多種數(shù)據(jù)類型和工具結(jié)合起來(lái),在從數(shù)據(jù)生成到發(fā)布的項(xiàng)目所有階段進(jìn)行統(tǒng)計(jì)推斷、回歸、網(wǎng)絡(luò)分析、機(jī)器學(xué)習(xí)和可視化。
Bioconductor也是一種靈活的軟件工程環(huán)境,可以開(kāi)發(fā)所需的工具,為用戶提供高效學(xué)習(xí)和生產(chǎn)性工作的框架。Bioconductor的基礎(chǔ)及其與實(shí)驗(yàn)技術(shù)的快速協(xié)同進(jìn)化基于兩個(gè)激勵(lì)原則。
首先是提供令人信服的(compelling)用戶體驗(yàn)(user experience)。 Bioconductor文件(documentation)有三個(gè)層次:記錄跨越多個(gè)工具的完整分析的工作流程(workflows);提供記敘了特定包預(yù)期用途(intended uses)說(shuō)明的軟件包插圖(package vignettes),包括詳細(xì)的可執(zhí)行代碼(executable code)示例;以及功能手冊(cè)頁(yè)(function manual pages),精確描述所有輸入和輸出以及工作示例。在許多情況下,用戶最終成為開(kāi)發(fā)人員,將自己的算法和方法提供給其他人。
第二,支持活躍和開(kāi)放的科學(xué)界開(kāi)發(fā)和分配(developing and distributing)生物信息學(xué)和計(jì)算生物學(xué)中的算法和軟件。支持包括關(guān)于軟件開(kāi)發(fā)和文檔的指導(dǎo)和培訓(xùn),以及使用適當(dāng)?shù)木幊谭独╬rogramming paradigms),如單元測(cè)試和明智的優(yōu)化。一個(gè)主要目標(biāo)是由科學(xué)領(lǐng)域?qū)<曳謩e開(kāi)發(fā)共同操作的軟件組件。在某種程度上,我們通過(guò)促進(jìn)使用通用數(shù)據(jù)結(jié)構(gòu)(common data structures)來(lái)實(shí)現(xiàn)這一點(diǎn),這些結(jié)構(gòu)使工作流程能夠整合多個(gè)數(shù)據(jù)類型和學(xué)科。為了促進(jìn)研究和創(chuàng)新,我們使用了一種高級(jí)編程語(yǔ)言(high-level programming language)。這種選擇產(chǎn)生了快速成型、創(chuàng)造力、靈活性和可重現(xiàn)性(rapid prototyping, creativity, flexibility and reproducibility),這是無(wú)論點(diǎn)擊軟件(point-and-click software)還是通用編程語(yǔ)言(general-purpose programming language)都不能實(shí)現(xiàn)的。我們已經(jīng)接受了R,因?yàn)樗目茖W(xué)和統(tǒng)計(jì)計(jì)算能力,它的圖形設(shè)施和方便的解釋語(yǔ)言。還與低級(jí)語(yǔ)言(low-level languages)相聯(lián)系,包括用于計(jì)算密集型操作的c和c++、用于與企業(yè)軟件集成的java和用于交互式基于Web的應(yīng)用程序和報(bào)告的javascript。
The user perspective? 用戶視角
Bioconductor用戶群體龐大而國(guó)際化(表1)。用戶以不同的方式從項(xiàng)目中受益。 一個(gè)典型的與Bioconductor相遇開(kāi)始于一個(gè)特定的科學(xué)需要,例如,從RNA-seq實(shí)驗(yàn)分析差異基因表達(dá)。用戶識(shí)別合適的工作流程文檔(identifies the appropriate documented workflow),并且由于工作流程包含功能代碼(functioning code),用戶運(yùn)行一個(gè)簡(jiǎn)單的命令來(lái)安裝所需的包并在本地復(fù)制分析。從那里,她開(kāi)始調(diào)整工作流程以適應(yīng)她的特定問(wèn)題。為了此目的,還提供了其他文件,如包的小插圖和手冊(cè)頁(yè)(package vignettes and manual pages)。她可以加載具有額外功能的另外的包(further packages)。當(dāng)需要幫助時(shí),用戶可以向支持論壇詢問(wèn)軟件和基礎(chǔ)科學(xué),她可以參加培訓(xùn)課程和會(huì)議。 一些用戶從使用到開(kāi)發(fā)軟件轉(zhuǎn)變,Bioconductor鼓勵(lì)這種轉(zhuǎn)變。

Case study: high-throughput sequencing data analysis.? 案例研究:高通量測(cè)序數(shù)據(jù)分析
對(duì)大規(guī)模RNA或DNA測(cè)序數(shù)據(jù)的分析通常從將reads比對(duì)(aligning reads)到參考基因組開(kāi)始,然后解釋比對(duì)模式(interpretation of the alignment patterns)。比對(duì)(Alignment)由多種工具處理,其輸出通常作為BAM文件傳遞。Bioconductor包Rsamtools和GenomicAlignments為BAM文件數(shù)據(jù)的導(dǎo)入和操作(importing and manipulating)提供了一個(gè)靈活的接口,例如用于質(zhì)量評(píng)估、可視化、事件檢測(cè)和概括(quality assessment, visualization, event detection and summarization)。
在這種分析中感興趣的區(qū)域是基因、轉(zhuǎn)錄本、增強(qiáng)子或許多其他類型的序列區(qū)間(sequence intervals),可以通過(guò)它們的基因組坐標(biāo)(genomic coordinates)來(lái)識(shí)別。Bioconductor支持用“Ranges”基礎(chǔ)設(shè)施(infrastructure)表示和分析基因組區(qū)間,包括數(shù)據(jù)結(jié)構(gòu)、算法和實(shí)用程序,包括算法函數(shù)、集合操作和概括(圖1)。它由幾個(gè)包組成,包括IRanges, GenomicRanges, GenomicAlignments, GenomicFeatures, VariantAnnotation and rtracklayer。這些包經(jīng)常更新以獲得功能、性能和可用性。Ranges基礎(chǔ)設(shè)施的設(shè)計(jì)是為了提供方便最終用戶(end users)分析數(shù)據(jù)的工具,同時(shí)保持靈活性,作為開(kāi)發(fā)更復(fù)雜和專門的軟件的基礎(chǔ)。我們已經(jīng)正式化了數(shù)據(jù)結(jié)構(gòu),使它們能夠?qū)崿F(xiàn)互操作性(interoperability),但我們還允許額外的、不太正式化的用戶定義數(shù)據(jù)成分(user-defined data components),例如應(yīng)用程序定義的注釋(application-defined annotation),從而使它們能夠適應(yīng)特定的案例。
工作流程可能因調(diào)查的具體目標(biāo)而大不相同,但一個(gè)共同的模式是將數(shù)據(jù)減少到一組定義的范圍(a defined set of ranges),即每個(gè)位點(diǎn)的比對(duì)(the alignments at each of the sites)的定量和定性匯總(in terms of quantitative and qualitative summaries)。例子包括檢測(cè)染色質(zhì)免疫共沉淀測(cè)序(chromatin immunoprecipitation–sequencing)中的覆蓋峰或濃度(coverage peaks),計(jì)數(shù)與每個(gè)轉(zhuǎn)錄本或外顯子(RNA-seq)匹配的cDNA片段的數(shù)量,并識(shí)別DNA序列變異(DNA-seq)。這樣的匯總可以存儲(chǔ)在GenomicRanges類的實(shí)例中(an instance of the class GenomicRanges)。

圖1. 范圍函數(shù)(Ranges algebra)的使用示例。一個(gè)Granges對(duì)象,g(頂部)表示一個(gè)基因的兩個(gè)轉(zhuǎn)錄本亞型(transcript isoforms),每個(gè)亞型有兩個(gè)外顯子。未剪接轉(zhuǎn)錄本的坐標(biāo)與函數(shù)range(g)一致。計(jì)算基因區(qū)域包括將基因模型壓縮到其組成外顯子中,并將其減少到不重疊的范圍,reduce(unlist(g))。定義不相交bin的范圍在計(jì)數(shù)操作中是有用的,disjoin(unlist(g))。假定的啟動(dòng)子范圍是利用鏈感知的范圍擴(kuò)展(strand-aware range extension),flank(range(g), width = 100)?;静僮骺梢越M合成簡(jiǎn)潔的執(zhí)行查詢,例如psetdiff(range(g), g) 計(jì)算內(nèi)含子范圍。
Coordinated analysis of multiple samples.? 多個(gè)樣本的協(xié)調(diào)分析
為了便于對(duì)多個(gè)樣本(multiple samples)的實(shí)驗(yàn)和研究進(jìn)行分析,Bioconductor定義了SummarizedExperiment類。計(jì)算的范圍匯總(computed summaries for the ranges)被編譯成一個(gè)矩形陣列(rectangular array),其行對(duì)應(yīng)于范圍(ranges),其列對(duì)應(yīng)于不同的樣本(圖2)。對(duì)于一個(gè)典型的實(shí)驗(yàn),可以有數(shù)萬(wàn)到數(shù)百萬(wàn)的范圍和從少數(shù)到數(shù)百個(gè)樣本。數(shù)組元素(array elements)不需要是單個(gè)數(shù)字:匯總(summaries)可以是多元的。
SummarizedExperiment class還將metadata存儲(chǔ)在行和列上。樣本的metadata通常包括實(shí)驗(yàn)或觀察協(xié)變量(covariates)以及技術(shù)信息,如處理日期或批次、文件路徑等。行的metadata包括每個(gè)特征(feature)的開(kāi)始和結(jié)束坐標(biāo)以及包含聚合物(polymer)的標(biāo)識(shí)符(identifier),例如染色體名稱??梢圆迦脒M(jìn)一步的信息,如基因或外顯子標(biāo)識(shí)符(identifiers)、對(duì)外部數(shù)據(jù)庫(kù)的引用(references to external databases)、試劑(reagents)、該區(qū)域的功能分類(例如,來(lái)自Encyclopedia of DNA Elements (ENCODE))或遺傳關(guān)聯(lián)(genetic associations)(例如,來(lái)自全基因組關(guān)聯(lián)研究、罕見(jiàn)疾病研究或癌癥遺傳學(xué))。行的metadata有助于綜合分析,例如,當(dāng)根據(jù)感興趣的基因組區(qū)域的重疊匹配兩個(gè)實(shí)驗(yàn)時(shí)。metadata與數(shù)據(jù)的緊密耦合減少了在重新排序或子集操作中發(fā)生文字錯(cuò)誤的機(jī)會(huì)。

圖2. 綜合的數(shù)據(jù)容器SummarizedExperiment。它的實(shí)驗(yàn)組成(assays component)是一個(gè)或幾個(gè)相等維度的行和列(equivalent row and column dimensions)的矩形陣列(rectangular arrays)。行對(duì)應(yīng)于特征(features),列對(duì)應(yīng)于樣本(samples)。rowData成分存儲(chǔ)有關(guān)特征的metadata,包括它們的基因組范圍。colData成分跟蹤(keeps track of)樣本水平協(xié)變量(covariate)數(shù)據(jù)。exptData成分包含實(shí)驗(yàn)水平信息,包括MIAME(微陣列實(shí)驗(yàn)的最小信息)結(jié)構(gòu)的metadata。R表達(dá)式舉例說(shuō)明了怎樣訪問(wèn)組件。例如,只要記錄了這些metadata,rowData(se)$entrezId返回特征的NCBI Entrez基因標(biāo)識(shí)符,se$tissue返回樣本的組織描述?;赗ange的操作,如%in%,作用于rowData,以返回一個(gè)邏輯向量,該邏輯向量選擇位于數(shù)據(jù)對(duì)象CNVs指定的區(qū)域內(nèi)的特征。與bracket operator一起,這種表達(dá)可以用來(lái)將一個(gè)SummarizedExperiment劃分子集到一組集中的基因和組織中進(jìn)行下游分析。
Annotation packages and resources.? 注釋包和資源
參考基因組,基因組區(qū)域和相關(guān)基因產(chǎn)物(轉(zhuǎn)錄本或蛋白質(zhì))的注釋,以及分子標(biāo)識(shí)符之間的映射,對(duì)于將統(tǒng)計(jì)和生物信息學(xué)結(jié)果納入生物學(xué)角度是必不可少的。Bioconductor注釋數(shù)據(jù)存儲(chǔ)庫(kù)(annotation data repository)部分地滿足了這些需求,它提供了894個(gè)預(yù)先構(gòu)建的標(biāo)準(zhǔn)化注釋包,用于普通模式生物以及其他生物。每個(gè)包都使用定義的Bioconductor類(defined Bioconductor classes)通過(guò)標(biāo)準(zhǔn)接口(standard interface)顯示其數(shù)據(jù),包括來(lái)自UCSC(加州大學(xué)圣克魯斯分校)或BioMart annotations的全基因組序列(whole-genome sequences (BSgenome))、基因模型(gene model)或轉(zhuǎn)錄本數(shù)據(jù)庫(kù)(transcript databases (TxDb))的類,以及來(lái)自美國(guó)國(guó)家生物技術(shù)信息中心(US National Center for Biotechnology Information, or NCBI (org))的標(biāo)識(shí)符交叉引用(identifier cross-references)。還有一些設(shè)施供用戶創(chuàng)建自己的注釋包。
AnnotationHub資源提供了對(duì)來(lái)自Ensembl, ENCODE, dbSNP, UCSC和其他來(lái)源獲得的10000多個(gè)基因組規(guī)模的分析和注釋數(shù)據(jù)集的隨時(shí)訪問(wèn)(ready access),并以易于訪問(wèn)的格式發(fā)布(例如,適當(dāng)?shù)腞anges兼容)。 Bioconductor還支持直接訪問(wèn)底層文件格式,如GTF、2bit或索引的FASTA。
Bioconductor還提供通過(guò)其應(yīng)用程序編程接口(application programming interfaces)直接訪問(wèn)在線資源的工具。 當(dāng)一個(gè)資源沒(méi)有在注釋包中表示時(shí),或者當(dāng)需要非常最新版本的數(shù)據(jù)時(shí),這可能是有價(jià)值的。rtracklayer軟件包訪問(wèn)UCSC基因組瀏覽器的表和跟蹤(tables and tracks),biomaRt軟件包支持對(duì)Ensembl, UniProt, COSMIC和相關(guān)資源的細(xì)致的(fine-grained)在線收集。許多額外的包訪問(wèn)Web資源,例如KEGGREST, PSICQUIC and Uniprot.ws。
Experiment data packaging and access.? 實(shí)驗(yàn)數(shù)據(jù)包裝和訪問(wèn)
Bioconductor實(shí)驗(yàn)數(shù)據(jù)存儲(chǔ)庫(kù)目前包含224個(gè)包。實(shí)驗(yàn)數(shù)據(jù)包具有重要的作用,例如演示方法的示例數(shù)據(jù)集;有些可以用于標(biāo)桿學(xué)習(xí)(benchmarking)和比較方法,有些是對(duì)科學(xué)論文中報(bào)告的分析的可重復(fù)描述(reproducible descriptions)(例如,Hiiragi2013包的數(shù)據(jù)和片段復(fù)制了最近報(bào)道的小鼠胚胎中單個(gè)細(xì)胞的轉(zhuǎn)錄組分析)。已發(fā)表的實(shí)驗(yàn)數(shù)據(jù)存檔(Archives)可以使用GEOquery, ArrayExpress and SRAdb軟件包來(lái)獲取。
Integrative analysis.? 綜合分析
高通量檢測(cè),如測(cè)序、流式細(xì)胞術(shù)和質(zhì)譜繼續(xù)降低成本和提高質(zhì)量。由同一組樣品的幾種實(shí)驗(yàn)組成的分析越來(lái)越普遍。對(duì)多種數(shù)據(jù)類型的綜合分析可能是基因組數(shù)據(jù)分析中最不可標(biāo)準(zhǔn)化的任務(wù)(the least standardizable task),其中最明顯的是需要一個(gè)高級(jí)別語(yǔ)言(如R)靈活工作環(huán)境。
多種實(shí)驗(yàn)的綜合分析通常依賴于通過(guò)基因組定位或注釋進(jìn)行連接。這包括將基因組位置與轉(zhuǎn)錄本和蛋白質(zhì)序列、在相同途徑或過(guò)程中發(fā)揮作用的其他基因產(chǎn)物蛋白質(zhì)、以及許多其他可能的關(guān)聯(lián)聯(lián)系起來(lái)。多種相關(guān)的數(shù)據(jù)類型和注釋的組合計(jì)算是綜合基因組分析(integrative genomic analysis)的本質(zhì)。
要進(jìn)行這種分析,必須使用標(biāo)識(shí)符、參考基因組、基因模型、坐標(biāo)系統(tǒng)等兼容系統(tǒng)。例如,RNA編輯位點(diǎn)的識(shí)別需要用戶對(duì)個(gè)體有一個(gè)準(zhǔn)確的基因型,以及與該基因型比對(duì)的RNA-seq reads,而來(lái)自DNA-seq實(shí)驗(yàn)的變異識(shí)別不僅應(yīng)該保留關(guān)于比對(duì)軟件的信息,而且還應(yīng)該保留所使用的基因組的精確版本。Bioconductor軟件旨在使跟蹤這些問(wèn)題簡(jiǎn)單和自動(dòng)。這也有助于其他分析人員確定是否以及如何將特定處理的數(shù)據(jù)集與其他數(shù)據(jù)集整合。
Visualization? 可視化
可視化是基因組數(shù)據(jù)分析的關(guān)鍵。 我們區(qū)分了三種主要場(chǎng)景,每種場(chǎng)景都有不同的需求。第一種是“發(fā)現(xiàn)模式”(discovery mode)中的快速交互數(shù)據(jù)探索。第二種是研究合作者對(duì)初步結(jié)果(initial results)的記錄、報(bào)告和討論(recording, reporting and discussion),通常通過(guò)具有相互關(guān)聯(lián)的圖(interlinked plots)和提供交互功能的工具提示(tool-tips providing interactive functionality)的網(wǎng)頁(yè)進(jìn)行。腳本通常與文檔一起提供,以記錄所做的事情。 第三是科學(xué)出版物(scientific publications)和報(bào)告(presentations)的圖形,以直觀和有吸引力(intuitive and attractive)的形式顯示基本信息。R環(huán)境為所有這些類型的可視化提供了強(qiáng)大的支持——使用各種R圖形設(shè)備(R graphics devices)或提供更多交互的基于HTML5的可視化接口(HTML5-based visualization interfaces)——Bioconductor充分利用這些設(shè)施。在實(shí)踐中,可視化通常要求用戶對(duì)數(shù)據(jù)進(jìn)行計(jì)算,例如數(shù)據(jù)轉(zhuǎn)換和過(guò)濾、概括和降維,或?qū)y(tǒng)計(jì)模型進(jìn)行擬合。所需的表現(xiàn)力(expressivity)并不總是很容易在點(diǎn)擊界面(point-and-click interface)中實(shí)現(xiàn),而是很容易在高級(jí)編程語(yǔ)言中實(shí)現(xiàn)。 此外,許多可視化,如熱圖或主成分分析圖,都與數(shù)學(xué)和統(tǒng)計(jì)模型聯(lián)系在一起——因此需要訪問(wèn)科學(xué)計(jì)算庫(kù)。
基因組學(xué)特異性可視化類型是沿著基因組坐標(biāo)(genomic coordinates)繪制的。有幾個(gè)軟件包創(chuàng)建了有吸引力的沿基因組數(shù)據(jù)軌道(along-genome data tracks)展示,包括Gviz和ggbio(圖3)。這些包直接操作在常見(jiàn)的Bioconductor數(shù)據(jù)結(jié)構(gòu)上,從而與現(xiàn)有的數(shù)據(jù)操作(available data manipulation)和建模功能(modeling functionality)整合(integrate)。這種可視化的一個(gè)基本操作是用基因組區(qū)域(genomic regions)計(jì)算,而biovizBase包提供了范圍基礎(chǔ)設(shè)施(Ranges infrastructure)和繪圖包之間的橋梁。 R和基因組瀏覽器(genome browsers)之間的直接通信由rtracklayer(用于UCSC基因組瀏覽器)和SRAdb(用于Integrative Genomics Viewer)包實(shí)現(xiàn)。
基因組數(shù)據(jù)集的大小有時(shí)超過(guò)了可以用標(biāo)準(zhǔn)內(nèi)存數(shù)據(jù)模型(standard in-memory data models)來(lái)管理的數(shù)據(jù),然后高性能計(jì)算的工具開(kāi)始發(fā)揮作用。一個(gè)例子是使用rhdf5——一種HDF5大數(shù)據(jù)管理系統(tǒng)(HDF5 large data management system)(http://www.hdfgroup.org/hdf5)的接口——通過(guò)h5vc包將大的、基因組大小的數(shù)據(jù)立方體(data cubes)切成易于快速交互計(jì)算和可視化的塊(chunks)。ggbio和Gviz都對(duì)文件格式進(jìn)行范圍限制的查詢,包括bam、bgzip/tabix和bigwig,通過(guò)Rsamtools和rtracklayer快速集成來(lái)自特定基因組區(qū)域的多個(gè)文件的數(shù)據(jù)。

圖3. 沿基因組坐標(biāo)與ggbio的可視化。該圖顯示了來(lái)自小鼠造血干細(xì)胞(HSC)和四個(gè)多能祖細(xì)胞(MPP)的RNA-seq數(shù)據(jù)的基因Apoe。不相交的bin(中心)是從底部面板(panel)中顯示的四個(gè)轉(zhuǎn)錄本亞型(transcript isoforms)計(jì)算出來(lái)的。頂部面板的y軸顯示了用DEXSeq方法估計(jì)的相對(duì)外顯子使用系數(shù)(the relative exon usage coefficients)。檢測(cè)到的細(xì)胞組分之間差異使用的區(qū)域在中心面板中呈暗紅色。
Reproducible research? 重復(fù)性研究
追溯(retrace)在基因組學(xué)研究項(xiàng)目中執(zhí)行的計(jì)算步驟可能是令人驚訝的困難。Bioconductor的目標(biāo)之一是幫助科學(xué)家報(bào)告他們的分析,使第三方能夠準(zhǔn)確地重新計(jì)算(exact recreation)所有將輸入數(shù)據(jù)轉(zhuǎn)化為結(jié)果的計(jì)算,包括圖、表格和數(shù)字。該項(xiàng)目的貢獻(xiàn)包括強(qiáng)調(diào)讀寫(xiě)編程插圖(literate programming vignettes),BiocStyle和ReportingTools包,實(shí)驗(yàn)數(shù)據(jù)和注釋包的組裝以及所有先前發(fā)布的包的存檔和可用性。在更廣泛的R社區(qū)中的一些發(fā)展,包括knitr和rmarkdown軟件包以及集成開(kāi)發(fā)環(huán)境Rstudio,使得編寫(xiě)有吸引力的小片段變得很容易。除了傳統(tǒng)的交付格式pd f文件外,新一代的工具還允許使用html5設(shè)施進(jìn)行交互式可視化,包括“挖掘”(drill-down)來(lái)擴(kuò)展對(duì)特定細(xì)節(jié)的視圖、刻面(faceted)過(guò)濾和綜合的超鏈接。完全遠(yuǎn)程可重現(xiàn)性(remote reproducibility)仍然是一個(gè)具有挑戰(zhàn)性的問(wèn)題,特別是對(duì)于需要大量計(jì)算資源的計(jì)算,或通過(guò)短暫(transient)或限制訪問(wèn)(restricted access)(例如云)的基礎(chǔ)設(shè)施訪問(wèn)數(shù)據(jù)的計(jì)算。 然而,許多完全可復(fù)制的研究報(bào)告的例子已經(jīng)被Bioconductor報(bào)告了。
Alternative and complementary tools? 替代和補(bǔ)充工具
使用Bioconductor需要自愿用高級(jí)計(jì)算機(jī)語(yǔ)言修改和最終編寫(xiě)腳本,在不同的算法和軟件包之間做出明智的選擇,并學(xué)習(xí)足夠的R來(lái)完成不可避免的數(shù)據(jù)爭(zhēng)論和故障排除。存在替代和互補(bǔ)的工具;特別是,用戶可能準(zhǔn)備交換一些損失(trade some loss)靈活性、自動(dòng)化或功能,以便與軟件進(jìn)行更簡(jiǎn)單的交互,例如通過(guò)運(yùn)行單目的工具(single-purpose tools)或使用點(diǎn)擊接口(point-and-click interface)。
工作流和數(shù)據(jù)管理系統(tǒng),如Galaxy和IlluminaBasePace,為集合和部署易于使用的來(lái)自不同語(yǔ)言和框架的成分的分析流程(easy-touse analysis pipelines)提供了一種方法。IPython筆記本提供了一個(gè)有吸引力的交互式工作簿環(huán)境。 雖然它的起源是python編程語(yǔ)言,但它現(xiàn)在支持許多語(yǔ)言,包括R。在實(shí)踐中,許多用戶會(huì)發(fā)現(xiàn)一個(gè)對(duì)他們最有效的平臺(tái)組合。
The developer perspective? 開(kāi)發(fā)人員視角
The package ecosystem? 包的生態(tài)系統(tǒng)
Bioconductor的所有軟件都是以R包的形式發(fā)布(distributed)的。這簡(jiǎn)化了軟件的交付、使用和維護(hù),但給開(kāi)發(fā)人員帶來(lái)了負(fù)擔(dān)。他們需要學(xué)習(xí)如何編寫(xiě)R包,包括文檔和測(cè)試案例。
開(kāi)發(fā)人員不斷更新他們的包,以擴(kuò)展功能,提高性能,修復(fù)錯(cuò)誤和增強(qiáng)文檔。這些更改被引入到Bioconductor的開(kāi)發(fā)分支(development branch)中,并每6個(gè)月發(fā)布給最終用戶;使用中央的、公開(kāi)可讀的Subversion軟件存儲(chǔ)庫(kù)(central, publicly readable Subversion software repository)跟蹤更改,因此所有更改的詳細(xì)信息都是完全可訪問(wèn)的。同時(shí)(Simultaneously),R本身也在不斷變化,通常是圍繞性能增強(qiáng)和功能增加。由于這種動(dòng)態(tài)環(huán)境,所有包都要經(jīng)過(guò)日常測(cè)試程序(daily testing procedure)。 測(cè)試是完全自動(dòng)化的,并確保包文檔中的所有代碼示例以及進(jìn)一步的單元測(cè)試在沒(méi)有錯(cuò)誤的情況下運(yùn)行。 測(cè)試的順利完成,將會(huì)導(dǎo)致R包建成并提交公眾。
許多Bioconductor包有廣泛的代碼示例和測(cè)試,作者可以通過(guò)這些示例和測(cè)試確保它們的軟件保持功能,即使在組件上下游變化時(shí)也是如此。同樣重要的是保持文檔與代碼中的更改同步。 雖然測(cè)試系統(tǒng)對(duì)中央存儲(chǔ)庫(kù)和所有開(kāi)發(fā)人員都是很大的負(fù)擔(dān),但它提供了一定程度的軟件一致性和可用性(coherence and usability),這在具有多樣化和分布式開(kāi)發(fā)人員群體(distributed developer community)的軟件項(xiàng)目中是罕見(jiàn)的。當(dāng)然,存在限制:測(cè)試的范圍和嚴(yán)格性(the reach and stringency),超過(guò)所需的最小值,取決于包的作者。 自然遺傳學(xué)的一篇社論(an editorial in Nature Genetics)強(qiáng)調(diào)了存儲(chǔ)庫(kù)(repository)的質(zhì)量,其中列出了Comprehensive R Archive Network (CRAN)和Bioconductor,作為該期刊認(rèn)可的所有編程語(yǔ)言的唯一軟件存儲(chǔ)庫(kù)。
Interoperability? 協(xié)同工作能力
不同階段和不同類型分析的軟件組件(software components)之間的互操作性(Interoperability)對(duì)于Bioconductor的成功至關(guān)重要。 互操作性是通過(guò)定義通用數(shù)據(jù)結(jié)構(gòu)(common data structures)來(lái)建立的,包作者預(yù)計(jì)將使用這些數(shù)據(jù)結(jié)構(gòu)(表2)。在技術(shù)上,Bioconductor的公共數(shù)據(jù)結(jié)構(gòu)被實(shí)現(xiàn)為R語(yǔ)言的S4面向?qū)ο笙到y(tǒng)中的類。 以這種方式,包括封裝(encapsulation)、從實(shí)現(xiàn)中提取接口(abstraction of interface from implementation)、多態(tài)、繼承和反射(polymorphism, inheritance and reflection)在內(nèi)的有用的軟件概念是直接可用的。它允許核心任務(wù)的跨學(xué)科采用(be adopted across disciplines),如樣本數(shù)據(jù)和元數(shù)據(jù)的匹配,并為社區(qū)發(fā)展提供了基礎(chǔ)。
將這種表示(通用數(shù)據(jù)結(jié)構(gòu))與生物信息學(xué)中流行的替代品(popular alternatives in bioinformatics)進(jìn)行比較是有指導(dǎo)意義的:基于文件的數(shù)據(jù)格式約定(file-based data format conventions)和語(yǔ)言的原始數(shù)據(jù)結(jié)構(gòu)(primitive data structures),如矩陣或電子表格表。使用基于文件的格式,諸如取子集或數(shù)據(jù)轉(zhuǎn)換之類的操作可能是繁瑣和容易出錯(cuò)的,并且文件的序列化性質(zhì)(serialized nature)阻礙了需要對(duì)數(shù)據(jù)進(jìn)行全局視圖(a global view of the data)的操作。在這兩種情況下,有效性檢查(validity checking)和反思不能依賴于預(yù)先形成或標(biāo)準(zhǔn)化的支持,需要重新為每一項(xiàng)公約從零開(kāi)始(from scratch again)編程——或者完全缺失。一旦一個(gè)項(xiàng)目的數(shù)據(jù)分布在多個(gè)表或文件中,數(shù)據(jù)記錄的比對(duì)或標(biāo)識(shí)符的一致性就岌岌可危,互操作性由于不得不操縱分散的、松散協(xié)調(diào)的數(shù)據(jù)集(disperse, loosely coordinated data collections)而受到阻礙。

Shared infrastructure for distributed development? 分布式發(fā)展共享基礎(chǔ)設(shè)施
生物數(shù)據(jù)的分析依賴于參考資源,如基因組序列、基因模型、基因標(biāo)識(shí)和注釋以及其他基因組特征(genome sequences, gene models, identifiers and annotation of genes and other genomic features)。 項(xiàng)目提供這些資源的標(biāo)準(zhǔn)化R表示(Standardized R representations),以避免工作冗余(redundancy of efforts),并實(shí)現(xiàn)數(shù)據(jù)整合(data integration)。
開(kāi)發(fā)人員還受益于支持他們想要執(zhí)行的操作的基本軟件庫(kù)功能(fundamental software library functions)。 例如,43%的Bioconductor包直接或間接地使用了范圍基礎(chǔ)設(shè)施(Ranges infrastructure),近60%依賴于Biobase,70%以上依賴于BiocGenerics。通過(guò)使用共享基礎(chǔ)設(shè)施,開(kāi)發(fā)人員可以擺脫自己創(chuàng)建和維護(hù)這些組件的任務(wù),他們可以專注于自己獨(dú)特的特定領(lǐng)域的貢獻(xiàn)。
Merits of a high-level language? 高級(jí)語(yǔ)言的優(yōu)點(diǎn)
Functionality? 功能性
軟件工程是一個(gè)復(fù)雜的過(guò)程。 科學(xué)軟件的共同期望包括功能性、靈活性和穩(wěn)健性(functionality, flexibility and robustness)。在發(fā)展科學(xué)方法的早期階段,這些目標(biāo)應(yīng)該優(yōu)先考慮,過(guò)早地優(yōu)化(premature optimization)速度或其他硬件資源往往會(huì)分散注意力。因此,以R這樣的高級(jí)語(yǔ)言工作是一個(gè)快速有效的選擇。一旦正確的方法已經(jīng)解決,有足夠的時(shí)間擔(dān)心計(jì)算是否真的需要更快和瓶頸(bottleneck)在哪里。
Extensibility 延展性
R提供了操作數(shù)據(jù)的語(yǔ)法(syntax)。該語(yǔ)法可以很容易地映射到其他語(yǔ)言。一旦一個(gè)想法被審核和測(cè)試(vetted and tested),開(kāi)發(fā)人員可以使用其他語(yǔ)言(如c)中的關(guān)鍵代碼部分來(lái)提高性能。例如,范圍基礎(chǔ)設(shè)施(Ranges infrastructure)已經(jīng)經(jīng)歷了這個(gè)過(guò)程的許多迭代(iterations)。 或者,正如我們對(duì)Rsamtools包所做的那樣,R的外部語(yǔ)言接口(foreign language interfaces)可以被用來(lái)訪問(wèn)R內(nèi)建立的軟件庫(kù),這使得用R編寫(xiě)的高級(jí)代碼能夠無(wú)縫地使用SAMtools軟件的功能。
Reuse? 重新使用
通過(guò)與現(xiàn)有庫(kù)的接口重新使用軟件是Bioconductor的指導(dǎo)原則之一。 開(kāi)發(fā)好的軟件是困難和耗時(shí)的,如果完成一項(xiàng)任務(wù)已經(jīng)有一個(gè)經(jīng)過(guò)良好測(cè)試、良好支持的(well-tested, well-supported)實(shí)現(xiàn)(implementation)并具有合適的許可證(suitable license),我們鼓勵(lì)開(kāi)發(fā)人員在此基礎(chǔ)上進(jìn)行開(kāi)發(fā)。使用R的外部語(yǔ)言接口,他們可以調(diào)用安裝在系統(tǒng)其他地方的第三方軟件,或者他們可以用自己的Bioconductor包來(lái)包含和重新分發(fā)(include and redistribute)它。在R生態(tài)系統(tǒng)中,CRAN和Bioconductor存儲(chǔ)庫(kù)為開(kāi)發(fā)人員提供了對(duì)很多包的訪問(wèn)。它們支持快速發(fā)展,因?yàn)樗鼈兪菐缀醪毁M(fèi)吹灰之力就可以安裝和使用的單元,它們封裝了通常是多年努力集中(concentrate of years of effort)的訣竅(know-how)。
Performance and scalability? 性能和可伸縮性
有效地處理大數(shù)據(jù)需要將內(nèi)存和處理器的使用(memory and processor use)與可用資源(available resources)相匹配的編程實(shí)踐。 在向量或數(shù)組上操作時(shí)R是有效的,因此高性能和可伸縮算法(high-performing and scalable algorithms)使用的模式是將數(shù)據(jù)分割成可管理的塊(manageable chunks)并迭代它們(iterate over them)。一個(gè)例子是處理bam、fastq或VCF文件的函數(shù)的yieldSize參數(shù)。塊可以并行評(píng)估以獲得速度。BiocParallel軟件包幫助開(kāi)發(fā)人員在不同的計(jì)算環(huán)境中使用并行評(píng)估(employ parallel evaluation),同時(shí)使用戶免于(shielding)必須配置(configure)技術(shù)。它連接到后端(back ends),用于共享內(nèi)存和集群配置(cluster configurations)。GenomicFiles包將并行化(parallelization)與跨多個(gè)文件的分塊操作聯(lián)系起來(lái)。Bioconductor可作為虛擬機(jī)圖像(virtual machine image)配置給高性能計(jì)算在亞馬遜的彈性計(jì)算云(EC2)。
Bioconductor成功的一個(gè)關(guān)鍵方面是接觸用戶和開(kāi)發(fā)人員的能力(reach both users and developers)。對(duì)于用戶來(lái)說(shuō),有許多通用案例的包和工作流(packages and workflows),以及通過(guò)表格、可視化和報(bào)告有效地傳達(dá)結(jié)果的工具(facilities)。分析腳本很容易共享,從而促進(jìn)可重復(fù)的研究。對(duì)于想要?jiǎng)?chuàng)建和傳播新想法的開(kāi)發(fā)人員來(lái)說(shuō),有一個(gè)維護(hù)良好的基礎(chǔ)設(shè)施來(lái)進(jìn)行穩(wěn)健的代碼開(kāi)發(fā)。我們的社區(qū)努力平衡用戶需求,同時(shí)在基因組數(shù)據(jù)科學(xué)創(chuàng)新的前沿工作。我們受用戶和開(kāi)發(fā)人員的長(zhǎng)處和奉獻(xiàn)精神(dedication)的驅(qū)使,對(duì)項(xiàng)目的未來(lái)持樂(lè)觀態(tài)度。