日常瞎掰
奇奇怪怪的事又发生了,真就应了那句话,不出意外的话,意外就会发生了。。。
最近需要用clusterProfiler
做KEGG
富集,然后就出现了意外,居然出现No gene can be mapped....
状况。怎么肥事?用不了,要不换个工具试试?犹豫了片刻,心想来都来了,不能空手而归呀 (没办法就是这么有原则) !
于是乎,又开始捣腾起来了。首先,网上一搜,这种情况不是个例,也给出了相应解决的方法。蛋似,方法着实有点让人难受,难道就没有其他办法了么?让我们一起来回顾一下。
起因
基因集做一个KEEG
富集,对于RNA-seq
数据来说已经是常规操作了。本觉得用clusterProfiler
来完成这个任务也就是分分钟的事,可谁成想却出现了下面的意外情况:
glist <- read.table('genes.txt',header=T,stringsAsFactors=F,sep='\t')
head(glist)
SYMBOL ENTREZID
1 Foxd3 15221
2 Foxj3 230700
3 Dmrt1 50796
4 Lhx3 16871
5 Arid3b 56380
6 Foxl2 26927
enrich <- enrichKEGG(gene=glist$ENTREZID, organism='mmu', keyType="kegg")
Reading KEGG annotation online:
--> No gene can be mapped....
--> Expected input gene ID:
--> return NULL...
head(enrich)
NULL
怎么会没有富集结果?No gene can be mapped....
怎么回事?难道基因集的ID匹配不上,不可能吧,物种可是小鼠!一度自我怀疑,没办法,就用DOSE
包里面的数据来测试一下:
data(geneList, package='DOSE')
de <- names(geneList)[1:100]
yy <- enrichKEGG(de, pvalueCutoff=0.01)
--> No gene can be mapped....
--> Expected input gene ID:
--> return NULL...
head(yy)
NULL
事实摆在那里,不是基因ID的问题,一定是程序哪里出现了问题。网上一搜,给出的答案大都是KEGG
数据库更新了,更新clusterProfiler
后就能正常在线获取数据了。更新包原本多么简单的一件事,可无论如何也无法安装新版的clusterProfiler
。看着眼前的R-4.0
,再看看包的安装说明(R >= 3.5.0),一时间陷入了沉思。
哪个环节出问题了?难道真要想网上说的那样将R
升级到4.2
?无语了。。。本来想炒个菜,没想到锅不行了!
方法
此时,有两个选择:一,更新R
和clusterProfiler
;二,换一个工具。那有没有第三个选择,既不用更新也不换工具呢?在enrichKEGG
函数的参数里面已经给出答案,use_internal_data
可以指定使用本地KEGG.db
包的数据,这样就可以正常富集了:
enrich <- enrichKEGG(gene=glist$ENTREZID, organism='mmu', keyType="kegg", use_internal_data=T)
head(enrich)
ID Description GeneRatio BgRatio pvalue
mmu05200 mmu05200 Pathways in cancer 5/8 326/6698 1.314411e-05
mmu04630 mmu04630 Jak-STAT signaling pathway 3/8 153/6698 6.016399e-04
mmu05223 mmu05223 Non-small cell lung cancer 2/8 55/6698 1.796063e-03
mmu05220 mmu05220 Chronic myeloid leukemia 2/8 74/6698 3.229817e-03
mmu05222 mmu05222 Small cell lung cancer 2/8 87/6698 4.438720e-03
mmu05160 mmu05160 Hepatitis C 2/8 137/6698 1.072686e-02
p.adjust qvalue geneID Count
mmu05200 0.0002365941 0.0001245232 14013/20851/20181/218772/56458 5
mmu04630 0.0054147594 0.0028498734 20847/20851/20849 3
mmu05223 0.0107763806 0.0056717792 20181/218772 2
mmu05220 0.0145341751 0.0076495658 14013/20851 2
mmu05222 0.0159793921 0.0084102064 20181/218772 2
mmu05160 0.0321805879 0.0169371515 20847/20181 2
这个办法虽然简单,但不建议使用。因为依赖的KEGG.db
包更新不那么及时,可能会错过想要的结果。所以,clusterProfiler
默认是在线获取KEGG
数据,这样每次使用都是最新的数据库。
科研嘛,虽然包容性很强,但还需要认真严谨一些比较好。下面,将clusterProfiler
从3.18.1
更新到4.6.2
后又做了一遍,对比上面的结果可知,排序靠前的富集通路变了:
packageVersion('clusterProfiler')
[1] ‘4.6.2’
enrich <- enrichKEGG(gene=glist$ENTREZID, organism='mmu', keyType="kegg")
Reading KEGG annotation online: "https://rest.kegg.jp/link/mmu/pathway"...
Reading KEGG annotation online: "https://rest.kegg.jp/list/pathway/mmu"...
head(enrich)
ID Description
mmu05223 mmu05223 Non-small cell lung cancer - Mus musculus (house mouse)
mmu05161 mmu05161 Hepatitis B - Mus musculus (house mouse)
mmu04630 mmu04630 JAK-STAT signaling pathway - Mus musculus (house mouse)
mmu04217 mmu04217 Necroptosis - Mus musculus (house mouse)
mmu05220 mmu05220 Chronic myeloid leukemia - Mus musculus (house mouse)
mmu04658 mmu04658 Th1 and Th2 cell differentiation - Mus musculus (house mouse)
GeneRatio BgRatio pvalue p.adjust qvalue
mmu05223 3/8 72/9327 2.402769e-05 0.001273467 0.0008599383
mmu05161 3/8 163/9327 2.751355e-04 0.004495214 0.0030354973
mmu04630 3/8 171/9327 3.169120e-04 0.004495214 0.0030354973
mmu04217 3/8 175/9327 3.392615e-04 0.004495214 0.0030354973
mmu05220 2/8 76/9327 1.777434e-03 0.018840803 0.0127226876
mmu04658 2/8 88/9327 2.375089e-03 0.019804257 0.0133732821
geneID Count
mmu05223 20851/20181/218772 3
mmu05161 20847/20851/20849 3
mmu04630 20847/20851/20849 3
mmu04217 20847/20851/20849 3
mmu05220 14013/20851 2
mmu04658 20851/20849 2
原因
虽然KEGG
富集的问题解决了,但有个问题还是没有答案。为什么R-4.0
无法安装clusterProfiler-4.8.2
?明明要求是R >= 3.5.0
即可,什么原因导致的呢?对此,花费了一点时间寻找了一下原由,最终找到了答案。
clusterProfiler
包的要求R >= 3.5.0
(见上面的截图) 没有问题,可该包需要依赖其他的包,如DOSE(>= 3.23.2)
。然后,进到DOSE
介绍页面如下图,最新版也只要R >= 3.5.0
,也没有问题:
那接着往下找,可以看到DOSE
也需要依赖其他的包,如HDO.db
。没事,点进去看一下,意外就这么出现了。HDO.db
要求R >= 4.2
,惊不惊喜,意不意外?
此时,R-4.0
无法安装新版clusterProfiler
的原因好像找到了。不过,看到这样的答案,内心的情绪相当丰富。。。
结束语
R语言之所以受欢迎,大抵是因为有海量的扩展包可以利用,站在别人的肩膀上,不论是使用包还是开发包都可以很方便。蛋似,也正是有这么多的包可用,包与包之间依赖的关系才形成了套娃式的结构,真的是牵一发而动全身。
不过,这似乎并不影响R
的好用,无非就是更新一下包,大不了就是切换一下版本,这都是不是什么问题。毕竟,天下无难事,只要肯放弃。做个KEGG
富集,半天的时间又没了,时间都去哪了?
往期回顾
R语言的碎碎念
linux入门学习指南
武林大会之对角线热图
ggplot2 | 绘制双y轴的图型
tidydr | 一行代码搞定小坐标系