一个R包—reticulate—在R中调用Python
R语言和python语言是生信行业经常使用的两个计算机语言,R语言具有统计和画图方面的优势,但是R语言在文件读写上的速度实在不敢恭维;Python具有较快的文件读写功能,但是其统计和画图却不如R语言用着方便。
今天介绍一个R包——“reticulate”,可以在R语言中直接调用Python,这样就可以把Python读写的优势和R语言统计画图的优势结合起来了。
首先安装R包,对于R包的安装,可以以下两种方式,一个是R自带的install.packages(),一个是基于BiocManager包的BiocManager::install(),推荐使用BiocManager::install(),这种方法可以安装的包更多一些,较为方便。
BiocManager::install("reticulate")
reticulate包实现在R中直接调用Python命令,并且可以直接使用Python命令产生的变量。
reticulate包提供repl_python()和exit命令,实现进入Python代码块和退出Python代码块,在repl_python()和exit之间的代码为Python代码,其他代码为R代码。
示例:
repl_python() ###进入python代码快 fileIN = open("E:/a.txt") a = [] for i in fileIN: a.append(i) fileIN.close() exit ###退出代码块
以上Python代码读取了一个叫a.txt的文件,并把每行内容存进列表里(Python里的列表相当于R里的向量)。
接下来展示退出Python代码块后如何使用在Python里的变量。
aArr <- py$a for(i in aArr){ print(i) }
使用py$a就把Python代码块里的变量赋值给了R里的变量。
如果想要反向使用,即想在Python代码块里使用R的变量,怎么用呢?以下是示例:
a <- py$a print(length(a)) repl_python() b = r.a ###使用r.a就把R里的变量a赋值给了Python代码块里的变量b print(len(b)) exit
这样,利用reticulate包我们就可以把Python和R结合起来使用了。