【Methods】Accessing Ensembl annotation with biomaRt

【Methods】Accessing Ensembl annotation with biomaRtAccessingEnsemblannotationwithbiomaRtIntroductionMikeL.Smith,SteffenDurinck,WolfgangHuber12August2021Package:biomaRt2.49.4Introduction

Accessing Ensembl annotation with biomaRt

Mike L. Smith, Steffen Durinck, Wolfgang Huber

12 August 2021

Package: biomaRt 2.49.4


引言

迄今为止, 访问 Ensembl 中可用数据最常使用 biomaRt 包。 考虑到这一点,biomaRt 提供了许多专门为 Ensembl 提供的 BioMart 实例而定制的功能。 本文详细介绍了此 Ensembl 特定功能,并提供了许多示例用例,可用作指定您自己的查询的基础。

选择 Ensembl BioMart 数据库和数据集

每次使用 biomaRt 进行分析都从选择要使用的 BioMart 数据库开始。 下面的命令会将我们连接到 Ensembl 最新版本的 Human Genes BioMart。

> library(biomaRt)
> ensembl <- useEnsembl(biomart = "genes", dataset = "hsapiens_gene_ensembl")
只听到从架构师办公室传来架构君的声音:
芄兰之叶,童子佩韘。有谁来对上联或下联?

如果这是您第一次使用 biomaRt ,您可能想知道如何找到我们提供给 useEnsembl() 命令的两个参数。 这是一个两步过程,但是一旦您知道所需的设置,您就可以将上面显示的版本用作单个命令。 这些初始步骤概述如下。

步骤1:确定您需要的数据库

第一步是找到 Ensembl 当前提供的 BioMart 服务的名称。 我们可以使用函数 listEnsembl() 来完成此操作,该函数将显示所有可用的 Ensembl BioMart Web 服务。 第一列给出了我们应该为 useEnsembl()中的 biomart 参数提供的名称,第二列给出了数据集以及 Ensembl 版本的更全面的标题。

此代码由Java架构师必看网-架构君整理
> listEnsembl() biomart version 1 genes Ensembl Genes 104 2 mouse_strains Mouse strains 104 3 snps Ensembl Variation 104 4 regulation Ensembl Regulation 104

现在可以使用 useEnsembl() 函数连接到所需的 BioMart 数据库。 应该从 listEnsembl() 的输出中为 biomart 参数提供一个有效的名称。 在下一个示例中,我们将选择主 Ensembl 集市,它提供对基因注释信息的访问。

> ensembl <- useEnsembl(biomart = "genes")

如果我们打印当前的 ensembl 对象,我们可以看到 ENSEMBL_MART_ENSEMBL 数据库 1 已被选中,但未选择任何数据集。

此代码由Java架构师必看网-架构君整理
> ensembl Object of class 'Mart': Using the ENSEMBL_MART_ENSEMBL BioMart database No dataset selected.

步骤2:选择一个数据集

BioMart 数据库可以包含多个数据集。 例如,在 Ensembl 基因集市中,每个物种都是不同的数据集。 在下一步中,我们使用函数 listDatasets() 查看所选 BioMart 中可用的数据集。
注意:这里我们使用函数 head() 仅显示前 5 个条目,因为完整列表有 202 个条目。

> datasets <- listDatasets(ensembl)
> head(datasets)
                       dataset                           description     version
1 abrachyrhynchus_gene_ensembl Pink-footed goose genes (ASM259213v1) ASM259213v1
2     acalliptera_gene_ensembl      Eastern happy genes (fAstCal1.2)  fAstCal1.2
3   acarolinensis_gene_ensembl       Green anole genes (AnoCar2.0v2) AnoCar2.0v2
4    acchrysaetos_gene_ensembl       Golden eagle genes (bAquChr1.2)  bAquChr1.2
5    acitrinellus_gene_ensembl        Midas cichlid genes (Midas_v5)    Midas_v5
6    amelanoleuca_gene_ensembl       Giant panda genes (ASM200744v2) ASM200744v2

listDatasets() 函数将返回每个可用的选项,但是当结果列表很长时,这可能很笨拙,需要大量滚动才能找到您感兴趣的条目。 biomaRt 还提供了 searchDatasets() 函数,它将尝试找到任何 匹配特定术语或模式的条目。 例如,如果我们想在我们的 ensembl mart 中找到包含术语“hsapiens”的任何数据集的详细信息,我们可以执行以下操作:

> searchDatasets(mart = ensembl, pattern = "hsapiens")
                 dataset              description    version
80 hsapiens_gene_ensembl Human genes (GRCh38.p13) GRCh38.p13

要使用数据集,我们可以使用函数 useDataset() 更新我们的 Mart 对象。 在下面的示例中,我们选择使用 hsapiens 数据集。

> ensembl <- useDataset(dataset = "hsapiens_gene_ensembl", mart = ensembl)

如前所述,如果预先知道要使用的数据集,即您之前已经完成了此过程,我们可以一步选择数据库和数据集:

> ensembl <- useEnsembl(biomart = "genes", dataset = "hsapiens_gene_ensembl")

Ensembl镜像站点

为了提高性能,Ensembl 提供了分布在全球各地的站点的多个镜像。 当您使用 useEnsembl() 的默认设置时,您的查询将被定向到地理位置最近的镜像。 理论上这应该给你最好的性能,但在实践中并非总是如此。 例如,如果最近的镜像遇到来自其他用户的许多查询,它可能对您来说表现不佳。 您可以使用 mirror 参数 useEnsembl() 来显式请求特定镜像。

> ensembl <- useEnsembl(biomart = "ensembl",dataset = "hsapiens_gene_ensembl",mirror = "useast")

mirror 参数的值是:us Eastern、us west、asia 和 www。

使用 Ensembl 的存档版本

可以通过 biomaRt 查询 Ensembl 的存档版本,因此您可以在整个项目期间保持一致的注释。

biomaRt 提供了函数 listEnsemblArchives() 来查看可用的 Ensembl 档案。 此函数不接受任何参数,并生成一个表,其中包含可用存档的名称和版本号、首次发布日期以及可以访问它们的 URL。

> listEnsemblArchives()
             name     date                                 url version current_release
1  Ensembl GRCh37 Feb 2014          https://grch37.ensembl.org  GRCh37                
2     Ensembl 104 May 2021 https://may2021.archive.ensembl.org     104               *
3     Ensembl 103 Feb 2021 https://feb2021.archive.ensembl.org     103                
4     Ensembl 102 Nov 2020 https://nov2020.archive.ensembl.org     102                
5     Ensembl 101 Aug 2020 https://aug2020.archive.ensembl.org     101                
6     Ensembl 100 Apr 2020 https://apr2020.archive.ensembl.org     100                
7      Ensembl 99 Jan 2020 https://jan2020.archive.ensembl.org      99                
8      Ensembl 98 Sep 2019 https://sep2019.archive.ensembl.org      98                
9      Ensembl 97 Jul 2019 https://jul2019.archive.ensembl.org      97                
10     Ensembl 96 Apr 2019 https://apr2019.archive.ensembl.org      96                
11     Ensembl 95 Jan 2019 https://jan2019.archive.ensembl.org      95                
12     Ensembl 94 Oct 2018 https://oct2018.archive.ensembl.org      94                
13     Ensembl 93 Jul 2018 https://jul2018.archive.ensembl.org      93                
14     Ensembl 92 Apr 2018 https://apr2018.archive.ensembl.org      92                
15     Ensembl 91 Dec 2017 https://dec2017.archive.ensembl.org      91                
16     Ensembl 90 Aug 2017 https://aug2017.archive.ensembl.org      90                
17     Ensembl 89 May 2017 https://may2017.archive.ensembl.org      89                
18     Ensembl 88 Mar 2017 https://mar2017.archive.ensembl.org      88                
19     Ensembl 87 Dec 2016 https://dec2016.archive.ensembl.org      87                
20     Ensembl 86 Oct 2016 https://oct2016.archive.ensembl.org      86                
21     Ensembl 85 Jul 2016 https://jul2016.archive.ensembl.org      85                
22     Ensembl 80 May 2015 https://may2015.archive.ensembl.org      80                
23     Ensembl 77 Oct 2014 https://oct2014.archive.ensembl.org      77                
24     Ensembl 75 Feb 2014 https://feb2014.archive.ensembl.org      75                
25     Ensembl 67 May 2012 https://may2012.archive.ensembl.org      67                
26     Ensembl 54 May 2009 https://may2009.archive.ensembl.org      54

或者,可以使用 http://www.ensembl.org 网站查找存档版本。 从主页向下滚动页面底部,单击“在存档中查看”并选择您需要的存档。

您会注意到,即使是当前版本的 Ensembl,也有一个存档 URL。 如果您希望确保您现在编写的脚本将来返回完全相同的结果,那么使用它会很有用。 使用 www.ensembl.org 将始终访问当前版本,因此检索到的数据可能会随着新版本的出现而改变。

无论您使用哪种方法查找要查询的存档的 URL,复制该 url 并在主机参数中使用它,如下所示连接到指定的 BioMart 数据库。 下面的例子展示了如何查询 Ensembl 54。

> listEnsembl(version = 95)
        biomart               version
1         genes      Ensembl Genes 95
2 mouse_strains      Mouse strains 95
3          snps  Ensembl Variation 95
4    regulation Ensembl Regulation 95
> ensembl95 <- useEnsembl(biomart = 'genes',dataset = 'hsapiens_gene_ensembl',version = 95)

使用Ensembl Genomes

Ensembl Genomes 扩大了工作范围,从主要 Ensembl 项目提供的脊椎动物基因组提供注释,跨越分类空间,为原生生物、植物、后生动物和真菌提供单独的 BioMart 接口。

您可以以与前面显示的函数类似的方式使用函数 listEnsemblGenomes() 和 useEnsemblGenomes()。 例如,首先我们可以列出可用的 Ensembl Genomes 集市:

> listEnsemblGenomes()
              biomart                        version
1       protists_mart      Ensembl Protists Genes 51
2 protists_variations Ensembl Protists Variations 51
3          fungi_mart         Ensembl Fungi Genes 51
4    fungi_variations    Ensembl Fungi Variations 51
5        metazoa_mart       Ensembl Metazoa Genes 51
6  metazoa_variations  Ensembl Metazoa Variations 51
7         plants_mart        Ensembl Plants Genes 51
8   plants_variations   Ensembl Plants Variations 51

我们可以选择 Ensembl Plants 数据库,并搜索拟南芥的数据集名称。

> ensembl_plants <- useEnsemblGenomes(biomart = "plants_mart")
> searchDatasets(ensembl_plants, pattern = "Arabidopsis")
            dataset                         description version
4  ahalleri_eg_gene Arabidopsis halleri genes (Ahal2.2) Ahal2.2
5   alyrata_eg_gene    Arabidopsis lyrata genes (v.1.0)   v.1.0
8 athaliana_eg_gene Arabidopsis thaliana genes (TAIR10)  TAIR10

然后我们可以使用这些信息来创建我们的 Mart 对象,该对象将访问正确的数据库和数据集。

> ensembl_arabidopsis <- useEnsemblGenomes(biomart = "plants_mart", dataset = "athaliana_eg_gene")

如何构建 biomaRt 查询

一旦我们选择了要从中获取数据的数据集,我们需要创建一个查询并将其发送到 Ensembl BioMart 服务器。 我们使用 getBM() 函数执行此操作。

getBM() 函数有三个需要引入的参数:过滤器、值和属性。

Filters和values用于定义对查询的限制。 例如,如果您想将输出限制为位于人类 X 染色体上的所有基因,则可以使用value为“X”的filter chromosome_name。 listFilters() 函数显示所选数据集中的所有可用过滤器。

> filters = listFilters(ensembl)
> filters[1:5,]
             name              description
1 chromosome_name Chromosome/scaffold name
2           start                    Start
3             end                      End
4      band_start               Band Start
5        band_end                 Band End

Attributes定义了我们有兴趣检索的数据。 例如,也许我们想要检索基因符号(gene symbols)或染色体坐标(chromosomal coordinates)。 listAttributes() 函数显示所选数据集中的所有可用属性。

> attributes = listAttributes(ensembl)
> attributes[1:5,]
                           name                  description         page
1               ensembl_gene_id               Gene stable ID feature_page
2       ensembl_gene_id_version       Gene stable ID version feature_page
3         ensembl_transcript_id         Transcript stable ID feature_page
4 ensembl_transcript_id_version Transcript stable ID version feature_page
5            ensembl_peptide_id            Protein stable ID feature_page

getBM() 函数是 biomaRt 中的主要查询函数。 它有四个主要论点:

  • attributes:是一个想要检索的属性向量(=查询的输出)。
  • filters:是一个过滤器向量,用作查询的输入。
  • values:过滤器的值向量。 如果使用多个过滤器,则 values 参数需要一个值列表,其中列表中的每个位置对应于过滤器参数中过滤器的位置(参见下面的示例)。
  • mart:是 Mart 类的对象,由 useEnsembl() 函数创建。

注意:对于 Ensembl 的一些常用查询,可以使用包装函数:getGene() 和 getSequence()。 这些函数调用带有硬编码过滤器和属性名称的 getBM() 函数。

现在我们选择了 BioMart 数据库和数据集,并了解了属性、过滤器和过滤器的值; 我们可以构建一个 biomaRt 查询。 让我们对以下问题进行简单查询:我们有一个来自 u133plus2 平台的 Affymetrix 标识符列表,我们想使用 Ensembl 映射检索相应的 EntrezGene 标识符

u133plus2 平台将作为此查询的过滤器,作为此过滤器的值,我们使用我们的 Affymetrix 标识符列表。 作为查询的输出(属性),我们希望检索 EntrezGene 和 u133plus2 标识符,因此我们得到这两个标识符的映射结果。 可以分别使用 listAttributes() 和 listFilters() 函数检索我们必须用于指定属性和过滤器的确切名称。 现在让我们运行查询:

> affyids <- c("202763_at","209310_s_at","207500_at")
> getBM(attributes = c('affy_hg_u133_plus_2', 'entrezgene_id'), filters = 'affy_hg_u133_plus_2', values = affyids,  mart = ensembl)
  affy_hg_u133_plus_2 entrezgene_id
1           202763_at           836
2         209310_s_at           837
3           207500_at           838

3.1 搜索filters和attributes

函数 listAttributes() 和 listFilters() 将返回它们各自类型的每个可用选项,这会产生很长的输出,很难找到您感兴趣的值。 biomaRt 还提供了函数 searchAttributes() 和 searchFilters( ) ,它将尝试以与之前看到的 searchDatasets() 类似的方式查找与特定术语或模式匹配的任何条目。 您可以使用这些函数来查找您可能感兴趣的可用属性和过滤器。 下面的示例返回包含模式“hgnc”的所有属性的详细信息。

> searchAttributes(mart = ensembl, pattern = "hgnc")
              name        description         page
64         hgnc_id            HGNC ID feature_page
65     hgnc_symbol        HGNC symbol feature_page
96 hgnc_trans_name Transcript name ID feature_page

对于高级使用,请注意模式参数采用正则表达式。 这意味着您可以根据需要创建更复杂的查询。 想象一下,例如,我们有字符串 ENST00000577249.1,我们知道它是某种 Ensembl ID,但我们不确定合适的过滤器术语是什么。 接下来显示的示例使用一种模式,该模式将查找包含术语“ensembl”和“id”的所有过滤器。 这允许我们将过滤器列表减少到仅适用于我们的示例的过滤器列表。

> searchFilters(mart = ensembl, pattern = "ensembl.*id")
                            name                                                    description
57               ensembl_gene_id                       Gene stable ID(s) [e.g. ENSG00000000003]
58       ensembl_gene_id_version       Gene stable ID(s) with version [e.g. ENSG00000000003.15]
59         ensembl_transcript_id                 Transcript stable ID(s) [e.g. ENST00000000233]
60 ensembl_transcript_id_version Transcript stable ID(s) with version [e.g. ENST00000000233.10]
61            ensembl_peptide_id                    Protein stable ID(s) [e.g. ENSP00000000233]
62    ensembl_peptide_id_version     Protein stable ID(s) with version [e.g. ENSP00000000233.5]
63               ensembl_exon_id                              Exon ID(s) [e.g. ENSE00000000003]

由此我们可以将 ENST00000577249.1 与描述列中给出的示例进行比较,可以看到它是一个带有版本的 Transcript ID。 因此,与其一起使用的适当过滤器值是 ensembl_transcript_id_version。

3.2 使用预定义的过滤器值

许多过滤器都有一个预定义的值列表,这些值已知在它们关联的数据集中。 一个常见的例子是在 Ensembl 搜索数据集时染色体的名称。 在 BioMart 的这个在线界面中,这些可用选项显示为一个列表,如图 1 所示。
Ensembl染色体数据集过滤器
图 1:染色体/Scaffold字段可用的选项仅限于基于此数据集中的值的预先确定的列表

可以使用函数 listFilterOptions() 在 R 会话中列出它,向它传递一个 Mart 对象和过滤器的名称。 例如,要列出可能的染色体名称,您可以运行以下命令:

> listFilterOptions(mart = ensembl, filter = "chromosome_name")
  [1] "1"                                      "2"                                      "3"                                     
  [4] "4"                                      "5"                                      "6"                                     
  [7] "7"                                      "8"                                      "9"                                     
 [10] "10"                                     "11"                                     "12"                                    
 [13] "13"                                     "14"                                     "15"                                    
 [16] "16"                                     "17"                                     "18"                                    
 [19] "19"                                     "20"                                     "21"

也可以通过 searchFilterOptions() 搜索可用值列表。 在下面的两个示例中,第一个返回所有以“GL”开头的染色体名称,而第二个将查找包含字符串“Crohn”的任何表型描述。

> searchFilterOptions(mart = ensembl, filter = "chromosome_name", pattern = "^GL")
 [1] "GL000009.2" "GL000194.1" "GL000195.1" "GL000205.2" "GL000213.1" "GL000216.2" "GL000218.1" "GL000219.1" "GL000220.1" "GL000225.1"
> searchFilterOptions(mart = ensembl, filter = "phenotype_description", pattern = "Crohn")
[1] "INFLAMMATORY BOWEL DISEASE CROHN DISEASE 1"  "INFLAMMATORY BOWEL DISEASE CROHN DISEASE 10" "INFLAMMATORY BOWEL DISEASE CROHN DISEASE 19"
[4] "INFLAMMATORY BOWEL DISEASE CROHN DISEASE 30" "NON RARE IN EUROPE: Crohn disease" 

3.3 查找有关过滤器的更多信息

3.3.1 过滤器类型

布尔过滤器在 biomaRt 中需要一个值 TRUE 或 FALSE。 设置值 TRUE 将包括满足过滤器要求的所有信息。 设置 FALSE 将排除满足过滤器要求的信息,并返回所有不满足过滤器的值。 对于大多数过滤器,它们的名称指示类型是否为布尔值,并且它们通常以“with”开头。 然而,这不是一个规则,为了确保您的类型正确,您可以使用函数 filterType() 来调查您要使用的过滤器的类型。

> filterType("with_affy_hg_u133_plus_2", ensembl)
[1] "boolean_list"

3.4 属性页

对于 Ensembl 等大型 BioMart 数据库,listAttributes() 函数显示的属性数量可能非常大。 在 BioMart 数据库中,属性被放在页面中,例如sequences、features、Ensembl 的homologs。 可以使用 attributePages() 函数获得各个 BioMart 数据集中存在的属性页面的概览。

> pages = attributePages(ensembl)
> pages
[1] "feature_page" "structure"    "homologs"     "snp"          "snp_somatic"  "sequences" 

为了向我们展示属于特定页面的较小属性列表,我们现在可以在 listAttributes() 函数中指定它。

> head(listAttributes(ensembl, page="feature_page"))
                           name                  description         page
1               ensembl_gene_id               Gene stable ID feature_page
2       ensembl_gene_id_version       Gene stable ID version feature_page
3         ensembl_transcript_id         Transcript stable ID feature_page
4 ensembl_transcript_id_version Transcript stable ID version feature_page
5            ensembl_peptide_id            Protein stable ID feature_page
6    ensembl_peptide_id_version    Protein stable ID version feature_page

我们现在得到一个与基因所在区域相关的属性的简短列表。

3.5 使用select()

为了为 Bioconductor 中的所有注释提供更一致的接口,已实现 select()、columns()、keytypes() 和 keys() 以包装上面的一些现有功能。 这些方法的调用方式与它们在项目的其他部分中使用的方式相同,只是它们不采用 AnnotationDb 派生类,而是采用 Mart 派生类作为其第一个参数。 否则用法应该基本相同。 您仍然使用 columns() 来发现可以从 Mart 中提取的内容,并使用 keytypes() 来发现哪些内容可以用作 select() 的键。

> mart <- useEnsembl(dataset = "hsapiens_gene_ensembl", biomart='ensembl')
> head(keytypes(mart),n=3)
[1] "affy_hc_g110"        "affy_hg_focus"       "affy_hg_u133_plus_2"
> head(columns(mart), n = 3)
[1] "3_utr_end"   "3_utr_end"   "3_utr_start"

您仍然可以使用 keys() 来提取特定密钥类型的潜在密钥。

> k = keys(mart, keytype="chromosome_name")
> head(k, n=3)
[1] "1" "2" "3"

使用 keys() 时,您甚至可以利用其他键方法可用的额外参数.

> k = keys(mart, keytype="chromosome_name", pattern="LRG")
> head(k, n=3)
character(0)

不幸的是,keys() 方法不适用于所有密钥类型,因为它们并非全部受支持。

但是您仍然可以在此处使用 select() 来提取与特定键集匹配的数据列(这基本上是 getBM() 的包装器)。

> affy=c("202763_at","209310_s_at","207500_at")
> select(mart, keys=affy, columns=c('affy_hg_u133_plus_2','entrezgene_id'), keytype='affy_hg_u133_plus_2')
  affy_hg_u133_plus_2 entrezgene_id
1           202763_at           836
2         209310_s_at           837
3           207500_at           838

那么当我们已经有了像 getBM() 这样的函数时,我们为什么还要这样做呢? 有两个原因:1)对于熟悉 select 及其辅助方法的人,他们现在可以继续使用 biomaRt 进行他们已经熟悉的相同类型的调用;2)因为 select 方法在其他地方的许多地方实现 ,这些方法是共享的,这一事实允许更方便地以编程方式访问所有这些资源。 一个利用此优势的包示例是 OrganismDbi包。 可以像访问一种资源一样访问多个包。

结果缓存

为了节省时间和计算资源,biomaRt 将尝试识别您何时重新运行之前执行过的查询。 每次运行新查询时,结果都会保存到您计算机上的缓存中。 如果某个查询被识别为之前已经运行过,而不是将查询提交到服务器,结果将从缓存中加载。

您可以使用 biomartCacheInfo() 函数获取有关缓存大小和位置的一些信息:

> biomartCacheInfo()
biomaRt cache
- Location: C:\Users\MSI\AppData\Local/biomaRt/biomaRt/Cache
- No. of files: 2
- Total size: 239 bytes

可以使用命令 biomartCacheClear() 删除缓存。 这将删除所有缓存的文件。

缓存的默认位置特定于您的计算机和操作系统。 如果您想使用特定位置,您可以通过 BIOMART_CACHE 环境变量进行设置。 您可以在 R 之外设置它,也可以通过调用 Sys.setenv(BIOMART_CACHE = "</where/i/store/my/cache>") 在 R 中设置它。下面的代码给出了一个示例,我们将位置更改为 一个临时文件,然后确认位置已更改。

> Sys.setenv(BIOMART_CACHE = tempdir())
> biomartCacheInfo()
biomaRt cache
- Location: C:\Users\MSI\AppData\Local\Temp\Rtmp02rPad
- No. of files: 0
- Total size: 0 bytes

biomaRt 辅助函数

本节描述了一组 biomaRt 辅助函数,可用于导出 FASTA 格式序列、检索某些过滤器的值以及以更系统的方式探索可用的过滤器和属性。

5.1 exportFASTA

可以使用 exportFASTA() 函数将 getSequence() 函数获得的 data.frames 导出到 FASTA 文件。 必须使用 file 参数指定要导出的 data.frame 和文件名。

biomaRt 查询示例

在下面的部分中,描述了各种示例查询。 每个例子都被写成一个任务,我们必须想出一个 biomaRt 解决方案来解决这个问题。

6.1 用 HUGO 符号和相应基因的染色体位置注释一组 Affymetrix 标识符

