biomaRt多个物种同源基因一步转换 2022-08-30

适用背景

之前写了一篇跨物种同源基因转换的文章,里面用到biomaRt这个包,但是这个包只能对2个物种进行同源基因转换。如果有多个物种,使用起来就比较麻烦,因此本文将介绍一步转换多个物种同源基因的函数


useEnsembl和useMart的区别

上一篇文章提到,用useMart时有时候会出现网络连接错误的问题,可以指定host解决,另外根据一篇Bioconductor文章,建议使用useEnsembl替代useMart,或许可以解决网络问题。
查看帮助文档发现,这两者除了名称没有太大差别,如果要深究需要看源代码了。因此,本文将使用useEnsembl而不用useMart,可以把下面脚本的useEnsembl都替换成useMart使用

  • useEnsembl Connects to the selected BioMart database and dataset hosted by Ensembl
  • useMart Connects to the selected BioMart database and dataset

关于biomaRt未收录的非模式物种

因为有些非模式物种没有被收纳进biomaRt包,因此在找其它同源基因库时发现一个HGNC网站

HGNC

这个网站有个同源基因转换工具,虽然物种不是很多,但列出了不少同源基因库的信息,感兴趣可以逐个了解一下。
HCOP


2个物种的同源基因转换函数get2sp_orth_gene

  • ref,参考物种的数据集名称,例如小鼠的是mmusculus_gene_ensembl
  • que,查询物种的数据集名称
  • gene.use,指定基因集,默认为空,使用查询物种的所有基因
  • a.ref,参考物种输出的属性类型向量,默认会输出c("ensembl_gene_id","external_gene_name")
  • f.ref,参考物种输入的属性类型,默认为基因名"external_gene_name"
  • a.que,查询物种输出的属性类型向量,默认输出基因名c("external_gene_name")
  • host, 使用的数据库网站版本,默认为"https://dec2021.archive.ensembl.org/"

如果需要查询某个物种的数据集名称以及可用的属性类型,可以查看跨物种同源基因转换

函数代码如下:

get2sp_orth_gene <- function(ref=NULL,que=NULL,gene.use=NULL,
                          a.ref=NULL,f.ref="external_gene_name",
                          a.que=NULL,uniqueRows=T,host = "https://dec2021.archive.ensembl.org/"){
a.ref <- unique(c("ensembl_gene_id","external_gene_name",a.ref))
a.que <- unique(c("external_gene_name",a.que))

mref <- useEnsembl("ensembl",dataset = ref, host = host)
mque <- useEnsembl("ensembl",dataset = que, host = host)

if (is.null(gene.use)) {
g1 <- getBM(attributes = c("external_gene_name"),mart = useEnsembl("ensembl",dataset = que, host = host),uniqueRows = T)
g2 <- g1$external_gene_name
}else{
g2 <- gene.use
}

gene.out <- getLDS(attributes = a.ref, filters = f.ref, values = g2, mart = mref,
                   attributesL = a.que, martL = mque, uniqueRows = uniqueRows)

nref <- length(a.ref)
nque <- length(a.que)

recol <- colnames(gene.out)
recol[1:2] <- c('ref.gene_ID','ref.gene_name')
recol[nref+1] <- 'que.gene_name'

colnames(gene.out) <- recol
gene.out$ref.specice <- ref
gene.out$que.specice <- que
return(gene.out)
}
  • 使用示例
    这个函数返回的是一个数据框,第1列ref.gene_ID是参数物种的基因ID,第2列ref.gene_name是参考物种的基因名,第3列que.gene_name是询问物种的基因名,第4列是ref.specice参考物种的数据集名称,第5列是参考物种的数据集名称que.specice
> g1 <- get2sp_orth_gene(ref="mmusculus_gene_ensembl",que="mfascicularis_gene_ensembl")
> head(g1)
         ref.gene_ID ref.gene_name que.gene_name            ref.specice
1 ENSMUSG00000038473        Nos1ap        NOS1AP mmusculus_gene_ensembl
2 ENSMUSG00000036885      Arhgef26      ARHGEF26 mmusculus_gene_ensembl
3 ENSMUSG00000033285          Wdr3          WDR3 mmusculus_gene_ensembl
4 ENSMUSG00000074480         Mex3a         MEX3A mmusculus_gene_ensembl
5 ENSMUSG00000062127     Cttnbp2nl     CTTNBP2NL mmusculus_gene_ensembl
6 ENSMUSG00000041355          Ssr2          SSR2 mmusculus_gene_ensembl
                 que.specice
