我们知道R语言在作图统计方面很是实用,但是在其他游戏开发、网页制作、人工智能等很多方面相对于python是很局限。今天我们来以weblogo为例展示如何在R语言中调用python。
首先了解下Weblogo,其是由CrooksGE, Hon G, Chandonia JM, Brenner SE共同开发的来使基因序列的描述尽可能的简单以及可视化。具体的介绍详见http://weblogo.berkeley.edu/。
此可视化的分析程序基于Python语言实现的,包括了网页版以及python包版本。
网页版的我们就不赘述了,在其官网只要输入fasta文件就可以获得相应的weblogo图。
本期我们主要实现通过调用python中的weblogo包将最终的weblogo图在R语言中保存。
首先,我们要建立python与R语言之间的联系需要一个包rPython。此包主要基于的开发环境是Linux。我们前面介绍过如何让Linux下的R包在windows下运行。在此不再赘述。当然,这次还涉及到与python的对接。
接下来我们介绍下,在安装过程中的几个注意事项:
- rPython包的下载,下载地址:https://github.com/cjgb/rPython-win。
- 解压,修改configure.win中的python路径改为你电脑安装路径。
- 首先在R语言导入devtool包,然后install(rPython文件夹),安装完后。
- 当然,可能在安装的时候会缺少一个依赖包RJSONIO。直接官网下载然后本地安装就可以(前提是你的devtool已经载入,rtool安装没有问题)。
在python中安装对应的包一般使用pipinstall 包。在python中weblogo包名字不变,但是在安装后导入需要注意其名字改成了weblogolib。
安装好以上的两个包接下来就是绘制weblogo图。
下面我们看下在python如何绘制weblogo图,下面是一个示例程序:
from weblogolib import *
fin = open('G:/weblogo-master/test_weblogo/data/cap.fa')
seqs = read_seq_data(fin)
data = LogoData.from_seqs(seqs)
options = LogoOptions()
options.title = "A Logo Title"
options.fineprint = 'Python plot'#标注出自于Python语言
format = LogoFormat(data, options)
eps = eps_formatter( data, format)
file=open('weblogo.eps','w')
file.write(eps)
file.close()
最终图像需要用AI软件打开:
接下来我们在R中去实现我们的weblogo图绘制。
首先看下rPython中相关的函数:
python.assign用于将R语言变量传递给python,与之相对应的是python.get函数。
python.assign(var.name, value, ...)
python.call函数用于将执行python命令
python.call( py.fun, ..., simplify = TRUE,as.is = FALSE )
python.exec函数用于在R语言中执行Python命令
python.exec( python.code, get.exception =TRUE )
我们来看下如何实现两者的结合:
library(rPython)
python.exec('from weblogolib import *')
python.exec("fin =open('G:/weblogo-master/test_weblogo/data/cap.fa')")
python.exec("seqs =read_seq_data(fin)")
python.exec("data =LogoData.from_seqs(seqs)")
python.exec("options =LogoOptions()")
python.exec("options.title = 'A LogoTitle'")
python.exec("options.fineprint = 'Rplot'")#标注出自于R语言
python.exec("format = LogoFormat(data,options)")
python.exec("eps = eps_formatter(data, format)")
weblogo=python.get('eps')
as=file('aa.eps',open='wb')
writeBin(weblogo,as)
close(as)
绘制结果: