TP53基因大家都有所耳闻,而且也大概都知道它是 tumor protein p53的简称,其实它还有很多别名,比如BCC7;LFS1;P53;TRP53;
如果你通过数据分析拿到了一系列感兴趣的基因,但是只有类似于TP53这样的基因标准symbol名字,想批量拿到全部的基因的全名和别名,这里有一个代码分享给大家。
rm(list=ls())
library(org.Hs.eg.db)
eg2symbol=toTable(org.Hs.egSYMBOL)
eg2name=toTable(org.Hs.egGENENAME)
eg2alias=toTable(org.Hs.egALIAS2EG)
eg2alis_list=lapply(split(eg2alias,eg2alias$gene_id),function(x){paste0(x[,2],collapse = ";")})
GeneList=mappedLkeys(org.Hs.egSYMBOL)
GeneList[1]
if( GeneList[1] %in% eg2symbol$symbol ){
symbols=GeneList
geneIds=eg2symbol[match(symbols,eg2symbol$symbol),'gene_id']
}else{
geneIds=GeneList
symbols=eg2symbol[match(geneIds,eg2symbol$gene_id),'symbol']
}
geneNames=eg2name[match(geneIds,eg2name$gene_id),'gene_name']
geneAlias=sapply(geneIds,function(x){ifelse(is.null(eg2alis_list[[x]]),"no_alias",eg2alis_list[[x]])})
借助于 org.Hs.eg.db
包,我们已经拿到了全部的人类全部基因的全名和别名,就是如下所示的4个变量:
接下来可以做一个简单的HTML报表输出,代码如下所示:
createLink <- function(base,val) {
sprintf('<a href="%s" class="btn btn-link" target="_blank" >%s</a>',base,val) ##target="_blank"
}
gene_info=data.frame( symbols=symbols,
geneIds=createLink(paste0("http://www.ncbi.nlm.nih.gov/gene/",geneIds),geneIds),
geneNames=geneNames,
geneAlias=geneAlias,
stringsAsFactors = F
)
#library("xtable")
#print(xtable(gene_info), type="html",include.rownames=F, file='all_gene.anno',sanitize.text.function = force)
file='all_gene_bioconductor.html'
y <- DT::datatable(gene_info,escape = F,rownames=F)
DT::saveWidget(y,file)
可以看到输出的报表清晰简洁,而且还支持搜索:
清晰简洁
把我上面的代码扩充,给全部的基因同步加上对应的go和kegg信息,也是借助于R里面的包即可。