[!序言] 好久以以前有KEGG.db,后来KEGG不开放了,这个包也就一直不更新了,然后过了几年,也就被移除了,距今又是好几年。clusterProfiler一开始的KEGG支持也是基于这个包,在KEGG不开放之时,我很快就上线了在线爬数据的KEGG版本。但之前支持KEGG.db依然保留着。后来我们就搞了个createKEGGdb的R包,让你可以用我们在线爬数据的功能来生成一个可以安装的KEGG.db包,然后可以对接原来clusterProfiler的功能,就变成了你可以缓存KEGG的数据,分析时是本地的。

由于我现在搞个新格式:KEGG的富集分析终于真的本地化了。,原来的方式等同于废弃。但最近有github issue,说createKEGGdb报错,我发现这还真有人在用。于是顺手就修复了。同时也看看以前的issue。发现了一个想把微生物的KEGG本地化的需求,这一点都不难,然后我想做宏基因组的小伙伴大概也是有这需求的,反手就是支持了一下。

做微生物组功能注释时,大家最常碰到的一个现实问题是:注释用的 KEGG 路径—基因映射太分散,在线查询速度慢、还容易被网络波动打断。createKEGGdb 的目标很简单:把 KEGG REST API 的结果打包成一个本地 KEGG.db(sqlite + AnnDbPkg 结构),后续富集分析就只读本地文件。

但当需求变成“所有微生物(细菌、病毒、真菌、古菌)”时,很多人会卡在第一步:微生物物种代码怎么拿?哪些算微生物?

这篇文章给出一个可执行的做法:直接从 KEGG 提供的 organism 列表筛选出我们要的物种代码,然后一键构建。


1. 关键事实:KEGG 已经给了完整物种列表

KEGG REST API 的 organism 列表在这里:

每一行大致是 4 列:

  1. KEGG 的 taxonomy id(例如 T01001
  2. 物种代码(例如 hsa
  3. 物种名称
  4. 系统分类路径(lineage),例如 Eukaryotes;Animals;Mammals;Primates

对我们来说,真正需要的是第 2 列“物种代码”,它正是 create_kegg_db() 的输入。


2. 怎么定义“微生物”?

issue #6 的问题是“所有微生物(所有细菌、病毒、真菌、古菌)”。在 KEGG 的 lineage 里,这几类可以直接用前缀匹配:

  • 细菌:Prokaryotes;Bacteria...
  • 古菌:Prokaryotes;Archaea...
  • 真菌:Eukaryotes;Fungi...
  • 病毒:Viruses...

这不是唯一的“微生物”定义。例如某些原生生物并不属于 Fungi,但也可能出现在微生物组数据里。如果你需要把它们也纳入,可以在脚本里增加额外规则(比如把某些 Eukaryotes 分支也纳入)。本文先按 issue #6 的四类做。


3. 可直接调用的函数

现在可以直接调用 createKEGGdb 包内置的函数 create_kegg_db_microbiota()

它会:

  1. 下载 organism 列表
  2. 按 lineage 过滤出细菌/古菌/真菌/病毒
  3. 取出物种代码(第二列)
  4. 调用 createKEGGdb::create_kegg_db() 构建

示例:

createKEGGdb::create_kegg_db_microbiota(output_dir = "/path/to/output")

输出目录下会生成 KEGG.db_*.tar.gz


4. 运行时的几个现实提醒

  1. 这会很慢

微生物物种数量非常大,构建“全微生物版”数据库必然会跑很久。建议在稳定网络环境下运行,并预留足够时间。

  1. 网络波动不可避免

KEGG REST 在高频请求下偶尔会返回 400、SSL connect error 等问题。当前版本在遇到“某个物种无 pathway/请求失败”时会跳过该物种并继续,避免全局中断。

  1. 先从子集开始

如果你只是做常见细菌富集,建议先只做 Prokaryotes;Bacteria,验证流程没问题后再扩展到古菌/真菌/病毒。


5. 常见问题

Q1:我只想构建细菌,怎么改?

在函数里设置 include 参数即可:

createKEGGdb::create_kegg_db_microbiota(
  output_dir = "/path/to/output",
  include = "bacteria"
)

Q2:KEGG 的 pathway 名称里有物种后缀,能去掉吗?

当前代码已经做了简单清洗(把 - ... (xxx) 的尾巴去掉),主要是为了后续展示更一致。


参考链接