You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决clusterProfiler中EnrichKEGG的‘无基因可映射’报错?

EnrichKEGG 报错"No gene can be mapped"的解决办法

问题详情

在全基因组分析前,使用test.csv的少量基因测试enrichKEGG功能,数据如下:

idfc
AJAP_14870-0.04
AJAP_148750.32
AJAP_14880-0.06
AJAP_148850.15
AJAP_14890-0.52
AJAP_14895-0.39
AJAP_149000.16

执行R代码:

geneList = test[,2]
names(geneList) = as.character(test[,1])
geneList = sort(geneList, decreasing = TRUE)

mygene <- names(geneList)[abs(geneList) > 2]

kk <- enrichKEGG(gene         = mygene,
                 organism     = 'aja',
                 pvalueCutoff = 0.05)

运行后报错:

--> No gene can be mapped....
--> Expected input gene ID:
--> return NULL...

已确认基因名称无空格,修改下载方法后仍报错。


排查与解决步骤

1. 检查筛选后的基因列表是否为空

你的代码用abs(geneList) > 2筛选差异基因,但测试数据中所有fc的绝对值最大仅为0.52,完全达不到阈值,导致mygene是空向量。空向量自然无法进行KEGG映射,这是最直接的原因。

验证方法:运行length(mygene),如果结果为0,立即调整筛选阈值(比如改成abs(geneList) > 0.5),确保mygene包含有效基因ID。

2. 确认物种缩写与基因ID格式正确性

  • 验证organism = 'aja'是否为KEGG认可的物种缩写:执行clusterProfiler::search_kegg_organism('aja', by='abbr'),查看是否返回对应的物种信息。如果没有结果,说明物种缩写错误,需要更换为正确的KEGG物种代码。
  • 检查基因ID格式:手动验证一两个基因ID(比如AJAP_14890)是否存在于该物种的KEGG数据库中。如果你的基因ID是自定义前缀,需要先转换为KEGG官方认可的ID格式。

3. 单独测试基因映射功能

使用bitr_kegg工具单独验证基因能否被KEGG数据库识别:

test_genes <- c("AJAP_14870", "AJAP_14890")
bitr_kegg(test_genes, fromType = "kegg", toType = "kegg", organism = "aja")

如果返回空结果,说明要么物种ID错误,要么这些基因不在KEGG的注释范围内。

4. 重置KEGG本地缓存

若本地缓存的KEGG数据损坏或过时,可清空后重新下载:

# 删除clusterProfiler的KEGG缓存文件
file.remove(list.files(system.file("extdata", package="clusterProfiler"), pattern="kegg_.*.rds"))
# 重新运行富集分析
kk <- enrichKEGG(gene = mygene, organism = 'aja', pvalueCutoff = 0.05)

内容的提问来源于stack exchange,提问作者reltubycul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 01:40:17