1 mfascicularis_gene_ensembl
2 mfascicularis_gene_ensembl
3 mfascicularis_gene_ensembl
4 mfascicularis_gene_ensembl
5 mfascicularis_gene_ensembl
6 mfascicularis_gene_ensembl

多个个物种的同源基因转换函数getmtsp_orth_gene

getmtsp_orth_gene调用了前面的get2sp_orth_gene函数,可以一步实现多个物种的同源基因转换,大部分参数与get2sp_orth_gene一样,只有que和gene.use不一样,que需要传入查询物种数据集的向量,例如que=c('mmusculus_gene_ensembl','mfascicularis_gene_ensembl','tguttata_gene_ensembl'),而gene.use如果不为空则需输入基因集列表,例如gene.use= list(c("Gad1","Sst"), c("GAD1","SST")),基因集列表要一一对应查询物种,如果为空则会使用所有基因

函数代码如下:

getmtsp_orth_gene <- function(ref=NULL,que=NULL,gene.use=NULL,
                          a.ref=NULL, f.ref="external_gene_name",
                          a.que=NULL, uniqueRows=T,host = "https://dec2021.archive.ensembl.org/"){
df2 <- data.frame()
for (i in 1:length(que)) {
if (is.null(gene.use)) {
g1 <- getBM(attributes = c("external_gene_name"),mart = useEnsembl("ensembl",dataset = que[i], host = host),uniqueRows = T)
g2 <- g1$external_gene_name
}else{
g2 <- gene.use[[i]]
}
df1 <- get2sp_orth_gene(ref=ref,que=que[i],gene.use=g2,
                        a.ref=a.ref,f.ref=f.ref,a.que=a.que,uniqueRows=uniqueRows,host=host)
if (i==1) {
df2 <- df1
}else{
df2 <- merge(df2,df1,all=T)
}
}
return(df2)
}
  • 使用示例
    函数返回的也是一个数据框,输出结果与get2sp_orth_gene的类似,如果指定了a.que,则会根据a.que增加相应的列。
> g3 <- getmtsp_orth_gene(ref='hsapiens_gene_ensembl', que= c('mmusculus_gene_ensembl','mfascicularis_gene_ensembl','tguttata_gene_ensembl'),
                        a.que= c("hsapiens_homolog_associated_gene_name","hsapiens_homolog_orthology_type"))
> head(g3)
      ref.gene_ID ref.gene_name que.gene_name Human.gene.name Human.homology.type
1 ENSG00000000003        TSPAN6        Tspan6          TSPAN6    ortholog_one2one
2 ENSG00000000003        TSPAN6        TSPAN6          TSPAN6    ortholog_one2one
3 ENSG00000000003        TSPAN6        TSPAN6          TSPAN6    ortholog_one2one
4 ENSG00000000005          TNMD          Tnmd            TNMD    ortholog_one2one
5 ENSG00000000005          TNMD          TNMD            TNMD    ortholog_one2one
6 ENSG00000000005          TNMD          TNMD            TNMD    ortholog_one2one
            ref.specice                que.specice
1 hsapiens_gene_ensembl     mmusculus_gene_ensembl
2 hsapiens_gene_ensembl mfascicularis_gene_ensembl
3 hsapiens_gene_ensembl      tguttata_gene_ensembl
4 hsapiens_gene_ensembl     mmusculus_gene_ensembl
5 hsapiens_gene_ensembl mfascicularis_gene_ensembl
6 hsapiens_gene_ensembl      tguttata_gene_ensembl

  • 补充
    如果想找一对一同源的同源基因,可以对参数a.que赋值,以人为例,hsapiens_homolog_associated_gene_name表示对应的人同源基因,hsapiens_homolog_orthology_type表示同源类型,ortholog_one2one表示的就是一对一同源,可以根据生成的列进行筛选。
human.name <-c("hsapiens_homolog_associated_gene_name","hsapiens_homolog_orthology_type")
mouse.name  <- c("mmusculus_homolog_associated_gene_name","mmusculus_homolog_orthology_type")
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容