美文网首页
biomaRt多个物种同源基因一步转换 2022-08-30

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

作者: 黄甫一 | 来源:发表于2022-08-29 17:50 被阅读0次

    适用背景

    之前写了一篇跨物种同源基因转换的文章,里面用到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")
    

    相关文章

      网友评论

          本文标题:biomaRt多个物种同源基因一步转换 2022-08-30

          本文链接:https://www.haomeiwen.com/subject/lrfxnrtx.html