news 2026/4/14 23:27:18

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
R语言实战:一键获取KEGG通路基因列表并完成ID转换

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 处理其他物种

目前函数默认支持人类和小鼠,要扩展其他物种需要修改两点:

  1. KEGG前缀(如大鼠是"rno")
  2. 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_ids

6. 结果保存与应用

获取基因列表后,通常需要保存结果供后续分析:

saveRDS(cytokine_genes, "cytokine_genes.rds")

这些基因列表可以用于:

  • 富集分析
  • 热图绘制
  • 表达数据筛选
  • 通路活性评分

我在实际项目中发现,这个函数特别适合需要快速筛选通路相关基因的场景。比如在RNA-seq数据分析中,经常需要关注特定通路中的基因表达变化,有了这个工具就能快速获取目标基因集。

有一次分析肿瘤样本数据时,我需要比较多个信号通路的基因表达模式。手动收集这些基因会花费数小时,而用这个自动化方法,不到10分钟就完成了所有通路的基因列表准备,大大提高了工作效率。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/14 23:26:04

EC 数据驱动的颠簸指数计算python全解析

一、算法缘起&#xff1a;为什么要计算颠簸指数&#xff1f; 飞机在飞行过程中遭遇的晴空颠簸&#xff08;Clear Air Turbulence&#xff0c;CAT&#xff09;是航空安全的“隐形杀手”——它无云可识别&#xff0c;却能造成机舱人员受伤、飞机结构损伤。基于 ECMWF&#xff08;…

作者头像 李华
网站建设 2026/4/14 23:18:02

Android 音视频编解码(三) -- MediaCodec 实战:同步与异步解码性能对比

1. MediaCodec解码模式概述 在Android音视频开发中&#xff0c;MediaCodec是处理编解码任务的核心组件。它提供了两种工作模式&#xff1a;同步模式和异步模式。同步模式采用阻塞式API调用&#xff0c;开发者需要手动管理输入输出缓冲区队列&#xff1b;而异步模式则通过回调机…

作者头像 李华
网站建设 2026/4/14 23:14:37

第六课HDFS

一、HDFS概述 1.1HDFS产生背景 随着数据量越来越大&#xff0c;在一个操作系统存不下所有的数据&#xff0c;那么就分配到更多的操作系统管理的磁盘中&#xff0c;但是不方便管理和维护&#xff0c;迫切需要一种系统来管理多台机器上的文件&#xff0c;这就是分布式文件管理系…

作者头像 李华