研究miRNA,靶基因预测是一个绕不开的话题。一般如果我们手上只有少量miRNA或者靶基因,需要预测miRNA和靶基因之间的调控关系,我们可以直接使用网页工具。这样的网页工具也很多,例如targetscan,miRTarBase,miRcode,ENCORI (starbase)等。
但是如果你通过差异表达分析,文献检索等前期分析,一下子找到了成百上千个candidate,那么网页工具显然就不是很现实了。如果检索一个miRNA的靶基因需要一分钟,那么480个miRNA,需要8小时,也就是说你这一天不吃不喝,不休息,不上厕所,能把工作做完。
这显然不是小编的风格,如果我们用R代码来做这个事情,可能总共只需要1分钟。当然,前提是你已经在本地保存了这些数据库里面所有的预测结果,我们只需要做一些简单的过滤和整理就可了。当然你通过爬虫程序,去实时获取预测结果也是一种方法,效率可能就没有第一种方法高了,并且会对服务器会造成一定的负载,而且需要联网。
那么我们就来着重讲解第一种方法,处理本地的预测文件。
我们拿ENCORI(starbase)这个数据库举个例子。前面我们已经简单的讲解过RNA相互作用神器——ENCORI这个数据库的用法,以及如何批量下载该数据库中的预测结果。下载到本地的文件结构如下:
其实我们比较关心的是miRNAname和geneName这两列,其他的信息我们并不是太关心。有时候同一个miRNA可以结合到同一个靶基因的不同位置,所以如果只看miRNAname和geneName这两列,结果会有冗余。那么我们先来处理一下这个文件,让他更简洁,结果如下:
我们用前面讲过的R中的stack和unstack函数来将data.frame转换成list,方便后面来预测miRNA和靶基因之间的调控关系。
以基因名作为list的name
以miRNA名字作为list的name
接下来我们就可以来预测miRNA-mRNA, mRNA-miRNA, miRNA-lncRNA, lncRNA-miRNA之间的调控关系了。其实下面就很简单了,就是list取子集就可以了,然后再通过R中的stack和unstack函数将list转换成data.frame就大功告成了。
预测miRNA->gene之间的调控关系
预测mRNA->miRNA之间的调控关系
如果理解了预测miRNA-mRNA和mRNA-miRNA之间调控关系的过程,那么预测miRNA-lncRNA, lncRNA-miRNA之间的调控关系就很容易了。
参考文献
完整代码参考