批量转换基因名

做通路富集分析常需要批量进行基因ID转换,总结了3种简便方法与大家分享。
方法1和2依赖于基因组注释R包,如果无相应物种R包就必须用方法3。好在的是常用物种人、小鼠、大鼠等都是有的,一般能满足需要。基因组注释R包全集在网站Bioconductor - 3.9 AnnotationData Packages查看,如我们能在里面找到人基因组注释R包 org.Hs.eg.db, 我们安装这个注释包,就能用方法1和2转换人种基因ID。
开始教程前先将所有需要的R包导入,并展示用于例子的数据。

library(org.Hs.eg.db)
library(clusterProfiler)
library(biomaRt)

# 例子数据选取了5个Ensembl基因名。
E_genes <- c("ENSG00000110514", "ENSG00000163467", "ENSG00000161021", "ENSG00000254694", "ENSG00000225108")

方法1:使用 select 函数从基因组注释R包选择基因名转换数据。
下面例子展示如何返回NCBI基因ID于SYMBOL

> gene_map <- select(org.Hs.eg.db, keys=E_genes, keytype="ENSEMBL", columns=c("ENTREZID", "SYMBOL"))
'select()' returned 1:1 mapping between keys and columns
> gene_map
          ENSEMBL ENTREZID SYMBOL
1 ENSG00000110514     8567   MADD
2 ENSG00000163467   128229  TSACC
3 ENSG00000161021     9794  MAML1
4 ENSG00000254694        
5 ENSG00000225108        

出现 NA 是正常的,不同数据库对基因定义有差异,无法一一对应。

方法2:使用 clusterProfiler 包的 bitr 函数。clusterProfiler 是通路富集常用 R 包,富集前顺带就用 bitr 把基因名转换。重要参数:

> gene_map <- bitr(geneID=E_genes, fromType="ENSEMBL", toType=c("ENTREZID", "SYMBOL"), OrgDb=org.Hs.eg.db)
'select()' returned 1:1 mapping between keys and columns
Warning message:
In bitr(geneID = E_genes, fromType = "ENSEMBL", toType = c("ENTREZID",  :
  40% of input gene IDs are fail to map...
> gene_map
          ENSEMBL ENTREZID SYMBOL
1 ENSG00000110514     8567   MADD
2 ENSG00000163467   128229  TSACC
3 ENSG00000161021     9794  MAML1

其中 NA 数据被丢弃了,使用 drop 参数控制这个行为。

点评:方法1和2本质是一样的。优点是可以本地操作(无联网行为)且很简单。缺点是数据依赖于基因组注释 R 包,无法保证处于最新状态。如果有需要用最新的基因名对照数据,切勿用这两方法。

方法3:使用 biomaRt 包从在线数据库请求。biomaRt 包让我们无需学习 SQL 语句就能便捷从在线数据库获取数据,这包很强大建议学习。
使用 biomaRt 转换基因名主要分2步,第一步选择需要的数据集,第二步发送请求取得结果。
第一步使用 useMart 函数选择需要的数据库于数据集,可用的在线数据库使用 listMarts 函数查看;选择数据库后,每个数据库都包含大量数据集,比如 Ensembl 每个物种都是一个数据集,使用 listDatasets 函数查看可用的数据集。如果知道了需要的数据集,那么反过来可以在 useMart 函数选择数据库的时候同时选择数据集。

# 查看可用数据库
> listMarts()
               biomart               version
1 ENSEMBL_MART_ENSEMBL      Ensembl Genes 97
2   ENSEMBL_MART_MOUSE      Mouse strains 97
3     ENSEMBL_MART_SNP  Ensembl Variation 97
4 ENSEMBL_MART_FUNCGEN Ensembl Regulation 97

# 选择在线数据库
> ensembl=useMart(biomart='ensembl')
> datasets <- listDatasets(ensembl)
> head(datasets, n=2)
                       dataset                           description
1 abrachyrhynchus_gene_ensembl Pink-footed goose genes (ASM259213v1)
2     acalliptera_gene_ensembl      Eastern happy genes (fAstCal1.2)
      version
1 ASM259213v1
2  fAstCal1.2

# 使用人基因数据集
ensembl = useDataset("hsapiens_gene_ensembl",mart=ensembl)
# 或者 useMart 直接指定
ensembl <- useMart("ensembl", dataset="hsapiens_gene_ensembl")

第二步使用 getBM 函数索引需要数据。getBM 是 biomaRt 最主要的请求函数。

> gene_map <- getBM(values=E_genes, filters="ensembl_gene_id", attributes=c("hgnc_symbol", "ensembl_gene_id", "entrezgene_id"), mart=ensembl)
> gene_map
  hgnc_symbol ensembl_gene_id entrezgene_id
1        MADD ENSG00000110514          8567
2       MAML1 ENSG00000161021          9794
3       TSACC ENSG00000163467        128229
4    ZBTB45P1 ENSG00000225108            NA
5             ENSG00000254694            NA

点评:方法3优点是保持数据最新和无需下载本地数据;缺点是依赖网络和操作更繁琐。

你可能感兴趣的:(批量转换基因名)