R(又称R语言)是一款开源的跨平台的数值统计和数值图形化展现工具。通俗点说,R是用来做统计和画图的。R拥有自己的脚本语言和大量的统计、图形库(得益于开源社区),这让她看起来既美又实用。与其他同类软件(如 SPSS)相比,R的特点是纯命令行的,这倒也好,我们更应该把注意力放在数据本身,而非统计工具的UI。

R虽说有一套自己的语言,还挺完备,但她最专业的还是做统计和画图,而像连接数据库、文本处理、文件操作等这些脏活可不能委屈R来干哪,这些得有其他语言来负责,我的选择是咱最熟悉的、做这些脏活最棒的Python。那接下来的问题很清楚了,R和Python如何一起工作?拍拍脑袋,想到可能有下面几种办法:

1. R和Python只共享文件,Python把源数据处理干净,生成格式化的文件放在预定的目录下,做个定时器让R去读文件,最终输出统计结果和图表。

这种做法一定程度上可行,除了做定时器外,还可以让Python即时执行”rscript”命令调用R脚本来工作,只是这种办法限制太大,只能够交换文件,Python不能对R进行较精确的控制。

2. 让Python直接调用R的函数,R是开源项目,肯定会有一些第三方库实现Python与R互通。

果然,我找到了rpy2,可以实现使用python读取R的对象、调用R的方法以及Python与R数据结构转换等。实际上除了Python,其他语言与R互通的第三方包也大大的有。

最后我选择第2种方法,来让R与Python共舞。

模块 rpy2.robjects 是rpy2对R的一个高级封装,该模块里包含了一个r对象和一系列的R数据结构。使用rpy2的大多数情况,只需要跟这个模块打交道即可。rpy2的安装在此不多讲了,有兴趣的同学看文档去,直接体验一下R如何与Python无缝整合吧。

了解r实例

r实例是指rpy2.robjects.r,它是在Python中的嵌入式R进程,把r当作从python走向R的通道来看就可以了。通过r实例,我们可以读取R的内置变量、调用R的函数、甚至,直接把它当作R的解析器来用。

访问R的对象

在R的命令行中,我们直接输入对象名来访问R的内置对象,如pi、letters:

在R控制台中访问R对象

而使用r实例,python访问R对象也很简单,而且方法很多:

在python中访问R对象

在这段代码中,我们用了三种方式来访问R对象,把r实例当作字典,把r实例当作方法,把r实例当作一个类对象(真是神喻呀~)。在实际中,使用哪一种方式要因习惯而异,我喜欢的方法是使用第三种,把r实例当作自己人,直接使用”.”来访问R对象。但这种方法有一个缺陷,就是不能访问带名字空间的R对象或函数,而其他两种方式是可以的,这点将在随后说明。

调用R函数

通过r实例,我们可以轻易地实现用Python调用R的函数。下面我们分别在R控制台和python命令行下读一个数据文件并画一张点图。

R控制台读取文件画点图

代码解读:

data.csv 的内容就是上面代码的3到7的内容。

data = read.table(‘data.csv’) :把文件读进一个数据框变量data中。

mtx = data.matrix(data):把data转变成矩阵。

dotchart(mtx)用矩阵的数据画点图。

结果如下:

接下来用python来做一遍同样的事情,我们之前了解到,使用r实例可以直接访问R对象,还可以直接调用R的函数,其实在Python看来,对象和函数是相同的东西,函数也是一种对象罢了。现在来试一下调用”read.table()”函数读入一个数据文件data.csv:

出错了!怎么回事?在上面我提到过了,使用“.”引用的方式不能访问带有名字空间的R对象和函数,read.table 是表示在read包下面的table函数,通过”.”的形式调用失败,必须要用字典的方式或参数的方式来获得:

这段代码得到的结果与在R控制台下画点图的效果是一样的。最后一行 r.dotchart(mtx)是直接通过”.”来调用R的函数dotchart的,在没有名实空间的情况下,是正常的。如果你为了避免太多不可控制的出错机会,你可以统一地使用字典的方式来访问R对象和方法,这是最保险的方法,虽然我个人认为看起来有点别扭。

r实例就是一R控制台

其实r实例就是一个可交互的R控制台,只不过交互对象是Python与R罢了,为了证明r实例具有R控制台的特性,来做个实验,写一串R脚本,作为Python一个字符串变量的内容,把该字符串传给r实例,然后把r实例当作方法来调用:

出来的结果这样:

注意,把r实例当作控制台,只能够通过r(r代码)的方式来使用r实例,字典的方式行不通。

加载自定义函数

在实际应用中,使用R语言来编写自己的函数同样是不可避免的,在R控制台中,可以使用source(‘script_path’)的方法来加载自定义R脚本。而在Python中使用自己义R脚本中的函数也同样方便:使用r.source(‘script_path’)即可把自定义函数加载到全局环境中,再使用r.自定义方法名就可以实现调用,我就是这样做的,在此不再详述,同学们自己动手玩一下。

R Vector与Python list

向量(Vector)是R的一个最重要的也是最常用的数据类型,可以理解为一个二维数据,对应Python的list。在R控制台中,声明一个变量:“x

