【Methods】Accessing Ensembl annotation with biomaRt
Accessing Ensembl annotation with biomaRt
- 引言
- 选择 Ensembl BioMart 数据库和数据集
- 步骤1:确定您需要的数据库
- 步骤2:选择一个数据集
- Ensembl镜像站点
- 使用 Ensembl 的存档版本
- 使用Ensembl Genomes
- 如何构建 biomaRt 查询
- 3.1 搜索filters和attributes
- 3.2 使用预定义的过滤器值
- 3.3 查找有关过滤器的更多信息
- 3.3.1 过滤器类型
- 3.4 属性页
- 3.5 使用select()
- 结果缓存
- biomaRt 辅助函数
- 5.1 exportFASTA
- biomaRt 查询示例
- 6.1 用 HUGO 符号和相应基因的染色体位置注释一组 Affymetrix 标识符
- 6.2 使用 GO annotation注释一组 EntrezGene 标识符
- 6.3 检索位于染色体 17,20 或 Y 上并与特定 GO 术语相关联的基因的所有 HUGO 基因符号
- 6.4 使用 INTERPRO 蛋白质域标识符注释标识符集
- 6.5 选择 hgu133plus2 芯片上的所有 Affymetrix 标识符和位于 16 号染色体上碱基对 1100000 和 1250000 之间的基因的 Ensembl 基因标识符。
- 6.6 检索具有“MAP 激酶活性”GO 术语的基因的所有 EntrezGene 标识符和 HUGO 基因符号。
- 6.7 给定一组 EntrezGene 标识符,检索 100bp 上游启动子序列
- 6.8 检索位于 3 号染色体 185,514,033 和 185,535,839 之间的所有基因的所有 5' UTR 序列
- 6.9 检索给定 EntrezGene 标识符列表的蛋白质序列
- 6.10 检索位于人类 8 号染色体上位置 148350 和 148420 之间的已知 SNP
- 6.11 给定人类基因 TP53,检索该基因的人类染色体位置,并检索其在小鼠中的同源基因的染色体位置和 RefSeq id。
- 连接故障诊断troubleshooting
- 7.1 biomaRt特定的解决方案
- 7.2 全局连接设置
- 7.2.1 Error: “SSL certificate problem”
- 7.2.1 Error: “sslv3 alert handshake failure”
- Session Info
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 版本的更全面的标题。
> 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 已被选中,但未选择任何数据集。
> ensembl
Object of class 'Mart':Using the ENSEMBL_MART_ENSEMBL BioMart databaseNo 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 所示。
图 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)
> iprorefseq_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)
> utr55utr 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)
> proteinpeptide
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: defaultlocale:
[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.3loaded 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
【Methods】Accessing Ensembl annotation with biomaRt相关推荐
- 【python】从Ensembl上,根据Array HumanMethylation450甲基化探针cg编号(比如cg13788592)获取位置
文章目录 1. 写在前面 2. 手动查找和探索过程 从UCSC查找 从Ensembl查找 3. 代码实现 1. 写在前面 一篇专利 1 中提到多种癌种及对应的特异性CpG位点,想获取对应cg位点具体的 ...
- 【练习】Accessing data with MySQL
1.从 Spring Initializr中下载需要的依赖 2.创建数据库 mysql> create database db_example; -- Creates the new datab ...
- 【idea】Error:java: Annotation processing is not supported for module cycles. Please ensure that all..
出现这个问题就是出现了模块循环依赖的问题,需要好好看下各模块的作用,判断下目前代码的架构是否合理,并解除互相依赖的模块的依赖 判断哪两个模块循环依赖的方法如图 如果出现循环依赖,模块会是红色的 参考文 ...
- 【Vue】谈Vue的依赖追踪系统 ——搞懂methods watch和compute的区别和联系
从作用机制和性质上看待methods,watch和computed的关系 图片标题[原创]:<他三个是啥子关系呢?> 首先要说,methods,watch和computed都是以函数为基础 ...
- 【异常】Caused by: java.lang.NoClassDefFoundError: org/aspectj/lang/annotation/Around
[异常]Caused by: java.lang.NoClassDefFoundError: org/aspectj/lang/annotation/Around 参考文章: (1)[异常]Cause ...
- 【Groovy】编译时元编程 ( AST 语法树分析 | ClassNode 根节点 | 方法 Methods 节点 | 字段 Fields 节点 | 属性 Properties 节点 )
文章目录 一.AST 语法树分析 一.AST 语法树分析 在上一篇博客 [Groovy]编译时元编程 ( 编译时元编程引入 | 声明需要编译时处理的类 | 分析 Groovy 类的 AST 语法树 ) ...
- 【概率论】1-2:计数方法(Counting Methods)
title: [概率论]1-2:计数方法(Counting Methods) categories: Mathematic Probability keywords: Counting Methods ...
- vue族谱架构_【Vue】谈Vue的依赖追踪系统 ——搞懂methods watch和compute的区别和联系...
之前一直在博客园写作,最近几天才开的知乎专栏,才疏学浅, 谬误之处请不吝于评论区指教,谢谢大家.从作用机制和性质上看待methods,watch和computed的关系 watch和computed的 ...
- 【CRR-FMM】A Concise Review of Recent Few-shot Meta-learning Methods
[CRR-FMM]A Concise Review of Recent Few-shot Meta-learning Methods 1 Introduction MindMap 2. The Fra ...
最新文章
- 用U盘安装VMware ESXi4
- 计算机二级报名学校白名单,干货丨2021机器人编程赛事+等级考试攻略之教育部白名单赛事篇...
- 岗位推荐 | 腾讯AI Lab招聘计算机视觉方向实习生
- [译] 用 Shadow DOM v1 和 Custom Elements v1 实现一个原生 Web Component
- html字段隐藏,如何刮取动态隐藏的HTML字段(UuViewState)值?
- Cisco ××× troubleshooting
- 使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错。字符串的长度超过了为 maxJsonLength 属性设置的值。...
- Linux下C编程-----IO/文件操作 模拟linux ls程序显示文件系统树形结构(2)
- UVA 1048	 Low Cost Air Travel 最短路
- composer 安装yii2框架
- 【UVA10129】Play on Words(欧拉回路+有向图连通性判断+打印欧拉道路)
- 修复因制作苹果macOS安装系统导致损坏的U盘
- 浅谈Struts2拦截器的原理与实现
- 使用pip出现报错:Could not find a version that satisfies the...No matching distribution distributio...
- epoch如何设置_最易懂的方式介绍 神经网络模型中的Epoch、Iteration、Batchsize
- php中文拼音模糊,两种php中文字符转拼音问题解决方法
- STEM课程经典 | 美国小学标准教材1-5级套装,超过40州使用,让孩子在小学掌握科学思维...
- 设置控件评分星星控件
- NYOJ 1253 Turing equation【题意是关键,模拟】
- 魔兽世界盒子怎么修改服务器地址,多玩魔盒怎么设置界面 多玩魔兽盒子多玩界面调整教程...
热门文章
- inline内联函数(声明前加inline还是定义前加inline)
- 计算机显示器闪烁,电脑液晶显示器闪烁的解决办法 | Running Snail
- 越秀商投定义楼宇新生态 菁英汇聚最美中轴体验馆
- 360 php waf,cmseasy 最新版补丁绕过sql注入(绕过360waf)
- (Deep_sort)代码复现及理解笔记➕deep_sort_app.py代码理解
- matlab电类,MATLAB在电类专业课程中的应用-教程及实训
- DDR3 数据传输 (五)
- 采用web标准开发的好处
- springboot 缓存一致性常用解决方案
- 文献分享 | PNAS:先天性失明患者白内障手术后的白质可塑性