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

返回: R 语言, R的接口