rpy2提供了几个类,供我们把Python的list转换成R的Vector。分别是 robjects.IntVector,robjects.Boolvector,robjects.StringVector,robjects.FloatVector. 以IntVector为例,将Python的list转换成R的Vector:robjects.IntVector([1,2,3,4,5]),毕!

下面来使用刚学到的类型转换知识画上一个例子的散点图来结束此次体验:

没有结束

rpy2提供的不仅仅是上面这些,上面的知识只是rpy2所提供的20%,但是已经足以解决80%的问题。rpy2还提供了更低级的API,你可以做更多的事情,例如你可以实现另一个robjects对象来支持使用”.”来访问带名字空间的对象和函数。更多的知识,请移步官方文档。

python调用r语言函数_让R与Python共舞相关推荐

  1. python调用c语言函数_从Python调用C函数

    python调用c语言函数 We can call a C function from Python program using the ctypes module. 我们可以使用ctypes模块从P ...

  2. python调用c语言内核计算,在Linux上实现Python调用C语言函数

    一般思路 Python中内置ctypes库,需调用c编译成的.so文件来实现函数调用. 假设我们所需调用的c文件名为test.c,文件里有我们需要的函数func(x,y). 将.c文件编译成 .so文 ...

  3. python r语言 作图_生物医学绘图,Python 并不比R语言差

    做过基因测序和生物信息学分析,尤其是做过RNAseq分析的同学都知道,R语言中有一款数据可视化神器ggplot2,其绘图功能强大,但它的缺陷是不能直接绘制3D图形,需要加载扩展包,很麻烦. 如果用Py ...

  4. python 调用 C语言函数

    python可以直接调用C语言的函数,本文记录用ctypes调用c语言的方法. test.c #include <stdio.h>int test(char *temp) {printf( ...

  5. python调用C语言函数(方法)的几种方法

    1. 使用ctypes 可能是Python调用C方法中最简单的一种 2. 使用SWIG 是Python中调用C代码的另一种方法.在这个方法中,开发人员必须编写一个额外的接口文件来作为SWIG的入口. ...

  6. Python调用C语言函数

    Python调用C,主要是依靠Python的ctypes调用动态链接库 返回"简单类型" C代码: int multiply(int num1, int num2) {return ...

  7. python数字转日期函数_【转】Python 日期和时间

    本文转自:http://www.runoob.com/python/python-date-time.html Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能. Pytho ...

  8. python初学者必背函数_新手必看python vlog 1: 函数

    关注本慕没烦恼,python新手瞧一瞧. 从今天开始,本慕开始为新手们带来福利啦!!祝各位python新手们事业有成!!? 今天,我们从最基础的开始讲. 首先大家安装PyCharm了吧!!解释器安装好 ...

  9. r roc函数_如何处理R(pROC包)中的多类ROC分析?

    例如,当我在R(pROC包)中使用multiclass.roc函数时,我训练了随机森林的数据集,这是我的代码: # randomForest & pROC packages should be ...

  10. python是什么语言汇编_编程语言及python介绍

    编程语言及python介绍 1.编程语言分类 机器语言 优点:执行效率高 缺点:开发效率极低,跨平台性差 汇编语言 优点:较机器语言执行效率稍低 缺点:较机器语言开发效率稍高,仍然很低,跨平台性差 高 ...

最新文章

  1. 华为又一重拳!全球首款5G基站核心芯片“天罡”发布!
  2. 计算机英语教学能力大赛,英语教学网络中心举办 “志勤杯”英语口语技能大赛 和“志勤杯”英语写作技能大赛...
  3. Windows下 jupyter notebook 运行multiprocessing 报错的问题与解决方法
  4. 寄存器(内存访问)07 - 零基础入门学习汇编语言19
  5. 【离散数学】论域和客体函数的区别
  6. Scrapy+eChart自动爬取生成网络安全词云
  7. 数据分析对企业的重要性
  8. 2018-9-25 进入公司第一天
  9. CHROME 拖动安装插件报错CRX_HEADER_INVALID的解决办法
  10. python起多进程服务_python 多进程详细总结
  11. net framework安装有什么影响_踢脚暖比地暖安装简单,升温快,为什么没有普及?这2点影响很大...
  12. 【golang】golang获取客户端ip
  13. matlab 窗函数频谱,功率谱、频率分辨率、频谱泄漏与窗函数
  14. LBS定位和GPS定位的区别
  15. 如何用查看wifi密码
  16. mysql 微信用户昵称 emoji 完整保存
  17. 【Python机器学习预测分析算法实战五】最小角回归LARS
  18. 一、采样频率到底是选择2倍还是10倍?让我用python来给你展示
  19. 关于程序员网站,这七家超级实用!(来自36氪推荐)
  20. c++实现两有序链表合并成一个新的有序链表

热门文章

  1. 利用Fiddler作为网络代理
  2. 柳夜熙又更新了,虚拟人的底层技术是什么?
  3. gn: toolchain
  4. Python读取并打印bin文件
  5. 什么是AppFuse
  6. element ui html编辑器,vue+element-ui 使用富文本编辑器
  7. 【小米小爱老师4G网络尊享版使用总结】界面|设置|安装|输入_摘要频道_什么值得买...
  8. FFmpeg压缩音频和添加字幕的命令
  9. Win7中CHM打不开的解决方法
  10. 小型微型计算机小错误,如何查看IBM小型机系统的错误记录