1. 为什么需要KEGG通路基因列表
在生物医学研究中,我们经常需要分析某个信号通路中涉及的基因。比如在研究癌症发生机制时,可能需要查看某个关键信号通路(如PI3K-AKT通路)中的所有基因。KEGG数据库是最常用的通路数据库之一,但直接从KEGG官网获取基因列表却不太方便。
我刚开始做生物信息分析时就遇到过这个问题:在KEGG官网上找到了感兴趣的通路,但发现没法直接下载基因列表。要么得手动复制粘贴,要么得解析复杂的网页结构,非常耗时。后来发现用R语言的KEGGREST包可以完美解决这个问题,还能自动完成基因ID转换,整个过程只需要几行代码。
2. 准备工作:安装必要的R包
2.1 安装Bioconductor管理器
在开始之前,我们需要先安装几个必要的R包。由于KEGGREST和biomaRt都是Bioconductor项目下的包,所以要先安装BiocManager:
if (!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_id:KEGG通路编号,比如"04060"species:物种名称,默认为人类("hsapiens")
3.2 获取KEGG基因列表
函数内部首先根据物种设置KEGG前缀:
kegg_prefix <- ifelse(species == "hsapiens", "hsa", "mmu")然后使用keggGet函数获取通路信息:
kegg_genes <- keggGet(paste0(kegg_prefix, pathway_id))[[1]]$GENE这里返回的是一个包含基因ID和描述的交替向量,我们需要提取其中的基因ID:
kegg_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 人类细胞因子通路分析
假设我们要研究细胞因子-细胞因子受体相互作用通路(hsa04060):
cytokine_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前缀(如大鼠是"rno")
- biomaRt中的数据集名称
比如对于大鼠:
kegg_prefix <- "rno" dataset <- "rnorvegicus_gene_ensembl"5.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分钟就完成了所有通路的基因列表准备,大大提高了工作效率。