R的Python接口
2018-09-03
2018-09-03
rPython
如果R中有某些功能Python不容易实现时,则可以安装加载rpy2包,从而实现在python中调用R语言命令的功能。本章节要介绍的rPython包则实现了相反的功能,即在R语言中调用Python命令。通过发挥rPython的作用,可以很好的将Python与R语言结合在一起,两者相辅相成,使数据分析工作更加得心应手。
1 rPython简介
rPython包用于在R语言环境中调用Python命令。通过使用rPython,可以实现将数据传输给Python,从Python中获取数据,也可以调用Python的函数及命令,实现R与python互通。对于R语言来说,Python中存在很多优秀的模块,而开发者们也想将这些功能在R语言中实现时,则可以利用rpython函数调用python模块,从而时R语言的到更好的扩展。
2 rpython安装介绍
rpython包托管在cran官网上,因此可以很方便的下载安装rpython包,但是rpython包只适用于unix的系统环境或者其它类unix平台(比如MAC系统),而对于windows用户而言,则无法使用rpython包,取而代之的是rPython-win包,该包目前托管在Github上(https://github.com/cjgb/rPython-win)。
本文所有操作均在MAC上实现,因此可以直接使用rpython包。首先利用install.packages命令安装rPython包。安装成功后,则可调用该包了。
## install.packages('rPython') # 安装rPython包
library(rPython) # 加载rPython包
3 rPython使用介绍
rPython函数在将数据在R语言与python环境中传输时,会先将数据转换为JSON格式,因此rPython包的调用依赖于RJSONIO包,关于RJSONIO包的使用,可以自行查阅RJSONIO的官方文档。
3.1 rPython相关函数介绍
3.1.1 python.assign()函数
python.assign()函数用于将R语言变量传递给python,与之相对应的是python.get()函数。
python.assign(var.name, value, ...)
a <- 1:4
python.assign( "a", a )
3.1.2 python.call()函数
python.call()函数用于将执行python命令
python.call( py.foo, ..., simplify = TRUE, as.is = FALSE )
python.call( "len", 1:3 )
## [1] 3
3.1.3 python.exec()函数
python.exec函数用于在R语言中执行Python命令
python.exec( python.code, get.exception = TRUE )
a <- 1:4
b <- 5:8
python.exec( c( "def concat(a,b):", "\treturn a+b" ) )
python.call( "concat", a, b)
## [1] 1 2 3 4 5 6 7 8
3.2 rpython应用
以iris鸢尾花数据集为例,首先查看数据集:
head(iris) # 查看数据集iris前六行数据
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
python.assign('py_dict1', iris) # 将数据集iris导入python环境
python.exec('print type(py_dict1)') # 输出py_dict1的数据类型
python.exec('print "Hello World!"') # 输出Hello world
4 参考文献
[1] rPython:在R语言中调用python命令. http://www.niugebbs.com/delanz/1075530.html
[2] Python&R语言-rpy2使用示例. http://www.cnblogs.com/cloudtj/articles/6372200.html#A1
[3] R Markdown Python Engine. https://cran.r-project.org/web/packages/reticulate/vignettes/r_markdown.html#engine-setup