R语言GO富集分析踩坑之HPO.db的安装

之前装clusterProfiler的时候遇到这个问题,死活装不上HPO.db这个依赖包,后来经过了好一番折腾终于解决了。

太长不看版: 从Github上下载 离线安装包 ,然后安装这个版本。


在完成基因差异表达分析以后,GO富集分析和KEGG富集分析常常是我们要进行的流程。

基因本体论(gene ontology)数据库 是一个致力于各种生物学数据标准化的项目,这一项目从三个GO domains上描述我们对生物学领域的了解。在每一个domains中都有大量GO term(GO术语),每一条术语包含与之对应的若干基因。

三个GO domains分别是BP(biological process),MF(molecular function),CC(cellular component)

例如,在BP domain下面有一条术语”regulation of activated T cell proliferation”(活化T细胞增殖的调控),其包含了与这一功能相关的几十个基因,例如 IGF1/IL23A/JAK3/FOXP3/CD274/ARG1/IL12RB1/SLAMF1/IL18 等。

更多的信息,可以参考知乎文章 《Gene Ontology(GO)简介与使用介绍》

GO富集分析,则是使用一些统计检验的方法,帮助我们寻找差异基因与哪些生物学通路或大分子复合物有关,从而对我们在实验中发现的差异基因进行功能注释,或用于更下游的探索。南方医科大学的余光创教授开发了clusterProfiler这一R包,可以让我们在R中方便地进行GO富集分析与可视化。然而,这个包依赖了余教授(aka. Y叔)开发的另外多款R包,包括DOSEHPO.db 等,因此安装过程很漫长,很需要耐心……以及,面对安装失败时的好脾气。

HPO.db安装失败啦

(上图:令人高血压的报错)

关于报错的原因,Y叔专门写了一篇文章来说明(《听说你的clusterProfiler装不上了?》),大意是HPO.db用到了一些云服务,需要靠AnnotationHub获取数据,如果AnnotationHub不对则有可能安装失败,也就是说安装失败的锅他们不背。

但是我们总归是要解决这个问题的,要不然科研进度又双叒叕要拖上一阵子了……

所以我们仔细看看报错是怎么报的:

1
2
3
error: Invalid Cache: sqlite file
Hub has not been added to cache
Run again with 'localHub=FALSE'

报错信息提示我们加上 localHub=FALSE 再去跑一次。然而我试过了,并不行。

R语言的install.packages()函数提供了安装离线版本安装包的能力。既然作者说HPO.db用到了一些云服务,那么如果我们用离线包安装,会不会好一点呢?Bioconductor上确实提供了离线包的下载链接(如下图红框),我们把它下载下来安装试一下。

红框里为下载地址

1
2
3
# 这个指令用于离线安装,从本地加载安装包
# 第一个参数填入安装包的完整文件路径,下面的路径只是一个示范
install.packages("HPO.db_0.99.2.tar.gz",repos=NULL,type="source")

本以为这样会好一点,结果还是收到了和刚刚一样的报错。问题出在哪儿呢?百思不得其解。

百般无奈之下,翻起了作者的Github,结果无意中看到一条这样的issue (乐:

作者本人回应

作者大概是知道HPO.db安装失败这回事,于是整理出了一个离线版的包。作者也建议我们从这个存储库(huerqiang/HPO.db_MPO.db)中下载离线版本的HPO.db包用于安装。我们先把这两个文件下载下来:

1
2
3
git clone https://github.com/huerqiang/HPO.db_MPO.db.git
cd HPO.db_MPO.db
ls -lh

输出:

1
2
3
4
total 28M
-rw-rw-r-- 1 user user 6.2M Nov 11 23:18 HPO.db_0.99.0.tar.gz
-rw-rw-r-- 1 user user 21.4M Nov 11 23:18 MPO.db_0.99.0.tar.gz
-rw-rw-r-- 1 user user 422 Nov 11 23:18 README.md

从文件体积上看,这个“离线安装版”确实比bioconductor版大了一圈。是离线包无疑了,希望这次能成功。

还用前面的离线安装方法试一下:

1
2
3
4
# 和前面一样,第一个参数填入安装包的完整文件路径,下面的路径只是一个示范
install.packages("HPO.db_0.99.0.tar.gz",repos=NULL,type="source")
library("HPO.db") # 如果安装完了,用这个指令test一下,看看能不能加载
packageVersion("HPO.db") # 以及查看一下版本号

输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
> install.packages("HPO.db_0.99.0.tar.gz",repos=NULL,type="source")
* installing *source* package 'HPO.db' ...
** using staged installation
** R
** inst
** byte-compile and prepare package for lazy loading
** help
*** installing help indices
** building package indices
** installing vignettes
** testing if installed package can be loaded from temporary location
** testing if installed package can be loaded from final location
** testing if installed package keeps a record of temporary installation path
* DONE (HPO.db)
> library("HPO.db")
> packageVersion("HPO.db")
[1] '0.99.0'

如此,终于安装成功!

在这以后,安装clusterProfiler就一帆风顺多了。至于作者提到的AnnotationHub的问题,或许等未来这些依赖库更新后会解决吧。