我们有一个 Affymetrix hgu133plus2 标识符列表,我们想检索 HUGO 基因符号、染色体名称、开始和结束位置以及相应基因的条带。 listAttributes() 和 listFilters() 函数为我们提供了可用属性和过滤器的概览,我们在这些列表中查找我们需要的相应属性和过滤器名称。 对于此查询,我们需要以下属性:hgnc_symbol、chromsome_name、start_position、end_position、band 和 affy_hg_u133_plus_2(因为我们希望输出中的这些属性提供与原始 Affymetrix 输入标识符的映射。此查询中有一个过滤器,它是 affy_hg_u133_plus_2 过滤器,因为我们使用 Affymetrix 标识符列表作为输入。将所有这些放在 getBM() 中并执行查询给出:

> affyids=c("202763_at","209310_s_at","207500_at")
> getBM(attributes = c('affy_hg_u133_plus_2', 'hgnc_symbol', 'chromosome_name', 'start_position', 'end_position', 'band'), filters = 'affy_hg_u133_plus_2', values = affyids, mart = ensembl)
  affy_hg_u133_plus_2 hgnc_symbol chromosome_name start_position end_position  band
1           202763_at       CASP3               4      184627696    184649509 q35.1
2         209310_s_at       CASP4              11      104942866    104969366 q22.3
3           207500_at       CASP5              11      104994235    105023168 q22.3

6.2 使用 GO annotation注释一组 EntrezGene 标识符

在这个任务中,我们从一个 EntrezGene 标识符列表开始,我们想要检索与这些 entrezgene 标识符相关联的生物过程相关的 GO 标识符。 我们再次查看 listAttributes() 和 listFilters() 的输出以找到我们需要的过滤器和属性。 然后我们构造以下查询:

> entrez=c("673","837")
> goids = getBM(attributes = c('entrezgene_id', 'go_id'), filters = 'entrezgene_id', values = entrez, mart = ensembl)
> head(goids)
  entrezgene_id      go_id
1           673 GO:0005524
2           673 GO:0007165
3           673 GO:0006468
4           673 GO:0035556
5           673 GO:0004672
6           673 GO:0043231

6.3 检索位于染色体 17,20 或 Y 上并与特定 GO 术语相关联的基因的所有 HUGO 基因符号

我们感兴趣的 GO terms是:GO:0051330、GO:0000080、GO:0000114、GO:0000082。 执行此查询的关键是了解 getBM() 函数使您能够同时使用多个过滤器。 为了做到这一点,过滤器参数应该是一个带有过滤器名称的向量。 这些值应该是一个列表,其中列表的第一个元素对应于第一个过滤器,第二个列表元素对应于第二个过滤器,依此类推。 此列表的元素是包含相应过滤器的可能值的向量。

> go=c("GO:0051330","GO:0000080","GO:0000114","GO:0000082")
> chrom=c(17,20,"Y")
> getBM(attributes= "hgnc_symbol",filters=c("go","chromosome_name"),values=list(go, chrom), mart=ensembl)
  hgnc_symbol
1        E2F1
2       CRLF3
3     RPS6KB1
4        CDK3

6.4 使用 INTERPRO 蛋白质域标识符注释标识符集

在这个例子中,我们想用 INTERPRO 蛋白质域标识符和蛋白质域的描述来注释以下两个 RefSeq 标识符:NM_005359 和 NM_000546。

> refseqids = c("NM_005359","NM_000546")
> ipro = getBM(attributes=c("refseq_mrna","interpro","interpro_description"), filters="refseq_mrna", values=refseqids, mart=ensembl)
> ipro
   refseq_mrna  interpro                                               interpro_description
1    NM_000546 IPR002117                                       p53 tumour suppressor family
2    NM_000546 IPR008967                         p53-like transcription factor, DNA-binding
3    NM_000546 IPR010991                                        p53, tetramerisation domain
4    NM_000546 IPR011615                                            p53, DNA-binding domain
5    NM_000546 IPR012346 p53/RUNT-type transcription factor, DNA-binding domain superfamily
6    NM_000546 IPR013872                                         p53 transactivation domain
7    NM_000546 IPR036674                        p53-like tetramerisation domain superfamily
8    NM_000546 IPR040926               Cellular tumor antigen p53, transactivation domain 2
9    NM_005359 IPR001132                                          SMAD domain, Dwarfin-type
10   NM_005359 IPR003619                                       MAD homology 1, Dwarfin-type
11   NM_005359 IPR008984                                        SMAD/FHA domain superfamily
12   NM_005359 IPR013019                                                  MAD homology, MH1
13   NM_005359 IPR013790                                                            Dwarfin
14   NM_005359 IPR017855                                       SMAD-like domain superfamily
15   NM_005359 IPR036578                                        SMAD MH1 domain superfamily

6.5 选择 hgu133plus2 芯片上的所有 Affymetrix 标识符和位于 16 号染色体上碱基对 1100000 和 1250000 之间的基因的 Ensembl 基因标识符。

在这个例子中,我们将再次使用多个过滤器:chromosome_name、start 和 end,因为我们对这三个条件进行过滤。 请注意,当染色体名称、开始位置和结束位置共同用作过滤器时,BioMart 网络服务会将其解释为返回给定开始和结束位置之间给定染色体的所有内容。

> getBM(attributes = c('affy_hg_u133_plus_2','ensembl_gene_id'), filters = c('chromosome_name','start','end'),values = list(16,1100000,1250000), mart = ensembl)
   affy_hg_u133_plus_2 ensembl_gene_id
1                      ENSG00000260702
2            215502_at ENSG00000260532
3                      ENSG00000273551
4            205845_at ENSG00000196557
5                      ENSG00000196557
6                      ENSG00000260403
7                      ENSG00000259910
8                      ENSG00000261294
9          220339_s_at ENSG00000116176
10                     ENSG00000277010
11         205683_x_at ENSG00000197253
12         207134_x_at ENSG00000197253
13         217023_x_at ENSG00000197253
14         210084_x_at ENSG00000197253
15         215382_x_at ENSG00000197253
16         216474_x_at ENSG00000197253
17         205683_x_at ENSG00000172236
18         207134_x_at ENSG00000172236
19         217023_x_at ENSG00000172236
20         210084_x_at ENSG00000172236
21         215382_x_at ENSG00000172236
22         216474_x_at ENSG00000172236

6.6 检索具有“MAP 激酶活性”GO 术语的基因的所有 EntrezGene 标识符和 HUGO 基因符号。

MAP 激酶活性的 GO 标识符是 GO:0004707。 在我们的查询中,我们将使用 go_id 作为过滤器,使用 entrezgene_id 和 hgnc_symbol 作为属性。 这是查询:

> getBM(attributes = c('entrezgene_id','hgnc_symbol'), filters = 'go', values = 'GO:0004707', mart = ensembl)
   entrezgene_id hgnc_symbol
1         225689      MAPK15
2           5596       MAPK4
3           5599       MAPK8
4           5594       MAPK1
5          51701         NLK
6           6300      MAPK12
7           5600      MAPK11
8           5595       MAPK3
9           5602      MAPK10
10          1432      MAPK14
11          5603      MAPK13
12          5597       MAPK6
13          5598       MAPK7
14          5601       MAPK9

6.7 给定一组 EntrezGene 标识符,检索 100bp 上游启动子序列

所有对 Ensembl 的序列相关查询都可以通过 getSequence() 包装函数获得。 getBM() 也可以直接用于检索序列,但这可能会变得复杂,因此使用 getSequence() 作为适用于大多数情况的通用函数提供。

可以使用 getSequence() 函数从染色体坐标或标识符开始检索序列。
可以使用染色体参数指定染色体名称。 start 和 end 参数用于指定染色体上的开始和结束位置。 返回的序列类型可以由 seqType 参数指定,该参数采用以下值:

  • cdna
  • 蛋白质序列的肽
  • 3utr 表示 3’ UTR 序列
  • 5utr 表示 5’ UTR 序列
  • gene_exon 表示仅用于外显子序列
  • transcript_exon 表示仅用于转录本特定的外显子序列
  • ranscript_exon_intron 表示给出完整的未剪接转录本,即外显子 + 内含子
  • gene_exon_intron 给出基因的外显子 + 内含子
  • coding只给出编码序列
  • coding_transcript_flank 给出了包括 UTR 在内的转录本的侧翼区域,这必须伴随一个给定的上游或下游属性值
  • coding_gene_flank 给出了包括 UTR 在内的基因的侧翼区域,这必须伴随一个给定的上游或下游属性值
  • transcript_flank给出了排除 UTR 的转录本的侧翼区域,这必须伴随着上游或下游属性的给定值
  • gene_flank 给出不包括 UTR 的基因的侧翼区域,这必须伴随一个给定的上游或下游属性值

这个任务要求我们从一组 EntrezGene 标识符中检索 100bp 上游启动子序列。 getSequence() 中的 type 参数可以被认为是此查询中的过滤器,并使用由 listFilters() 给出的相同输入名称。 在我们的查询中,我们使用 entrezgene_id 作为类型参数。 接下来我们必须指定我们想要检索的序列类型,这里我们对启动子区域的序列感兴趣,从基因的编码开始旁边开始。 将 seqType 设置为 coding_gene_flank 将提供我们需要的内容。 upstream 参数用于指定我们要检索多少个 bp 的上游序列,这里我们将检索一个相当短的 100bp 序列。 将所有这些放在 getSequence() 中给出:

> entrez=c("673","7157","837")
> getSequence(id = entrez, 
+             type="entrezgene_id",
+             seqType="coding_gene_flank",
+             upstream=100, 
+             mart=ensembl) 
## coding_gene_flank
## 1 TCCTTCTCTGCAGGCCCAGGTGACCCAGGGTTGGAAGTGTCTCATGCTGGATCCCCACTTTTCCTCTTGCAGCAGCCAGACTGCCTTCCGGGTCACTGCC
## 2 CCTCCGCCTCCGCCTCCGCCTCCGCCTCCCCCAGCTCTCCGCCTCCCTTCCCCCTCCCCGCCCGACAGCGGCCGCTCGGGCCCCGGCTCTCGGTTATAAG
## 3 CACGTTTCCGCCCTTTGCAATAAGGAAATACATAGTTTACTTTCATTTTTGACTCTGAGGCTCTTTCCAACGCTGTAAAAAAGGACAGAGGCTGTTCCCT
## entrezgene_id
## 1 7157
## 2 673
## 3 837
Error in .processResults(postRes, mart = mart, hostURLsep = sep, fullXmlQuery = fullXmlQuery,  : 
  Query ERROR: caught BioMart::Exception::Usage: Filter upstream_flank NOT FOUND

还有一点需要注意的是,虽然我们是根据 NCBI 基因 ID 搜索基因,但 Ensembl BioMart 不允许直接返回某些 ID 类型(包括 NCBI ID)。 为了尝试和适应这种 biomaRt,在找到序列信息之前,尝试在内部将查询 ID 映射到 Ensembl 基因 ID。 如果不存在此类映射(或至少在 Ensembl 中未找到),则不会为受影响的 ID 返回任何序列。

6.8 检索位于 3 号染色体 185,514,033 和 185,535,839 之间的所有基因的所有 5’ UTR 序列

如上一个任务中所述,getSequence() 还可以使用染色体坐标来检索位于给定区域内的所有基因的序列。 我们还必须指定要与序列一起检索的标识符类型。 这里我们选择NCBI Gene ID:

> utr5 = getSequence(chromosome=3, start=185514033, end=185535839, type="entrezgene_id", seqType="5utr", mart=ensembl)
> utr5
                                                                                                                   5utr entrezgene_id
1                               TGAGCAAAATCCCACAGTGGAAACTCTTAAGCCTCTGCGAAGTAAATCATTCTTGTGAATGTGACACACGATCTCTCCAGTTTCCAT        200879
2 ACCACACCTCTGAGTCGTCTGAGCTCACTGTGAGCAAAATCCCACAGTGGAAACTCTTAAGCCTCTGCGAAGTAAATCATTCTTGTGAATGTGACACACGATCTCTCCAGTTTCCAT        200879
3                                                                               ATTCTTGTGAATGTGACACACGATCTCTCCAGTTTCCAT        200879
4                                                                                                  Sequence unavailable        200879

6.9 检索给定 EntrezGene 标识符列表的蛋白质序列

在此任务中,类型参数指定我们使用的标识符类型。 要获得其他有效标识符类型的概述,我们参考 listFilters() 函数。

> protein = getSequence(id=c(100, 5728), type="entrezgene_id", seqType="peptide",  mart=ensembl)
> protein
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            peptide
1                                                                                                                                                                                                                                                                                                                                                                                                                                        ALLFHKMMFETIPMFSGGTCNPQFVVCQLKVKIYSSNSGPTRREDKFMYFEFPQPLPVCGDIKVEFFHKQNKMLKKDKMFHFWVNTFFIPGPEETSEKVENGSLCDQEIDSICSIERADNDKEYLVLTLTKNDLDKANKDKANRYFSPNFKVS*
2                                                                                                                                                                              MTAIIKEIVSRNKRRYQEDGFDLDLTYIYPNIIAMGFPAERLEGVYRNNIDDVVRFLDSKHKNHYKIYNLCAERHYDTAKFNCRVAQYPFEDHNPPQLELIKPFCEDLDQWLSEDDNHVAAIHCKAGKGRTGVMICAYLLHRGKFLKAQEALDFYGEVRTRDKKGVTIPSQRRYVYYYSYLLKNHLDYRPVALLFHKMMFETIPMFSGGTCNPQFVVCQLKVKIYSSNSGPTRREDKFMYFEFPQPLPVCGDIKVEFFHKQNKMLKKDKMFHFWVNTFFIPGPEETSEKVENGSLCDQEIDSICSIERADNDKEYLVLTLTKNDLDKANKDKANRYFSPNFKVKLYFTKTVEEPSNPEASSSTSVTPDVSDNEPDHYRYSDTTDSDPENEPFDEDQHTQITKV*
3                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Sequence unavailable
4                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Sequence unavailable
5                                                                                                                                                                                                                                                                                                                          MAQTPAFDKPKVELHVHLDGSIKPETILYYGRRRGIALPANTAEGLLNVIGMDKPLTLPDFLAKFDYYMPAIAGCREAIKRIAYEFVEMKAKEGVVYVEVRYSPHLLANSKVEPIPWNQAEGDLTPDEVVALVGQGLQEGERDFGVKARSILCCMRHQPNWSPKVVELCKKYQQQTVVAIDLAGDETIPGSSLLPGHVQAYQEAVKSGIHRTVHAGEVGSAEVVKEAVDILKTERLGHGYHTLEDQALYNRLRQENMHFEAQK*
6                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      MAQTPAFDKPKVELHVHLDGSIKPETILYYGRRRGIALPANTAEGLLNVIGMDKPLTLPDFLAKFDYYMPAIARL*
7                                                                                                                                                                                                                      MAQTPAFDKPKVELHVHLDGSIKPETILYYGRRRGIALPANTAEGLLNVIGMDKPLTLPDFLAKFDYYMPAIAGCREAIKRIAYEFVEMKAKEGVVYVEVRYSPHLLANSKVEPIPWNQAEGDLTPDEVVALVGQGLQEGERDFGVKARSILCCMRHQPNWSPKVVELCKKYQQQTVVAIDLAGDETIPGSSLLPGHVQAYQEAVKSGIHRTVHAGEVGSAEVVKEAVDILKTERLGHGYHTLEDQALYNRLRQENMHFEICPWSSYLTGAWKPDTEHAVIRLKNDQANYSLNTDDPLIFKSTLDTDYQMTKRDMGFTEEEFKRLNINAAKSSFLPEDEKRELLDLLYKAYGMPPSASAGQNL*
8                                                                                                                                                                                                                                              MAQTPAFDKPKVELHVHLDGSIKPETILYYGRRRGIALPANTAEGLLNVIGMDKPLTLPDFLAKFDYYMPAIAGCREAIKRIAYEFVEMKAKEGVVYVEVRYSPHLLANSKVEPIPWNQAEGDLTPDEVVALVGQGLQEGERDFGVKARSILCCMRHQPNWSPKVVELCKKYQQQTVVAIDLAGDETIPGSSLLPGHVQAYQAVDILKTERLGHGYHTLEDQALYNRLRQENMHFEICPWSSYLTGAWKPDTEHAVIRLKNDQANYSLNTDDPLIFKSTLDTDYQMTKRDMGFTEEEFKRLNINAAKSSFLPEDEKRELLDLLYKAYGMPPSASAGQNL*
9 LERGGEAAAAAAAAAAAPGRGSESPVTISRAGNAGELVSPLLLPPTRRRRRRHIQGPGPVLNLPSAAAAPPVARAPEAAGGGSRSEDYSSSPHSAAAAARPLAAEEKQAQSLQPSSSRRSSHYPAAVQSQAAAERGASATAKSRAISILQKKPRHQQLLPSLSSFFFSHRLPDMTAIIKEIVSRNKRRYQEDGFDLDLTYIYPNIIAMGFPAERLEGVYRNNIDDVVRFLDSKHKNHYKIYNLCAERHYDTAKFNCRVAQYPFEDHNPPQLELIKPFCEDLDQWLSEDDNHVAAIHCKAGKGRTGVMICAYLLHRGKFLKAQEALDFYGEVRTRDKKGVTIPSQRRYVYYYSYLLKNHLDYRPVALLFHKMMFETIPMFSGGTCNPQFVVCQLKVKIYSSNSGPTRREDKFMYFEFPQPLPVCGDIKVEFFHKQNKMLKKDKMFHFWVNTFFIPGPEETSEKVENGSLCDQEIDSICSIERADNDKEYLVLTLTKNDLDKANKDKANRYFSPNFKVKLYFTKTVEEPSNPEASSSTSVTPDVSDNEPDHYRYSDTTDSDPENEPFDEDQHTQITKV*
  entrezgene_id
1          5728
2          5728
3          5728
4           100
5           100
6           100
7           100
8           100
9          5728

6.10 检索位于人类 8 号染色体上位置 148350 和 148420 之间的已知 SNP

对于本示例,我们首先必须连接到不同的 BioMart 数据库,即 snp。

> snpmart = useEnsembl(biomart = "snp", dataset="hsapiens_snp")

listAttributes() 和 listFilters() 函数为我们提供了可用属性和过滤器的概览。

从这些我们需要: refsnp_id, allele, chrom_start 和 chrom_strand 作为属性; 作为过滤器,我们将使用:chrom_start、chrom_end 和 chr_name。

将我们选择的属性和过滤器放入 getBM() 给出:

> getBM(attributes = c('refsnp_id','allele','chrom_start','chrom_strand'), filters = c('chr_name','start','end'), values = list(8, 148350, 148420), mart = snpmart)
      refsnp_id allele chrom_start chrom_strand
1  rs1450830176    G/C      148350            1
2  rs1360310185    C/T      148352            1
3  rs1434776028    A/T      148353            1
4  rs1413161474    C/T      148356            1
5  rs1410590268    A/G      148365            1
6  rs1193735780  T/A/C      148368            1
7  rs1409139861    C/T      148371            1
8   rs868546642    A/G      148372            1
9   rs547420070    A/C      148373            1
10 rs1236874674    C/T      148375            1
11 rs1207902742    C/T      148376            1
12 rs1437239557    T/C      148377            1
13 rs1160135941    T/G      148379            1
14 rs1229249227    A/T      148380            1
15 rs1584865972    C/G      148381            1
16 rs1328678285    C/G      148390            1
17   rs77274555  G/A/C      148391            1
18  rs567299969  T/A/C      148394            1
19 rs1457776094  A/C/G      148395            1
20 rs1292078334    C/T      148404            1
21 rs1456392146    A/T      148405            1
22  rs368076569    G/A      148407            1
23 rs1166604298    A/G      148408            1
24 rs1393545673  A/G/T      148410            1
25 rs1180076939    A/T      148413            1
26 rs1476313471    A/G      148414            1
27 rs1248424402    T/C      148417            1
28 rs1207939741    A/T      148419            1

6.11 给定人类基因 TP53,检索该基因的人类染色体位置,并检索其在小鼠中的同源基因的染色体位置和 RefSeq id。

getLDS()(获取链接数据集)函数提供了将 2 个 BioMart 数据集相互链接并构建对两个数据集的查询的功能。 在 Ensembl 中,链接两个数据集转化为检索跨物种的同源性数据。

getLDS 的用法与 getBM() 非常相似。 链接数据集由单独的 Mart 对象提供,必须为链接数据集指定过滤器和属性。 过滤器既可以应用于两个数据集,也可以应用于其中一个数据集。 在两个 Mart 对象上使用 listFilters 和 listAttributes 函数来查找每个数据集(Ensembl 中的物种)的过滤器和属性。 链接数据集的属性和过滤器可以使用 attributesL 和 filtersL 参数指定。 将所有这些信息输入 getLDS() 给出:

> human <- useEnsembl("ensembl", dataset = "hsapiens_gene_ensembl")
> mouse <- useEnsembl("ensembl", dataset = "mmusculus_gene_ensembl")
> getLDS(attributes = c("hgnc_symbol","chromosome_name", "start_position"), filters = "hgnc_symbol", values = "TP53", mart = human, attributesL = c("refseq_mrna","chromosome_name","start_position"), martL = mouse)
  HGNC.symbol Chromosome.scaffold.name Gene.start..bp. RefSeq.mRNA.ID Chromosome.scaffold.name.1 Gene.start..bp..1
1        TP53                       17         7661779                                        11          69471185
2        TP53                       17         7661779   NM_001127233                         11          69471185
3        TP53                       17         7661779      NM_011640                         11          69471185

连接故障诊断troubleshooting

在尝试访问 Ensembl BioMart 等在线资源时遇到连接问题的情况并不少见。 在本节中,我们列出了用户报告的错误消息,以及修复问题的建议代码。 如果建议的解决方案不起作用,或者您有此处未列出的新错误,请在 Bioconductor 支持站点上报告。

7.1 biomaRt特定的解决方案

如果您直接使用 biomaRt,请确保您使用 useEnsembl() 来创建 Mart 对象,而不是 useMart()。 useEnsembl() 知道连接到 Ensembl 所需的一些特定连接细节,并且使用它可以解决任何连接问题,而无需您进一步执行任何操作。

7.2 全局连接设置

如果您无法修改 biomaRt 代码(例如,如果您使用另一个包调用 biomaRt 作为其功能的一部分),仍然可以修改 R 会话的连接设置。 下面是一些已报告的错误消息和已知可以解决它们的代码。 您只需在 R 会话中执行此代码一次,但设置不会在 R 会话之间保持不变。

7.2.1 Error: “SSL certificate problem”

Error message

Error in curl::curl_fetch_memory(url, handle = handle) :
SSL certificate problem: unable to get local issuer certificate

Fix

httr::set_config(httr::config(ssl_verifypeer = FALSE))

7.2.1 Error: “sslv3 alert handshake failure”

Error message

Error in curl::curl_fetch_memory(url, handle = handle) : 
error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure

Fix
如果您运行的是 Ubuntu 20.04 或更高版本,以下命令应该可以解决该问题。

httr::set_config(httr::config(ssl_cipher_list = "DEFAULT@SECLEVEL=1"))

如果您在 Fedora 33 上遇到此错误,则上面的代码似乎不起作用。 目前,我们发现的唯一解决方法是更改系统级别的安全设置。 请在 fedoraproject.org 上查看更多信息,在 GitHub 上查看故障排除讨论。 可以通过在 R 之外的终端中运行以下命令来应用此更改,但请考虑这是否是您想要更改的内容。 你也可以考虑提醒 Ensembl 这个问题。

update-crypto-policies --set LEGACY

Session Info

> sessionInfo()
R version 4.1.1 (2021-08-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 19042)

Matrix products: default

locale:
[1] LC_COLLATE=Chinese (Simplified)_China.936  LC_CTYPE=Chinese (Simplified)_China.936    LC_MONETARY=Chinese (Simplified)_China.936
[4] LC_NUMERIC=C                               LC_TIME=Chinese (Simplified)_China.936    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] biomaRt_2.48.3

loaded via a namespace (and not attached):
 [1] KEGGREST_1.32.0        progress_1.2.2         tidyselect_1.1.1       purrr_0.3.4            vctrs_0.3.8            generics_0.1.0         stats4_4.1.1          
 [8] BiocFileCache_2.0.0    utf8_1.2.2             blob_1.2.2             XML_3.99-0.8           rlang_0.4.11           pillar_1.6.3           withr_2.4.2           
[15] glue_1.4.2             DBI_1.1.1              rappdirs_0.3.3         BiocGenerics_0.38.0    bit64_4.0.5            dbplyr_2.1.1           GenomeInfoDbData_1.2.6
[22] lifecycle_1.0.1        stringr_1.4.0          zlibbioc_1.38.0        Biostrings_2.60.2      memoise_2.0.0          Biobase_2.52.0         IRanges_2.26.0        
[29] fastmap_1.1.0          GenomeInfoDb_1.28.4    parallel_4.1.1         curl_4.3.2             AnnotationDbi_1.54.1   fansi_0.5.0            Rcpp_1.0.7            
[36] filelock_1.0.2         cachem_1.0.6           S4Vectors_0.30.0       XVector_0.32.0         bit_4.0.4              hms_1.1.1              png_0.1-7             
[43] digest_0.6.27          stringi_1.7.4          dplyr_1.0.7            tools_4.1.1            bitops_1.0-7           magrittr_2.0.1         RCurl_1.98-1.5        
[50] RSQLite_2.2.8          tibble_3.1.4           crayon_1.4.1           pkgconfig_2.0.3        ellipsis_0.3.2         xml2_1.3.2             prettyunits_1.1.1     
[57] assertthat_0.2.1       httr_1.4.2             rstudioapi_0.13        R6_2.5.1               compiler_4.1.1
架构君码字不易,如需转载,请注明出处:https://javajgs.com/archives/210118
0

发表评论