R语言实战:一键获取KEGG通路基因列表并完成ID转换

张开发
2026/5/14 22:32:26 15 分钟阅读
R语言实战:一键获取KEGG通路基因列表并完成ID转换
1. 为什么需要KEGG通路基因列表在生物医学研究中我们经常需要分析某个信号通路中涉及的基因。比如在研究癌症发生机制时可能需要查看某个关键信号通路如PI3K-AKT通路中的所有基因。KEGG数据库是最常用的通路数据库之一但直接从KEGG官网获取基因列表却不太方便。我刚开始做生物信息分析时就遇到过这个问题在KEGG官网上找到了感兴趣的通路但发现没法直接下载基因列表。要么得手动复制粘贴要么得解析复杂的网页结构非常耗时。后来发现用R语言的KEGGREST包可以完美解决这个问题还能自动完成基因ID转换整个过程只需要几行代码。2. 准备工作安装必要的R包2.1 安装Bioconductor管理器在开始之前我们需要先安装几个必要的R包。由于KEGGREST和biomaRt都是Bioconductor项目下的包所以要先安装BiocManagerif (!require(BiocManager, quietly TRUE)) install.packages(BiocManager)2.2 安装核心功能包接下来安装两个核心包BiocManager::install(KEGGREST) # 用于访问KEGG数据库 BiocManager::install(biomaRt) # 用于基因ID转换安装完成后加载这两个包library(KEGGREST) library(biomaRt)注意如果安装过程中遇到网络问题可以尝试更换CRAN镜像源。国内用户建议使用清华或中科大的镜像源。3. 核心函数解析3.1 函数整体结构下面这个自定义函数是整个流程的核心它实现了从KEGG通路编号到基因符号的一键转换get_kegg_gene_symbols - function(pathway_id, species hsapiens) { # 函数主体... }这个函数接受两个参数pathway_idKEGG通路编号比如04060species物种名称默认为人类(hsapiens)3.2 获取KEGG基因列表函数内部首先根据物种设置KEGG前缀kegg_prefix - ifelse(species hsapiens, hsa, mmu)然后使用keggGet函数获取通路信息kegg_genes - keggGet(paste0(kegg_prefix, pathway_id))[[1]]$GENE这里返回的是一个包含基因ID和描述的交替向量我们需要提取其中的基因IDkegg_gene_ids - gsub(paste0(kegg_prefix, :), , kegg_genes[seq(1, length(kegg_genes), by 2)])3.3 基因ID转换接下来使用biomaRt进行ID转换。首先设置数据集dataset - ifelse(species hsapiens, hsapiens_gene_ensembl, mmusculus_gene_ensembl) mart - useMart(ensembl, dataset dataset)然后执行实际的ID转换kegg_to_symbol - getBM( attributes c(entrezgene_id, external_gene_name), filters entrezgene_id, values kegg_gene_ids, mart mart )最后提取并返回基因符号gene_symbols - unique(kegg_to_symbol$external_gene_name) return(gene_symbols)4. 实际应用示例4.1 人类细胞因子通路分析假设我们要研究细胞因子-细胞因子受体相互作用通路hsa04060cytokine_genes - get_kegg_gene_symbols(04060) head(cytokine_genes)这个通路包含100多个基因手动收集会非常耗时而用我们的函数几秒钟就能完成。4.2 小鼠代谢通路分析对于小鼠研究只需要修改species参数mmu_genes - get_kegg_gene_symbols(00010, species mmusculus)这里分析的是糖酵解通路mmu00010。5. 进阶技巧与问题排查5.1 处理其他物种目前函数默认支持人类和小鼠要扩展其他物种需要修改两点KEGG前缀如大鼠是rnobiomaRt中的数据集名称比如对于大鼠kegg_prefix - rno dataset - rnorvegicus_gene_ensembl5.2 常见错误处理如果遇到Unable to connect to Ensembl错误可能是网络问题。可以尝试mart - useMart(ensembl, dataset dataset, host www.ensembl.org)或者使用镜像站点mart - useMart(ensembl, dataset dataset, host asia.ensembl.org)5.3 批量处理多个通路我们可以轻松扩展函数来处理多个通路pathway_ids - c(04060, 04110, 04310) all_genes - lapply(pathway_ids, get_kegg_gene_symbols) names(all_genes) - pathway_ids6. 结果保存与应用获取基因列表后通常需要保存结果供后续分析saveRDS(cytokine_genes, cytokine_genes.rds)这些基因列表可以用于富集分析热图绘制表达数据筛选通路活性评分我在实际项目中发现这个函数特别适合需要快速筛选通路相关基因的场景。比如在RNA-seq数据分析中经常需要关注特定通路中的基因表达变化有了这个工具就能快速获取目标基因集。有一次分析肿瘤样本数据时我需要比较多个信号通路的基因表达模式。手动收集这些基因会花费数小时而用这个自动化方法不到10分钟就完成了所有通路的基因列表准备大大提高了工作效率。

更多文章