美文网首页
R获取KEGG/GO中某一通路所有基因

R获取KEGG/GO中某一通路所有基因

作者: pudding815 | 来源:发表于2023-12-06 11:05 被阅读0次

    1、通过KEGGREST包来探索KEGG数据库的12大代谢通路

    #BiocManager安装"KEGGREST",
    if (!requireNamespace("BiocManager", quietly = TRUE))
      install.packages("BiocManager")
    BiocManager::install("KEGGREST")
    
    #加载"KEGGREST"
    library(KEGGREST) #用于提取通路及基因信息
    
    #获取KEGG数据库收录的所有物种的清单
    org <- keggList('organism') 
    ##小鼠为mmu
    #获取小鼠的KEGG数据库的全部通路及基因集
    mmu_path <- keggLink("pathway","mmu") 
    #得到字符型向量。元素名为基因id,元素为通路名
    length(unique(names(mmu_path)))
    #[1] 9394 即涉及到的基因数量是 9394个
    length(unique(mmu_path))
    #[1] 352  即KEGG通路有 352 条
    

    通过观察KEGG官网 :https://www.genome.jp/kegg/pathway.html 的12大代谢通路,可以看到通路的id都是00开头(大多数,还是有些以01开头)

    meta= unique(mmu_path)[grepl('mmu00',unique(mmu_path))]
    mmu_info <- lapply(meta, keggGet)  
    
    nm=unlist(lapply( mmu_info , function(x) x[[1]]$NAME))
    library(stringr)
    genes = unlist(lapply(mmu_info , function(x) {
      g = x[[1]]$GENE
      paste(str_split(g[seq(2,length(g),by=2)],';',simplify = T)[,1],collapse =';')
    }))
    df =data.frame(
      mmu= meta,
      nm=nm,
      genes =genes
    )
    
    1701916503072.png

    以上方法,仅能够提取00开头的代谢通路基因,01还需要其他方法

    2、找到KEGG特定通路的所有基因

    例如,提取牛的TCA,如图,查到KEGG基因号为bta00020


    1701916742833.png
    1701916806581.png

    使用包装函数

    getKEGG <- function(ID){
      
      library("KEGGREST")
      
      gsList = list()
      for(xID in ID){
        
        gsInfo = keggGet(xID)[[1]]
        if(!is.null(gsInfo$GENE)){
          geneSetRaw = sapply(strsplit(gsInfo$GENE, ";"), function(x) x[1])   
          xgeneSet = list(geneSetRaw[seq(2, length(geneSetRaw), 2)])          
          NAME = sapply(strsplit(gsInfo$NAME, " - "), function(x) x[1])
          names(xgeneSet) = NAME
          gsList[NAME] = xgeneSet 
        } else{
          cat(" ", xID, "No corresponding gene set in specific database.\n")
        }
      }
      return(gsList)
    genelist <- as.data.frame(getKEGG('bta00020'))
    write.csv(genelist,"bta00020.csv")
    

    3、R获取GO中某一通路所有基因

    #根据物种预处理GO数据库
    #需要下载getGoTerm.R脚本https://github.com/JiahaoWongg/Files/blob/main/getGoTerm.R
    source("getGoTerm.R")
    GO_DATA <- get_GO_data("org.Mm.eg.db", "ALL", "SYMBOL")
    save(GO_DATA, file = "GO_DATA_mmu.RData")
    #上述处理时间较长,以鼠为例,保存为Rdata后续直接加载
    
    ##下面是两个包装函数,建议写为R直接调用
    findGO <- function(pattern, method = "key"){
      
      if(!exists("GO_DATA"))
        load("GO_DATA.RData")
      if(method == "key"){
        pathways = cbind(GO_DATA$PATHID2NAME[grep(pattern, GO_DATA$PATHID2NAME)])
      } else if(method == "gene"){
        pathways = cbind(GO_DATA$PATHID2NAME[GO_DATA$EXTID2PATHID[[pattern]]])
      }
      
      colnames(pathways) = "pathway"
      
      if(length(pathways) == 0){
        cat("No results!\n")
      } else{
        return(pathways)
      }
    }
    
    getGO <- function(ID){
      
      if(!exists("GO_DATA"))
        load("GO_DATA.RData")
      allNAME = names(GO_DATA$PATHID2EXTID)
      if(ID %in% allNAME){
        geneSet = GO_DATA$PATHID2EXTID[ID]
        names(geneSet) = GO_DATA$PATHID2NAME[ID]
        return(geneSet)     
      } else{
        cat("No results!\n")
      }
    }
    
    load("GO_DATA.RData") # 载入数据 GO_DATA
    findGO("insulin") # 寻找含有指定关键字的 pathway name 的 pathway
    findGO("INS", method = "gene") # 寻找含有指定基因名的 pathway
    getGO("GO:1901142") # 获取指定 GO ID 的 gene set
    

    相关文章

      网友评论

          本文标题:R获取KEGG/GO中某一通路所有基因

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