參考: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進行高通量基因組分析
Bioconductor是一個開源的(open-source)拍摇、開放開發(fā)(open-development)的軟件項目(software project),用于分析和理解基因組學(xué)和分子生物學(xué)中的高通量數(shù)據(jù)。該項目旨在促進跨學(xué)科(interdisciplinary)研究揽思、協(xié)作(collaboration)和科學(xué)軟件的快速發(fā)展让禀∥瑁基于統(tǒng)計編程語言R(statistical programming language R)饼酿,Bioconductor包括934個能共同操作的包(interoperable packages)运准,由一個龐大的吭敢、多樣化的科學(xué)家團體(community of scientists)貢獻碰凶。Packages涵蓋了一系列生物信息和統(tǒng)計的應(yīng)用(bioinformatic and statistical applications)。他們經(jīng)過正式的初步審查和持續(xù)的自動測試。 我們概述了潛在的(prospective)用戶和貢獻者欲低。
生物技術(shù)的進步不斷導(dǎo)致新類型的數(shù)據(jù)辕宏,數(shù)據(jù)集的體積、分辨率和多樣性(volume, resolution and diversity)迅速增加砾莱。這保證了我們對生物系統(tǒng)和醫(yī)學(xué)的理解取得前所未有的進展瑞筐。然而,數(shù)據(jù)的復(fù)雜性和體積(complexity and volume)也挑戰(zhàn)了科學(xué)家分析它們的能力腊瑟。應(yīng)對這一挑戰(zhàn)需要不斷改進分析工具和相關(guān)軟件工程聚假。
Bioconductor提供核心數(shù)據(jù)結(jié)構(gòu)和方法,在R項目(R project)提供的豐富的統(tǒng)計編程環(huán)境背景下闰非,使高通量數(shù)據(jù)的基因組規(guī)模的分析成為可能膘格。它支持多種類型的高通量測序數(shù)據(jù)(包括DNA、RNA财松、染色質(zhì)免疫沉淀瘪贱、Hi-C、甲基和核糖體譜分析)和相關(guān)的注釋資源辆毡;包含成熟的微陣列(microarray)分析設(shè)施菜秦;涵蓋蛋白質(zhì)組學(xué)、代謝組學(xué)舶掖、流式細胞術(shù)喷户、定量成像、化學(xué)和其他高通量數(shù)據(jù)访锻。Bioconductor可以快速創(chuàng)建工作流程褪尝,將多種數(shù)據(jù)類型和工具結(jié)合起來,在從數(shù)據(jù)生成到發(fā)布的項目所有階段進行統(tǒng)計推斷期犬、回歸河哑、網(wǎng)絡(luò)分析、機器學(xué)習(xí)和可視化龟虎。
Bioconductor也是一種靈活的軟件工程環(huán)境璃谨,可以開發(fā)所需的工具,為用戶提供高效學(xué)習(xí)和生產(chǎn)性工作的框架鲤妥。Bioconductor的基礎(chǔ)及其與實驗技術(shù)的快速協(xié)同進化基于兩個激勵原則佳吞。
首先是提供令人信服的(compelling)用戶體驗(user experience)。 Bioconductor文件(documentation)有三個層次:記錄跨越多個工具的完整分析的工作流程(workflows)棉安;提供記敘了特定包預(yù)期用途(intended uses)說明的軟件包插圖(package vignettes)底扳,包括詳細的可執(zhí)行代碼(executable code)示例;以及功能手冊頁(function manual pages)贡耽,精確描述所有輸入和輸出以及工作示例衷模。在許多情況下鹊汛,用戶最終成為開發(fā)人員,將自己的算法和方法提供給其他人阱冶。
第二刁憋,支持活躍和開放的科學(xué)界開發(fā)和分配(developing and distributing)生物信息學(xué)和計算生物學(xué)中的算法和軟件。支持包括關(guān)于軟件開發(fā)和文檔的指導(dǎo)和培訓(xùn)木蹬,以及使用適當(dāng)?shù)木幊谭独╬rogramming paradigms)至耻,如單元測試和明智的優(yōu)化。一個主要目標(biāo)是由科學(xué)領(lǐng)域?qū)<曳謩e開發(fā)共同操作的軟件組件镊叁。在某種程度上尘颓,我們通過促進使用通用數(shù)據(jù)結(jié)構(gòu)(common data structures)來實現(xiàn)這一點,這些結(jié)構(gòu)使工作流程能夠整合多個數(shù)據(jù)類型和學(xué)科意系。為了促進研究和創(chuàng)新泥耀,我們使用了一種高級編程語言(high-level programming language)。這種選擇產(chǎn)生了快速成型蛔添、創(chuàng)造力痰催、靈活性和可重現(xiàn)性(rapid prototyping, creativity, flexibility and reproducibility),這是無論點擊軟件(point-and-click software)還是通用編程語言(general-purpose programming language)都不能實現(xiàn)的迎瞧。我們已經(jīng)接受了R夸溶,因為它的科學(xué)和統(tǒng)計計算能力,它的圖形設(shè)施和方便的解釋語言凶硅。還與低級語言(low-level languages)相聯(lián)系缝裁,包括用于計算密集型操作的c和c++、用于與企業(yè)軟件集成的java和用于交互式基于Web的應(yīng)用程序和報告的javascript足绅。
The user perspective? 用戶視角
Bioconductor用戶群體龐大而國際化(表1)捷绑。用戶以不同的方式從項目中受益。 一個典型的與Bioconductor相遇開始于一個特定的科學(xué)需要氢妈,例如粹污,從RNA-seq實驗分析差異基因表達。用戶識別合適的工作流程文檔(identifies the appropriate documented workflow)首量,并且由于工作流程包含功能代碼(functioning code)壮吩,用戶運行一個簡單的命令來安裝所需的包并在本地復(fù)制分析。從那里加缘,她開始調(diào)整工作流程以適應(yīng)她的特定問題鸭叙。為了此目的,還提供了其他文件拣宏,如包的小插圖和手冊頁(package vignettes and manual pages)沈贝。她可以加載具有額外功能的另外的包(further packages)。當(dāng)需要幫助時蚀浆,用戶可以向支持論壇詢問軟件和基礎(chǔ)科學(xué)缀程,她可以參加培訓(xùn)課程和會議搜吧。 一些用戶從使用到開發(fā)軟件轉(zhuǎn)變市俊,Bioconductor鼓勵這種轉(zhuǎn)變杨凑。
Case study: high-throughput sequencing data analysis.? 案例研究:高通量測序數(shù)據(jù)分析
對大規(guī)模RNA或DNA測序數(shù)據(jù)的分析通常從將reads比對(aligning reads)到參考基因組開始,然后解釋比對模式(interpretation of the alignment patterns)摆昧。比對(Alignment)由多種工具處理撩满,其輸出通常作為BAM文件傳遞。Bioconductor包Rsamtools和GenomicAlignments為BAM文件數(shù)據(jù)的導(dǎo)入和操作(importing and manipulating)提供了一個靈活的接口绅你,例如用于質(zhì)量評估伺帘、可視化、事件檢測和概括(quality assessment, visualization, event detection and summarization)忌锯。
在這種分析中感興趣的區(qū)域是基因伪嫁、轉(zhuǎn)錄本、增強子或許多其他類型的序列區(qū)間(sequence intervals)偶垮,可以通過它們的基因組坐標(biāo)(genomic coordinates)來識別张咳。Bioconductor支持用“Ranges”基礎(chǔ)設(shè)施(infrastructure)表示和分析基因組區(qū)間,包括數(shù)據(jù)結(jié)構(gòu)似舵、算法和實用程序脚猾,包括算法函數(shù)、集合操作和概括(圖1)砚哗。它由幾個包組成龙助,包括IRanges, GenomicRanges, GenomicAlignments, GenomicFeatures, VariantAnnotation and rtracklayer。這些包經(jīng)常更新以獲得功能蛛芥、性能和可用性提鸟。Ranges基礎(chǔ)設(shè)施的設(shè)計是為了提供方便最終用戶(end users)分析數(shù)據(jù)的工具,同時保持靈活性仅淑,作為開發(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)而大不相同,但一個共同的模式是將數(shù)據(jù)減少到一組定義的范圍(a defined set of ranges)醉鳖,即每個位點的比對(the alignments at each of the sites)的定量和定性匯總(in terms of quantitative and qualitative summaries)捡硅。例子包括檢測染色質(zhì)免疫共沉淀測序(chromatin immunoprecipitation–sequencing)中的覆蓋峰或濃度(coverage peaks),計數(shù)與每個轉(zhuǎn)錄本或外顯子(RNA-seq)匹配的cDNA片段的數(shù)量盗棵,并識別DNA序列變異(DNA-seq)壮韭。這樣的匯總可以存儲在GenomicRanges類的實例中(an instance of the class GenomicRanges)北发。
圖1. 范圍函數(shù)(Ranges algebra)的使用示例。一個Granges對象喷屋,g(頂部)表示一個基因的兩個轉(zhuǎn)錄本亞型(transcript isoforms)琳拨,每個亞型有兩個外顯子。未剪接轉(zhuǎn)錄本的坐標(biāo)與函數(shù)range(g)一致屯曹。計算基因區(qū)域包括將基因模型壓縮到其組成外顯子中狱庇,并將其減少到不重疊的范圍,reduce(unlist(g))恶耽。定義不相交bin的范圍在計數(shù)操作中是有用的密任,disjoin(unlist(g))。假定的啟動子范圍是利用鏈感知的范圍擴展(strand-aware range extension)偷俭,flank(range(g), width = 100)浪讳。基本操作可以組合成簡潔的執(zhí)行查詢涌萤,例如psetdiff(range(g), g) 計算內(nèi)含子范圍淹遵。
Coordinated analysis of multiple samples.? 多個樣本的協(xié)調(diào)分析
為了便于對多個樣本(multiple samples)的實驗和研究進行分析,Bioconductor定義了SummarizedExperiment類形葬。計算的范圍匯總(computed summaries for the ranges)被編譯成一個矩形陣列(rectangular array)合呐,其行對應(yīng)于范圍(ranges),其列對應(yīng)于不同的樣本(圖2)笙以。對于一個典型的實驗淌实,可以有數(shù)萬到數(shù)百萬的范圍和從少數(shù)到數(shù)百個樣本。數(shù)組元素(array elements)不需要是單個數(shù)字:匯總(summaries)可以是多元的猖腕。
SummarizedExperiment class還將metadata存儲在行和列上拆祈。樣本的metadata通常包括實驗或觀察協(xié)變量(covariates)以及技術(shù)信息,如處理日期或批次倘感、文件路徑等放坏。行的metadata包括每個特征(feature)的開始和結(jié)束坐標(biāo)以及包含聚合物(polymer)的標(biāo)識符(identifier),例如染色體名稱老玛∮倌辏可以插入進一步的信息,如基因或外顯子標(biāo)識符(identifiers)蜡豹、對外部數(shù)據(jù)庫的引用(references to external databases)麸粮、試劑(reagents)、該區(qū)域的功能分類(例如镜廉,來自Encyclopedia of DNA Elements (ENCODE))或遺傳關(guān)聯(lián)(genetic associations)(例如弄诲,來自全基因組關(guān)聯(lián)研究、罕見疾病研究或癌癥遺傳學(xué))娇唯。行的metadata有助于綜合分析齐遵,例如寂玲,當(dāng)根據(jù)感興趣的基因組區(qū)域的重疊匹配兩個實驗時。metadata與數(shù)據(jù)的緊密耦合減少了在重新排序或子集操作中發(fā)生文字錯誤的機會梗摇。
圖2. 綜合的數(shù)據(jù)容器SummarizedExperiment拓哟。它的實驗組成(assays component)是一個或幾個相等維度的行和列(equivalent row and column dimensions)的矩形陣列(rectangular arrays)。行對應(yīng)于特征(features)留美,列對應(yīng)于樣本(samples)彰檬。rowData成分存儲有關(guān)特征的metadata伸刃,包括它們的基因組范圍谎砾。colData成分跟蹤(keeps track of)樣本水平協(xié)變量(covariate)數(shù)據(jù)。exptData成分包含實驗水平信息捧颅,包括MIAME(微陣列實驗的最小信息)結(jié)構(gòu)的metadata柠新。R表達式舉例說明了怎樣訪問組件畅铭。例如,只要記錄了這些metadata,rowData(se)$entrezId返回特征的NCBI Entrez基因標(biāo)識符肩榕,se$tissue返回樣本的組織描述《基于Range的操作流强,如%in%,作用于rowData贮尖,以返回一個邏輯向量笛粘,該邏輯向量選擇位于數(shù)據(jù)對象CNVs指定的區(qū)域內(nèi)的特征。與bracket operator一起湿硝,這種表達可以用來將一個SummarizedExperiment劃分子集到一組集中的基因和組織中進行下游分析薪前。
Annotation packages and resources.? 注釋包和資源
參考基因組,基因組區(qū)域和相關(guān)基因產(chǎn)物(轉(zhuǎn)錄本或蛋白質(zhì))的注釋关斜,以及分子標(biāo)識符之間的映射示括,對于將統(tǒng)計和生物信息學(xué)結(jié)果納入生物學(xué)角度是必不可少的。Bioconductor注釋數(shù)據(jù)存儲庫(annotation data repository)部分地滿足了這些需求痢畜,它提供了894個預(yù)先構(gòu)建的標(biāo)準(zhǔn)化注釋包垛膝,用于普通模式生物以及其他生物。每個包都使用定義的Bioconductor類(defined Bioconductor classes)通過標(biāo)準(zhǔn)接口(standard interface)顯示其數(shù)據(jù)丁稀,包括來自UCSC(加州大學(xué)圣克魯斯分校)或BioMart annotations的全基因組序列(whole-genome sequences (BSgenome))吼拥、基因模型(gene model)或轉(zhuǎn)錄本數(shù)據(jù)庫(transcript databases (TxDb))的類,以及來自美國國家生物技術(shù)信息中心(US National Center for Biotechnology Information, or NCBI (org))的標(biāo)識符交叉引用(identifier cross-references)二驰。還有一些設(shè)施供用戶創(chuàng)建自己的注釋包扔罪。
AnnotationHub資源提供了對來自Ensembl, ENCODE, dbSNP, UCSC和其他來源獲得的10000多個基因組規(guī)模的分析和注釋數(shù)據(jù)集的隨時訪問(ready access),并以易于訪問的格式發(fā)布(例如桶雀,適當(dāng)?shù)腞anges兼容)矿酵。 Bioconductor還支持直接訪問底層文件格式唬复,如GTF、2bit或索引的FASTA全肮。
Bioconductor還提供通過其應(yīng)用程序編程接口(application programming interfaces)直接訪問在線資源的工具敞咧。 當(dāng)一個資源沒有在注釋包中表示時,或者當(dāng)需要非常最新版本的數(shù)據(jù)時辜腺,這可能是有價值的休建。rtracklayer軟件包訪問UCSC基因組瀏覽器的表和跟蹤(tables and tracks),biomaRt軟件包支持對Ensembl, UniProt, COSMIC和相關(guān)資源的細致的(fine-grained)在線收集评疗。許多額外的包訪問Web資源测砂,例如KEGGREST, PSICQUIC and Uniprot.ws。
Experiment data packaging and access.? 實驗數(shù)據(jù)包裝和訪問
Bioconductor實驗數(shù)據(jù)存儲庫目前包含224個包百匆。實驗數(shù)據(jù)包具有重要的作用砌些,例如演示方法的示例數(shù)據(jù)集;有些可以用于標(biāo)桿學(xué)習(xí)(benchmarking)和比較方法加匈,有些是對科學(xué)論文中報告的分析的可重復(fù)描述(reproducible descriptions)(例如存璃,Hiiragi2013包的數(shù)據(jù)和片段復(fù)制了最近報道的小鼠胚胎中單個細胞的轉(zhuǎn)錄組分析)。已發(fā)表的實驗數(shù)據(jù)存檔(Archives)可以使用GEOquery, ArrayExpress and SRAdb軟件包來獲取雕拼。
Integrative analysis.? 綜合分析
高通量檢測纵东,如測序、流式細胞術(shù)和質(zhì)譜繼續(xù)降低成本和提高質(zhì)量啥寇。由同一組樣品的幾種實驗組成的分析越來越普遍偎球。對多種數(shù)據(jù)類型的綜合分析可能是基因組數(shù)據(jù)分析中最不可標(biāo)準(zhǔn)化的任務(wù)(the least standardizable task),其中最明顯的是需要一個高級別語言(如R)靈活工作環(huán)境示姿。
多種實驗的綜合分析通常依賴于通過基因組定位或注釋進行連接甜橱。這包括將基因組位置與轉(zhuǎn)錄本和蛋白質(zhì)序列、在相同途徑或過程中發(fā)揮作用的其他基因產(chǎn)物蛋白質(zhì)栈戳、以及許多其他可能的關(guān)聯(lián)聯(lián)系起來岂傲。多種相關(guān)的數(shù)據(jù)類型和注釋的組合計算是綜合基因組分析(integrative genomic analysis)的本質(zhì)子檀。
要進行這種分析亩进,必須使用標(biāo)識符、參考基因組习贫、基因模型、坐標(biāo)系統(tǒng)等兼容系統(tǒng)。例如袜硫,RNA編輯位點的識別需要用戶對個體有一個準(zhǔn)確的基因型瞻凤,以及與該基因型比對的RNA-seq reads,而來自DNA-seq實驗的變異識別不僅應(yīng)該保留關(guān)于比對軟件的信息,而且還應(yīng)該保留所使用的基因組的精確版本衙荐。Bioconductor軟件旨在使跟蹤這些問題簡單和自動斩披。這也有助于其他分析人員確定是否以及如何將特定處理的數(shù)據(jù)集與其他數(shù)據(jù)集整合。
Visualization? 可視化
可視化是基因組數(shù)據(jù)分析的關(guān)鍵寡壮。 我們區(qū)分了三種主要場景屋群,每種場景都有不同的需求降狠。第一種是“發(fā)現(xiàn)模式”(discovery mode)中的快速交互數(shù)據(jù)探索榜配。第二種是研究合作者對初步結(jié)果(initial results)的記錄、報告和討論(recording, reporting and discussion)膜廊,通常通過具有相互關(guān)聯(lián)的圖(interlinked plots)和提供交互功能的工具提示(tool-tips providing interactive functionality)的網(wǎng)頁進行匙瘪。腳本通常與文檔一起提供薄货,以記錄所做的事情骑冗。 第三是科學(xué)出版物(scientific publications)和報告(presentations)的圖形巧涧,以直觀和有吸引力(intuitive and attractive)的形式顯示基本信息占锯。R環(huán)境為所有這些類型的可視化提供了強大的支持——使用各種R圖形設(shè)備(R graphics devices)或提供更多交互的基于HTML5的可視化接口(HTML5-based visualization interfaces)——Bioconductor充分利用這些設(shè)施瞎抛。在實踐中断凶,可視化通常要求用戶對數(shù)據(jù)進行計算却嗡,例如數(shù)據(jù)轉(zhuǎn)換和過濾、概括和降維稽穆,或?qū)y(tǒng)計模型進行擬合冠王。所需的表現(xiàn)力(expressivity)并不總是很容易在點擊界面(point-and-click interface)中實現(xiàn),而是很容易在高級編程語言中實現(xiàn)舌镶。 此外,許多可視化豪娜,如熱圖或主成分分析圖餐胀,都與數(shù)學(xué)和統(tǒng)計模型聯(lián)系在一起——因此需要訪問科學(xué)計算庫。
基因組學(xué)特異性可視化類型是沿著基因組坐標(biāo)(genomic coordinates)繪制的瘤载。有幾個軟件包創(chuàng)建了有吸引力的沿基因組數(shù)據(jù)軌道(along-genome data tracks)展示否灾,包括Gviz和ggbio(圖3)。這些包直接操作在常見的Bioconductor數(shù)據(jù)結(jié)構(gòu)上鸣奔,從而與現(xiàn)有的數(shù)據(jù)操作(available data manipulation)和建模功能(modeling functionality)整合(integrate)墨技。這種可視化的一個基本操作是用基因組區(qū)域(genomic regions)計算,而biovizBase包提供了范圍基礎(chǔ)設(shè)施(Ranges infrastructure)和繪圖包之間的橋梁挎狸。 R和基因組瀏覽器(genome browsers)之間的直接通信由rtracklayer(用于UCSC基因組瀏覽器)和SRAdb(用于Integrative Genomics Viewer)包實現(xiàn)扣汪。
基因組數(shù)據(jù)集的大小有時超過了可以用標(biāo)準(zhǔn)內(nèi)存數(shù)據(jù)模型(standard in-memory data models)來管理的數(shù)據(jù),然后高性能計算的工具開始發(fā)揮作用锨匆。一個例子是使用rhdf5——一種HDF5大數(shù)據(jù)管理系統(tǒng)(HDF5 large data management system)(http://www.hdfgroup.org/hdf5)的接口——通過h5vc包將大的崭别、基因組大小的數(shù)據(jù)立方體(data cubes)切成易于快速交互計算和可視化的塊(chunks)。ggbio和Gviz都對文件格式進行范圍限制的查詢,包括bam茅主、bgzip/tabix和bigwig舞痰,通過Rsamtools和rtracklayer快速集成來自特定基因組區(qū)域的多個文件的數(shù)據(jù)。
圖3. 沿基因組坐標(biāo)與ggbio的可視化诀姚。該圖顯示了來自小鼠造血干細胞(HSC)和四個多能祖細胞(MPP)的RNA-seq數(shù)據(jù)的基因Apoe响牛。不相交的bin(中心)是從底部面板(panel)中顯示的四個轉(zhuǎn)錄本亞型(transcript isoforms)計算出來的。頂部面板的y軸顯示了用DEXSeq方法估計的相對外顯子使用系數(shù)(the relative exon usage coefficients)赫段。檢測到的細胞組分之間差異使用的區(qū)域在中心面板中呈暗紅色呀打。
Reproducible research? 重復(fù)性研究
追溯(retrace)在基因組學(xué)研究項目中執(zhí)行的計算步驟可能是令人驚訝的困難。Bioconductor的目標(biāo)之一是幫助科學(xué)家報告他們的分析瑞佩,使第三方能夠準(zhǔn)確地重新計算(exact recreation)所有將輸入數(shù)據(jù)轉(zhuǎn)化為結(jié)果的計算聚磺,包括圖、表格和數(shù)字炬丸。該項目的貢獻包括強調(diào)讀寫編程插圖(literate programming vignettes)瘫寝,BiocStyle和ReportingTools包,實驗數(shù)據(jù)和注釋包的組裝以及所有先前發(fā)布的包的存檔和可用性稠炬。在更廣泛的R社區(qū)中的一些發(fā)展焕阿,包括knitr和rmarkdown軟件包以及集成開發(fā)環(huán)境Rstudio,使得編寫有吸引力的小片段變得很容易首启。除了傳統(tǒng)的交付格式pd f文件外暮屡,新一代的工具還允許使用html5設(shè)施進行交互式可視化,包括“挖掘”(drill-down)來擴展對特定細節(jié)的視圖毅桃、刻面(faceted)過濾和綜合的超鏈接褒纲。完全遠程可重現(xiàn)性(remote reproducibility)仍然是一個具有挑戰(zhàn)性的問題,特別是對于需要大量計算資源的計算钥飞,或通過短暫(transient)或限制訪問(restricted access)(例如云)的基礎(chǔ)設(shè)施訪問數(shù)據(jù)的計算莺掠。 然而,許多完全可復(fù)制的研究報告的例子已經(jīng)被Bioconductor報告了读宙。
Alternative and complementary tools? 替代和補充工具
使用Bioconductor需要自愿用高級計算機語言修改和最終編寫腳本彻秆,在不同的算法和軟件包之間做出明智的選擇,并學(xué)習(xí)足夠的R來完成不可避免的數(shù)據(jù)爭論和故障排除结闸。存在替代和互補的工具唇兑;特別是,用戶可能準(zhǔn)備交換一些損失(trade some loss)靈活性桦锄、自動化或功能扎附,以便與軟件進行更簡單的交互,例如通過運行單目的工具(single-purpose tools)或使用點擊接口(point-and-click interface)察纯。
工作流和數(shù)據(jù)管理系統(tǒng)帕棉,如Galaxy和IlluminaBasePace针肥,為集合和部署易于使用的來自不同語言和框架的成分的分析流程(easy-touse analysis pipelines)提供了一種方法。IPython筆記本提供了一個有吸引力的交互式工作簿環(huán)境香伴。 雖然它的起源是python編程語言慰枕,但它現(xiàn)在支持許多語言,包括R即纲。在實踐中具帮,許多用戶會發(fā)現(xiàn)一個對他們最有效的平臺組合。
The developer perspective? 開發(fā)人員視角
The package ecosystem? 包的生態(tài)系統(tǒng)
Bioconductor的所有軟件都是以R包的形式發(fā)布(distributed)的低斋。這簡化了軟件的交付蜂厅、使用和維護,但給開發(fā)人員帶來了負擔(dān)膊畴。他們需要學(xué)習(xí)如何編寫R包掘猿,包括文檔和測試案例。
開發(fā)人員不斷更新他們的包唇跨,以擴展功能稠通,提高性能,修復(fù)錯誤和增強文檔买猖。這些更改被引入到Bioconductor的開發(fā)分支(development branch)中改橘,并每6個月發(fā)布給最終用戶;使用中央的玉控、公開可讀的Subversion軟件存儲庫(central, publicly readable Subversion software repository)跟蹤更改飞主,因此所有更改的詳細信息都是完全可訪問的。同時(Simultaneously)高诺,R本身也在不斷變化碌识,通常是圍繞性能增強和功能增加。由于這種動態(tài)環(huán)境虱而,所有包都要經(jīng)過日常測試程序(daily testing procedure)丸冕。 測試是完全自動化的,并確保包文檔中的所有代碼示例以及進一步的單元測試在沒有錯誤的情況下運行薛窥。 測試的順利完成,將會導(dǎo)致R包建成并提交公眾眼姐。
許多Bioconductor包有廣泛的代碼示例和測試诅迷,作者可以通過這些示例和測試確保它們的軟件保持功能,即使在組件上下游變化時也是如此众旗。同樣重要的是保持文檔與代碼中的更改同步罢杉。 雖然測試系統(tǒng)對中央存儲庫和所有開發(fā)人員都是很大的負擔(dān),但它提供了一定程度的軟件一致性和可用性(coherence and usability)贡歧,這在具有多樣化和分布式開發(fā)人員群體(distributed developer community)的軟件項目中是罕見的滩租。當(dāng)然赋秀,存在限制:測試的范圍和嚴格性(the reach and stringency),超過所需的最小值律想,取決于包的作者猎莲。 自然遺傳學(xué)的一篇社論(an editorial in Nature Genetics)強調(diào)了存儲庫(repository)的質(zhì)量,其中列出了Comprehensive R Archive Network (CRAN)和Bioconductor技即,作為該期刊認可的所有編程語言的唯一軟件存儲庫著洼。
Interoperability? 協(xié)同工作能力
不同階段和不同類型分析的軟件組件(software components)之間的互操作性(Interoperability)對于Bioconductor的成功至關(guān)重要。 互操作性是通過定義通用數(shù)據(jù)結(jié)構(gòu)(common data structures)來建立的而叼,包作者預(yù)計將使用這些數(shù)據(jù)結(jié)構(gòu)(表2)身笤。在技術(shù)上,Bioconductor的公共數(shù)據(jù)結(jié)構(gòu)被實現(xiàn)為R語言的S4面向?qū)ο笙到y(tǒng)中的類葵陵。 以這種方式液荸,包括封裝(encapsulation)、從實現(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)進行比較是有指導(dǎo)意義的:基于文件的數(shù)據(jù)格式約定(file-based data format conventions)和語言的原始數(shù)據(jù)結(jié)構(gòu)(primitive data structures)考抄,如矩陣或電子表格表细疚。使用基于文件的格式,諸如取子集或數(shù)據(jù)轉(zhuǎn)換之類的操作可能是繁瑣和容易出錯的川梅,并且文件的序列化性質(zhì)(serialized nature)阻礙了需要對數(shù)據(jù)進行全局視圖(a global view of the data)的操作疯兼。在這兩種情況下,有效性檢查(validity checking)和反思不能依賴于預(yù)先形成或標(biāo)準(zhǔn)化的支持贫途,需要重新為每一項公約從零開始(from scratch again)編程——或者完全缺失吧彪。一旦一個項目的數(shù)據(jù)分布在多個表或文件中,數(shù)據(jù)記錄的比對或標(biāo)識符的一致性就岌岌可危丢早,互操作性由于不得不操縱分散的姨裸、松散協(xié)調(diào)的數(shù)據(jù)集(disperse, loosely coordinated data collections)而受到阻礙。
Shared infrastructure for distributed development? 分布式發(fā)展共享基礎(chǔ)設(shè)施
生物數(shù)據(jù)的分析依賴于參考資源怨酝,如基因組序列傀缩、基因模型、基因標(biāo)識和注釋以及其他基因組特征(genome sequences, gene models, identifiers and annotation of genes and other genomic features)农猬。 項目提供這些資源的標(biāo)準(zhǔn)化R表示(Standardized R representations)赡艰,以避免工作冗余(redundancy of efforts),并實現(xiàn)數(shù)據(jù)整合(data integration)斤葱。
開發(fā)人員還受益于支持他們想要執(zhí)行的操作的基本軟件庫功能(fundamental software library functions)慷垮。 例如揖闸,43%的Bioconductor包直接或間接地使用了范圍基礎(chǔ)設(shè)施(Ranges infrastructure),近60%依賴于Biobase料身,70%以上依賴于BiocGenerics汤纸。通過使用共享基礎(chǔ)設(shè)施,開發(fā)人員可以擺脫自己創(chuàng)建和維護這些組件的任務(wù)惯驼,他們可以專注于自己獨特的特定領(lǐng)域的貢獻蹲嚣。
Merits of a high-level language? 高級語言的優(yōu)點
Functionality? 功能性
軟件工程是一個復(fù)雜的過程。 科學(xué)軟件的共同期望包括功能性祟牲、靈活性和穩(wěn)健性(functionality, flexibility and robustness)隙畜。在發(fā)展科學(xué)方法的早期階段,這些目標(biāo)應(yīng)該優(yōu)先考慮说贝,過早地優(yōu)化(premature optimization)速度或其他硬件資源往往會分散注意力议惰。因此,以R這樣的高級語言工作是一個快速有效的選擇乡恕。一旦正確的方法已經(jīng)解決言询,有足夠的時間擔(dān)心計算是否真的需要更快和瓶頸(bottleneck)在哪里。
Extensibility 延展性
R提供了操作數(shù)據(jù)的語法(syntax)傲宜。該語法可以很容易地映射到其他語言运杭。一旦一個想法被審核和測試(vetted and tested),開發(fā)人員可以使用其他語言(如c)中的關(guān)鍵代碼部分來提高性能函卒。例如辆憔,范圍基礎(chǔ)設(shè)施(Ranges infrastructure)已經(jīng)經(jīng)歷了這個過程的許多迭代(iterations)。 或者报嵌,正如我們對Rsamtools包所做的那樣虱咧,R的外部語言接口(foreign language interfaces)可以被用來訪問R內(nèi)建立的軟件庫,這使得用R編寫的高級代碼能夠無縫地使用SAMtools軟件的功能锚国。
Reuse? 重新使用
通過與現(xiàn)有庫的接口重新使用軟件是Bioconductor的指導(dǎo)原則之一腕巡。 開發(fā)好的軟件是困難和耗時的,如果完成一項任務(wù)已經(jīng)有一個經(jīng)過良好測試血筑、良好支持的(well-tested, well-supported)實現(xiàn)(implementation)并具有合適的許可證(suitable license)绘沉,我們鼓勵開發(fā)人員在此基礎(chǔ)上進行開發(fā)。使用R的外部語言接口豺总,他們可以調(diào)用安裝在系統(tǒng)其他地方的第三方軟件梆砸,或者他們可以用自己的Bioconductor包來包含和重新分發(fā)(include and redistribute)它。在R生態(tài)系統(tǒng)中园欣,CRAN和Bioconductor存儲庫為開發(fā)人員提供了對很多包的訪問。它們支持快速發(fā)展休蟹,因為它們是幾乎不費吹灰之力就可以安裝和使用的單元沸枯,它們封裝了通常是多年努力集中(concentrate of years of effort)的訣竅(know-how)日矫。
Performance and scalability? 性能和可伸縮性
有效地處理大數(shù)據(jù)需要將內(nèi)存和處理器的使用(memory and processor use)與可用資源(available resources)相匹配的編程實踐。 在向量或數(shù)組上操作時R是有效的绑榴,因此高性能和可伸縮算法(high-performing and scalable algorithms)使用的模式是將數(shù)據(jù)分割成可管理的塊(manageable chunks)并迭代它們(iterate over them)哪轿。一個例子是處理bam、fastq或VCF文件的函數(shù)的yieldSize參數(shù)翔怎。塊可以并行評估以獲得速度窃诉。BiocParallel軟件包幫助開發(fā)人員在不同的計算環(huán)境中使用并行評估(employ parallel evaluation),同時使用戶免于(shielding)必須配置(configure)技術(shù)赤套。它連接到后端(back ends)飘痛,用于共享內(nèi)存和集群配置(cluster configurations)。GenomicFiles包將并行化(parallelization)與跨多個文件的分塊操作聯(lián)系起來容握。Bioconductor可作為虛擬機圖像(virtual machine image)配置給高性能計算在亞馬遜的彈性計算云(EC2)宣脉。
Bioconductor成功的一個關(guān)鍵方面是接觸用戶和開發(fā)人員的能力(reach both users and developers)。對于用戶來說剔氏,有許多通用案例的包和工作流(packages and workflows)塑猖,以及通過表格、可視化和報告有效地傳達結(jié)果的工具(facilities)谈跛。分析腳本很容易共享羊苟,從而促進可重復(fù)的研究。對于想要創(chuàng)建和傳播新想法的開發(fā)人員來說感憾,有一個維護良好的基礎(chǔ)設(shè)施來進行穩(wěn)健的代碼開發(fā)蜡励。我們的社區(qū)努力平衡用戶需求,同時在基因組數(shù)據(jù)科學(xué)創(chuàng)新的前沿工作吹菱。我們受用戶和開發(fā)人員的長處和奉獻精神(dedication)的驅(qū)使巍虫,對項目的未來持樂觀態(tài)度。