参考: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)、开放开发(open-development)的软件项目(software project),用于分析和理解基因组学和分子生物学中的高通量数据。该项目旨在促进跨学科(interdisciplinary)研究、协作(collaboration)和科学软件的快速发展。基于统计编程语言R(statistical programming language R),Bioconductor包括934个能共同操作的包(interoperable packages),由一个庞大的、多样化的科学家团体(community of scientists)贡献。Packages涵盖了一系列生物信息和统计的应用(bioinformatic and statistical applications)。他们经过正式的初步审查和持续的自动测试。 我们概述了潜在的(prospective)用户和贡献者。
生物技术的进步不断导致新类型的数据,数据集的体积、分辨率和多样性(volume, resolution and diversity)迅速增加。这保证了我们对生物系统和医学的理解取得前所未有的进展。然而,数据的复杂性和体积(complexity and volume)也挑战了科学家分析它们的能力。应对这一挑战需要不断改进分析工具和相关软件工程。
Bioconductor提供核心数据结构和方法,在R项目(R project)提供的丰富的统计编程环境背景下,使高通量数据的基因组规模的分析成为可能。它支持多种类型的高通量测序数据(包括DNA、RNA、染色质免疫沉淀、Hi-C、甲基和核糖体谱分析)和相关的注释资源;包含成熟的微阵列(microarray)分析设施;涵盖蛋白质组学、代谢组学、流式细胞术、定量成像、化学和其他高通量数据。Bioconductor可以快速创建工作流程,将多种数据类型和工具结合起来,在从数据生成到发布的项目所有阶段进行统计推断、回归、网络分析、机器学习和可视化。
Bioconductor也是一种灵活的软件工程环境,可以开发所需的工具,为用户提供高效学习和生产性工作的框架。Bioconductor的基础及其与实验技术的快速协同进化基于两个激励原则。
首先是提供令人信服的(compelling)用户体验(user experience)。 Bioconductor文件(documentation)有三个层次:记录跨越多个工具的完整分析的工作流程(workflows);提供记叙了特定包预期用途(intended uses)说明的软件包插图(package vignettes),包括详细的可执行代码(executable code)示例;以及功能手册页(function manual pages),精确描述所有输入和输出以及工作示例。在许多情况下,用户最终成为开发人员,将自己的算法和方法提供给其他人。
第二,支持活跃和开放的科学界开发和分配(developing and distributing)生物信息学和计算生物学中的算法和软件。支持包括关于软件开发和文档的指导和培训,以及使用适当的编程范例(programming paradigms),如单元测试和明智的优化。一个主要目标是由科学领域专家分别开发共同操作的软件组件。在某种程度上,我们通过促进使用通用数据结构(common data structures)来实现这一点,这些结构使工作流程能够整合多个数据类型和学科。为了促进研究和创新,我们使用了一种高级编程语言(high-level programming language)。这种选择产生了快速成型、创造力、灵活性和可重现性(rapid prototyping, creativity, flexibility and reproducibility),这是无论点击软件(point-and-click software)还是通用编程语言(general-purpose programming language)都不能实现的。我们已经接受了R,因为它的科学和统计计算能力,它的图形设施和方便的解释语言。还与低级语言(low-level languages)相联系,包括用于计算密集型操作的c和c++、用于与企业软件集成的java和用于交互式基于Web的应用程序和报告的javascript。
The user perspective 用户视角
Bioconductor用户群体庞大而国际化(表1)。用户以不同的方式从项目中受益。 一个典型的与Bioconductor相遇开始于一个特定的科学需要,例如,从RNA-seq实验分析差异基因表达。用户识别合适的工作流程文档(identifies the appropriate documented workflow),并且由于工作流程包含功能代码(functioning code),用户运行一个简单的命令来安装所需的包并在本地复制分析。从那里,她开始调整工作流程以适应她的特定问题。为了此目的,还提供了其他文件,如包的小插图和手册页(package vignettes and manual pages)。她可以加载具有额外功能的另外的包(further packages)。当需要帮助时,用户可以向支持论坛询问软件和基础科学,她可以参加培训课程和会议。 一些用户从使用到开发软件转变,Bioconductor鼓励这种转变。
Case study: high-throughput sequencing data analysis. 案例研究:高通量测序数据分析
对大规模RNA或DNA测序数据的分析通常从将reads比对(aligning reads)到参考基因组开始,然后解释比对模式(interpretation of the alignment patterns)。比对(Alignment)由多种工具处理,其输出通常作为BAM文件传递。Bioconductor包Rsamtools和GenomicAlignments为BAM文件数据的导入和操作(importing and manipulating)提供了一个灵活的接口,例如用于质量评估、可视化、事件检测和概括(quality assessment, visualization, event detection and summarization)。
在这种分析中感兴趣的区域是基因、转录本、增强子或许多其他类型的序列区间(sequence intervals),可以通过它们的基因组坐标(genomic coordinates)来识别。Bioconductor支持用“Ranges”基础设施(infrastructure)表示和分析基因组区间,包括数据结构、算法和实用程序,包括算法函数、集合操作和概括(图1)。它由几个包组成,包括IRanges, GenomicRanges, GenomicAlignments, GenomicFeatures, VariantAnnotation and rtracklayer。这些包经常更新以获得功能、性能和可用性。Ranges基础设施的设计是为了提供方便最终用户(end users)分析数据的工具,同时保持灵活性,作为开发更复杂和专门的软件的基础。我们已经正式化了数据结构,使它们能够实现互操作性(interoperability),但我们还允许额外的、不太正式化的用户定义数据成分(user-defined data components),例如应用程序定义的注释(application-defined annotation),从而使它们能够适应特定的案例。
工作流程可能因调查的具体目标而大不相同,但一个共同的模式是将数据减少到一组定义的范围(a defined set of ranges),即每个位点的比对(the alignments at each of the sites)的定量和定性汇总(in terms of quantitative and qualitative summaries)。例子包括检测染色质免疫共沉淀测序(chromatin immunoprecipitation–sequencing)中的覆盖峰或浓度(coverage peaks),计数与每个转录本或外显子(RNA-seq)匹配的cDNA片段的数量,并识别DNA序列变异(DNA-seq)。这样的汇总可以存储在GenomicRanges类的实例中(an instance of the class GenomicRanges)。
图1. 范围函数(Ranges algebra)的使用示例。一个Granges对象,g(顶部)表示一个基因的两个转录本亚型(transcript isoforms),每个亚型有两个外显子。未剪接转录本的坐标与函数range(g)一致。计算基因区域包括将基因模型压缩到其组成外显子中,并将其减少到不重叠的范围,reduce(unlist(g))。定义不相交bin的范围在计数操作中是有用的,disjoin(unlist(g))。假定的启动子范围是利用链感知的范围扩展(strand-aware range extension),flank(range(g), width = 100)。基本操作可以组合成简洁的执行查询,例如psetdiff(range(g), g) 计算内含子范围。
Coordinated analysis of multiple samples. 多个样本的协调分析
为了便于对多个样本(multiple samples)的实验和研究进行分析,Bioconductor定义了SummarizedExperiment类。计算的范围汇总(computed summaries for the ranges)被编译成一个矩形阵列(rectangular array),其行对应于范围(ranges),其列对应于不同的样本(图2)。对于一个典型的实验,可以有数万到数百万的范围和从少数到数百个样本。数组元素(array elements)不需要是单个数字:汇总(summaries)可以是多元的。
SummarizedExperiment class还将metadata存储在行和列上。样本的metadata通常包括实验或观察协变量(covariates)以及技术信息,如处理日期或批次、文件路径等。行的metadata包括每个特征(feature)的开始和结束坐标以及包含聚合物(polymer)的标识符(identifier),例如染色体名称。可以插入进一步的信息,如基因或外显子标识符(identifiers)、对外部数据库的引用(references to external databases)、试剂(reagents)、该区域的功能分类(例如,来自Encyclopedia of DNA Elements (ENCODE))或遗传关联(genetic associations)(例如,来自全基因组关联研究、罕见疾病研究或癌症遗传学)。行的metadata有助于综合分析,例如,当根据感兴趣的基因组区域的重叠匹配两个实验时。metadata与数据的紧密耦合减少了在重新排序或子集操作中发生文字错误的机会。
图2. 综合的数据容器SummarizedExperiment。它的实验组成(assays component)是一个或几个相等维度的行和列(equivalent row and column dimensions)的矩形阵列(rectangular arrays)。行对应于特征(features),列对应于样本(samples)。rowData成分存储有关特征的metadata,包括它们的基因组范围。colData成分跟踪(keeps track of)样本水平协变量(covariate)数据。exptData成分包含实验水平信息,包括MIAME(微阵列实验的最小信息)结构的metadata。R表达式举例说明了怎样访问组件。例如,只要记录了这些metadata,rowData(se)$entrezId返回特征的NCBI Entrez基因标识符,se$tissue返回样本的组织描述。基于Range的操作,如%in%,作用于rowData,以返回一个逻辑向量,该逻辑向量选择位于数据对象CNVs指定的区域内的特征。与bracket operator一起,这种表达可以用来将一个SummarizedExperiment划分子集到一组集中的基因和组织中进行下游分析。
Annotation packages and resources. 注释包和资源
参考基因组,基因组区域和相关基因产物(转录本或蛋白质)的注释,以及分子标识符之间的映射,对于将统计和生物信息学结果纳入生物学角度是必不可少的。Bioconductor注释数据存储库(annotation data repository)部分地满足了这些需求,它提供了894个预先构建的标准化注释包,用于普通模式生物以及其他生物。每个包都使用定义的Bioconductor类(defined Bioconductor classes)通过标准接口(standard interface)显示其数据,包括来自UCSC(加州大学圣克鲁斯分校)或BioMart annotations的全基因组序列(whole-genome sequences (BSgenome))、基因模型(gene model)或转录本数据库(transcript databases (TxDb))的类,以及来自美国国家生物技术信息中心(US National Center for Biotechnology Information, or NCBI (org))的标识符交叉引用(identifier cross-references)。还有一些设施供用户创建自己的注释包。
AnnotationHub资源提供了对来自Ensembl, ENCODE, dbSNP, UCSC和其他来源获得的10000多个基因组规模的分析和注释数据集的随时访问(ready access),并以易于访问的格式发布(例如,适当的Ranges兼容)。 Bioconductor还支持直接访问底层文件格式,如GTF、2bit或索引的FASTA。
Bioconductor还提供通过其应用程序编程接口(application programming interfaces)直接访问在线资源的工具。 当一个资源没有在注释包中表示时,或者当需要非常最新版本的数据时,这可能是有价值的。rtracklayer软件包访问UCSC基因组浏览器的表和跟踪(tables and tracks),biomaRt软件包支持对Ensembl, UniProt, COSMIC和相关资源的细致的(fine-grained)在线收集。许多额外的包访问Web资源,例如KEGGREST, PSICQUIC and Uniprot.ws。
Experiment data packaging and access. 实验数据包装和访问
Bioconductor实验数据存储库目前包含224个包。实验数据包具有重要的作用,例如演示方法的示例数据集;有些可以用于标杆学习(benchmarking)和比较方法,有些是对科学论文中报告的分析的可重复描述(reproducible descriptions)(例如,Hiiragi2013包的数据和片段复制了最近报道的小鼠胚胎中单个细胞的转录组分析)。已发表的实验数据存档(Archives)可以使用GEOquery, ArrayExpress and SRAdb软件包来获取。
Integrative analysis. 综合分析
高通量检测,如测序、流式细胞术和质谱继续降低成本和提高质量。由同一组样品的几种实验组成的分析越来越普遍。对多种数据类型的综合分析可能是基因组数据分析中最不可标准化的任务(the least standardizable task),其中最明显的是需要一个高级别语言(如R)灵活工作环境。
多种实验的综合分析通常依赖于通过基因组定位或注释进行连接。这包括将基因组位置与转录本和蛋白质序列、在相同途径或过程中发挥作用的其他基因产物蛋白质、以及许多其他可能的关联联系起来。多种相关的数据类型和注释的组合计算是综合基因组分析(integrative genomic analysis)的本质。
要进行这种分析,必须使用标识符、参考基因组、基因模型、坐标系统等兼容系统。例如,RNA编辑位点的识别需要用户对个体有一个准确的基因型,以及与该基因型比对的RNA-seq reads,而来自DNA-seq实验的变异识别不仅应该保留关于比对软件的信息,而且还应该保留所使用的基因组的精确版本。Bioconductor软件旨在使跟踪这些问题简单和自动。这也有助于其他分析人员确定是否以及如何将特定处理的数据集与其他数据集整合。
Visualization 可视化
可视化是基因组数据分析的关键。 我们区分了三种主要场景,每种场景都有不同的需求。第一种是“发现模式”(discovery mode)中的快速交互数据探索。第二种是研究合作者对初步结果(initial results)的记录、报告和讨论(recording, reporting and discussion),通常通过具有相互关联的图(interlinked plots)和提供交互功能的工具提示(tool-tips providing interactive functionality)的网页进行。脚本通常与文档一起提供,以记录所做的事情。 第三是科学出版物(scientific publications)和报告(presentations)的图形,以直观和有吸引力(intuitive and attractive)的形式显示基本信息。R环境为所有这些类型的可视化提供了强大的支持——使用各种R图形设备(R graphics devices)或提供更多交互的基于HTML5的可视化接口(HTML5-based visualization interfaces)——Bioconductor充分利用这些设施。在实践中,可视化通常要求用户对数据进行计算,例如数据转换和过滤、概括和降维,或对统计模型进行拟合。所需的表现力(expressivity)并不总是很容易在点击界面(point-and-click interface)中实现,而是很容易在高级编程语言中实现。 此外,许多可视化,如热图或主成分分析图,都与数学和统计模型联系在一起——因此需要访问科学计算库。
基因组学特异性可视化类型是沿着基因组坐标(genomic coordinates)绘制的。有几个软件包创建了有吸引力的沿基因组数据轨道(along-genome data tracks)展示,包括Gviz和ggbio(图3)。这些包直接操作在常见的Bioconductor数据结构上,从而与现有的数据操作(available data manipulation)和建模功能(modeling functionality)整合(integrate)。这种可视化的一个基本操作是用基因组区域(genomic regions)计算,而biovizBase包提供了范围基础设施(Ranges infrastructure)和绘图包之间的桥梁。 R和基因组浏览器(genome browsers)之间的直接通信由rtracklayer(用于UCSC基因组浏览器)和SRAdb(用于Integrative Genomics Viewer)包实现。
基因组数据集的大小有时超过了可以用标准内存数据模型(standard in-memory data models)来管理的数据,然后高性能计算的工具开始发挥作用。一个例子是使用rhdf5——一种HDF5大数据管理系统(HDF5 large data management system)(http://www.hdfgroup.org/hdf5)的接口——通过h5vc包将大的、基因组大小的数据立方体(data cubes)切成易于快速交互计算和可视化的块(chunks)。ggbio和Gviz都对文件格式进行范围限制的查询,包括bam、bgzip/tabix和bigwig,通过Rsamtools和rtracklayer快速集成来自特定基因组区域的多个文件的数据。
图3. 沿基因组坐标与ggbio的可视化。该图显示了来自小鼠造血干细胞(HSC)和四个多能祖细胞(MPP)的RNA-seq数据的基因Apoe。不相交的bin(中心)是从底部面板(panel)中显示的四个转录本亚型(transcript isoforms)计算出来的。顶部面板的y轴显示了用DEXSeq方法估计的相对外显子使用系数(the relative exon usage coefficients)。检测到的细胞组分之间差异使用的区域在中心面板中呈暗红色。
Reproducible research 重复性研究
追溯(retrace)在基因组学研究项目中执行的计算步骤可能是令人惊讶的困难。Bioconductor的目标之一是帮助科学家报告他们的分析,使第三方能够准确地重新计算(exact recreation)所有将输入数据转化为结果的计算,包括图、表格和数字。该项目的贡献包括强调读写编程插图(literate programming vignettes),BiocStyle和ReportingTools包,实验数据和注释包的组装以及所有先前发布的包的存档和可用性。在更广泛的R社区中的一些发展,包括knitr和rmarkdown软件包以及集成开发环境Rstudio,使得编写有吸引力的小片段变得很容易。除了传统的交付格式pd f文件外,新一代的工具还允许使用html5设施进行交互式可视化,包括“挖掘”(drill-down)来扩展对特定细节的视图、刻面(faceted)过滤和综合的超链接。完全远程可重现性(remote reproducibility)仍然是一个具有挑战性的问题,特别是对于需要大量计算资源的计算,或通过短暂(transient)或限制访问(restricted access)(例如云)的基础设施访问数据的计算。 然而,许多完全可复制的研究报告的例子已经被Bioconductor报告了。
Alternative and complementary tools 替代和补充工具
使用Bioconductor需要自愿用高级计算机语言修改和最终编写脚本,在不同的算法和软件包之间做出明智的选择,并学习足够的R来完成不可避免的数据争论和故障排除。存在替代和互补的工具;特别是,用户可能准备交换一些损失(trade some loss)灵活性、自动化或功能,以便与软件进行更简单的交互,例如通过运行单目的工具(single-purpose tools)或使用点击接口(point-and-click interface)。
工作流和数据管理系统,如Galaxy和IlluminaBasePace,为集合和部署易于使用的来自不同语言和框架的成分的分析流程(easy-touse analysis pipelines)提供了一种方法。IPython笔记本提供了一个有吸引力的交互式工作簿环境。 虽然它的起源是python编程语言,但它现在支持许多语言,包括R。在实践中,许多用户会发现一个对他们最有效的平台组合。
The developer perspective 开发人员视角
The package ecosystem 包的生态系统
Bioconductor的所有软件都是以R包的形式发布(distributed)的。这简化了软件的交付、使用和维护,但给开发人员带来了负担。他们需要学习如何编写R包,包括文档和测试案例。
开发人员不断更新他们的包,以扩展功能,提高性能,修复错误和增强文档。这些更改被引入到Bioconductor的开发分支(development branch)中,并每6个月发布给最终用户;使用中央的、公开可读的Subversion软件存储库(central, publicly readable Subversion software repository)跟踪更改,因此所有更改的详细信息都是完全可访问的。同时(Simultaneously),R本身也在不断变化,通常是围绕性能增强和功能增加。由于这种动态环境,所有包都要经过日常测试程序(daily testing procedure)。 测试是完全自动化的,并确保包文档中的所有代码示例以及进一步的单元测试在没有错误的情况下运行。 测试的顺利完成,将会导致R包建成并提交公众。
许多Bioconductor包有广泛的代码示例和测试,作者可以通过这些示例和测试确保它们的软件保持功能,即使在组件上下游变化时也是如此。同样重要的是保持文档与代码中的更改同步。 虽然测试系统对中央存储库和所有开发人员都是很大的负担,但它提供了一定程度的软件一致性和可用性(coherence and usability),这在具有多样化和分布式开发人员群体(distributed developer community)的软件项目中是罕见的。当然,存在限制:测试的范围和严格性(the reach and stringency),超过所需的最小值,取决于包的作者。 自然遗传学的一篇社论(an editorial in Nature Genetics)强调了存储库(repository)的质量,其中列出了Comprehensive R Archive Network (CRAN)和Bioconductor,作为该期刊认可的所有编程语言的唯一软件存储库。
Interoperability 协同工作能力
不同阶段和不同类型分析的软件组件(software components)之间的互操作性(Interoperability)对于Bioconductor的成功至关重要。 互操作性是通过定义通用数据结构(common data structures)来建立的,包作者预计将使用这些数据结构(表2)。在技术上,Bioconductor的公共数据结构被实现为R语言的S4面向对象系统中的类。 以这种方式,包括封装(encapsulation)、从实现中提取接口(abstraction of interface from implementation)、多态、继承和反射(polymorphism, inheritance and reflection)在内的有用的软件概念是直接可用的。它允许核心任务的跨学科采用(be adopted across disciplines),如样本数据和元数据的匹配,并为社区发展提供了基础。
将这种表示(通用数据结构)与生物信息学中流行的替代品(popular alternatives in bioinformatics)进行比较是有指导意义的:基于文件的数据格式约定(file-based data format conventions)和语言的原始数据结构(primitive data structures),如矩阵或电子表格表。使用基于文件的格式,诸如取子集或数据转换之类的操作可能是繁琐和容易出错的,并且文件的序列化性质(serialized nature)阻碍了需要对数据进行全局视图(a global view of the data)的操作。在这两种情况下,有效性检查(validity checking)和反思不能依赖于预先形成或标准化的支持,需要重新为每一项公约从零开始(from scratch again)编程——或者完全缺失。一旦一个项目的数据分布在多个表或文件中,数据记录的比对或标识符的一致性就岌岌可危,互操作性由于不得不操纵分散的、松散协调的数据集(disperse, loosely coordinated data collections)而受到阻碍。
Shared infrastructure for distributed development 分布式发展共享基础设施
生物数据的分析依赖于参考资源,如基因组序列、基因模型、基因标识和注释以及其他基因组特征(genome sequences, gene models, identifiers and annotation of genes and other genomic features)。 项目提供这些资源的标准化R表示(Standardized R representations),以避免工作冗余(redundancy of efforts),并实现数据整合(data integration)。
开发人员还受益于支持他们想要执行的操作的基本软件库功能(fundamental software library functions)。 例如,43%的Bioconductor包直接或间接地使用了范围基础设施(Ranges infrastructure),近60%依赖于Biobase,70%以上依赖于BiocGenerics。通过使用共享基础设施,开发人员可以摆脱自己创建和维护这些组件的任务,他们可以专注于自己独特的特定领域的贡献。
Merits of a high-level language 高级语言的优点
Functionality 功能性
软件工程是一个复杂的过程。 科学软件的共同期望包括功能性、灵活性和稳健性(functionality, flexibility and robustness)。在发展科学方法的早期阶段,这些目标应该优先考虑,过早地优化(premature optimization)速度或其他硬件资源往往会分散注意力。因此,以R这样的高级语言工作是一个快速有效的选择。一旦正确的方法已经解决,有足够的时间担心计算是否真的需要更快和瓶颈(bottleneck)在哪里。
Extensibility 延展性
R提供了操作数据的语法(syntax)。该语法可以很容易地映射到其他语言。一旦一个想法被审核和测试(vetted and tested),开发人员可以使用其他语言(如c)中的关键代码部分来提高性能。例如,范围基础设施(Ranges infrastructure)已经经历了这个过程的许多迭代(iterations)。 或者,正如我们对Rsamtools包所做的那样,R的外部语言接口(foreign language interfaces)可以被用来访问R内建立的软件库,这使得用R编写的高级代码能够无缝地使用SAMtools软件的功能。
Reuse 重新使用
通过与现有库的接口重新使用软件是Bioconductor的指导原则之一。 开发好的软件是困难和耗时的,如果完成一项任务已经有一个经过良好测试、良好支持的(well-tested, well-supported)实现(implementation)并具有合适的许可证(suitable license),我们鼓励开发人员在此基础上进行开发。使用R的外部语言接口,他们可以调用安装在系统其他地方的第三方软件,或者他们可以用自己的Bioconductor包来包含和重新分发(include and redistribute)它。在R生态系统中,CRAN和Bioconductor存储库为开发人员提供了对很多包的访问。它们支持快速发展,因为它们是几乎不费吹灰之力就可以安装和使用的单元,它们封装了通常是多年努力集中(concentrate of years of effort)的诀窍(know-how)。
Performance and scalability 性能和可伸缩性
有效地处理大数据需要将内存和处理器的使用(memory and processor use)与可用资源(available resources)相匹配的编程实践。 在向量或数组上操作时R是有效的,因此高性能和可伸缩算法(high-performing and scalable algorithms)使用的模式是将数据分割成可管理的块(manageable chunks)并迭代它们(iterate over them)。一个例子是处理bam、fastq或VCF文件的函数的yieldSize参数。块可以并行评估以获得速度。BiocParallel软件包帮助开发人员在不同的计算环境中使用并行评估(employ parallel evaluation),同时使用户免于(shielding)必须配置(configure)技术。它连接到后端(back ends),用于共享内存和集群配置(cluster configurations)。GenomicFiles包将并行化(parallelization)与跨多个文件的分块操作联系起来。Bioconductor可作为虚拟机图像(virtual machine image)配置给高性能计算在亚马逊的弹性计算云(EC2)。
Bioconductor成功的一个关键方面是接触用户和开发人员的能力(reach both users and developers)。对于用户来说,有许多通用案例的包和工作流(packages and workflows),以及通过表格、可视化和报告有效地传达结果的工具(facilities)。分析脚本很容易共享,从而促进可重复的研究。对于想要创建和传播新想法的开发人员来说,有一个维护良好的基础设施来进行稳健的代码开发。我们的社区努力平衡用户需求,同时在基因组数据科学创新的前沿工作。我们受用户和开发人员的长处和奉献精神(dedication)的驱使,对项目的未来持乐观态度。