有一天我的师弟提了一个需求:
对于ChIP的下游分析,我很喜欢DiffBind做差异分析然后用ChIPseeker做注释这一套流程(因为ChIPseeker的输入格式是GRange格式,而DiffBind的dba.report输出也恰好是GRange格式,两者可以无缝衔接)。我之前的套路,一直都是无脑输出所有的DiffBind结果,然后放入ChIPSeeker里面做注释,完了之后转成data.frame,然后对data.frame做subset,做后续的GO分析()。但今天突然想对ChIPseeker的注释结果直接做subset,然后分别对上下调的结果画plotAnnoPie等ChipSeeker内置的画图函数。但发现subset无法对ChipSeeker annotatePeak函数的输出结果做筛选。
当然,对于DiffBind的结果用subset,分别提取上下调,然后再注释也是可以的,不过这样感觉更麻烦。
面对需求,如果无法解决提出需求的人,那么就只能写代码实现这个需求了。于是经过一个下午的努力,我给ChIPseeker加上了subset的功能。
先来介绍下如何使用。我们需要用安装最新的ChIPseeker
我们以测试数据集来演示
此时会输出peakAnno里的描述统计信息
peakAnno可以直接用来画图
Pie
upset
假如你突发奇想,我能不能就看看某一条染色体的作图结果,或者对于MACS2的结果,想根据FDR筛选下peak,然后看下peak的变化。
在之前我们无法直接对peakAnno背后的对象进行操作,所以需要先对输入的GRanges进行过滤然后再用进行注释,然后画图。
但是现在我们有了, 这一切就变得稍微简单起来了
我们可以按照染色体编号进行筛选
可以按照peak宽度进行筛选
filter
如果筛选之后没有任何结果,那么就会报错
那么问题就是,这些筛选条件的名字怎么获知。
只要将peakAnno转成GRanges格式,所以可以看到的列都是你可以筛选的标准。
给ChIPseeker增加subset的功能,应该是我第一次在GitHub进行pull requests操作。写这个函数,需要先去理解csAnno对象到底是什么,以及如何保证csAnno这个对象在操作前后不会发生变化。
其实这个函数挺简单的,就是下面几行
因为有很多功能是ChIPseeker已经有了的,比如说, 还有一些是S4Vectors和BiocGenerics包提供的,比如说subset, start和end。
领取专属 10元无门槛券
私享最新 技术干货