python 调用 R,使用rpy2

2023-10-27

  python 与 R 是当今数据分析的两大主流语言。作为一个统计系的学生,我最早接触的是R,后来才接触的python。python是通用编程语言,科学计算、数据分析是其重要的组成部分,但并非全部;而R则更偏重于统计分析,毕竟R是统计学家发明的,本身就是为统计而生。python的优势在于其全能性,几乎所有的领域都有python的身影,而R则在统计及其相关领域非常专业。二者各有优势。那么这么好的两个东西,能不能结合到一起呢?答案是肯定的。要想实现这种功能,一般必须要提供相应的调用接口。rpy2这个第三方库就提供了python调用R的接口。本文主要介绍rpy2的简单使用。

  其实,在前一段时间,我就曾经尝试过安装rpy2,但是只在linux环境下安装成功了,在windows下总是安装失败。直到最近,我发现了一个非官方的python第三方库下载网址:

http://www.lfd.uci.edu/~gohlke/pythonlibs。这个网址提供的第三方库还是比较全的,而且是都是编译好的.whl文件,各个版本的都有,比如Pymediea,rpy2等比较难找的库这里都有,所以特此在这里分享给大家。找到rpy2这个库,由于我的python版本是2.7 64位,所以选择http://www.lfd.uci.edu/~gohlke/pythonlibs/tuoh5y4k/rpy2-2.7.8-cp27-none-win_amd64.whl这个地址下载。下载完成之后,解压,将解压后的全部文件放入python的site-packages目录下。还要做的一件重要的事情是增加环境变量R_HOME,将其值设置为电脑中R的安装路径。设置好了之后,发现 import rpy2 就可以正常导入了。

  常用的命令:

  1. import rpy2.robjects as robjects    这个命令是导入 r对象

  2. robjects.r("r_script") 可以执行r代码,比如 pi = robjects.r('pi') 就可以得到 R 中的PI(圆周率),返回的变量pi是一个向量,或者理解为python中的列表,通过

pi[0] 就可以取出圆周率的值。

  3. robjects.r.source(“file.r”)可以执行r脚本文件。例子如下:

  

robjects.r.source('plot_demo.r')

plot_demo.r 内容如下:

# R 语言测试脚本
x <- c(1,2,3,4)
y <- x*x
jpeg(file="plot.jpg") # 保存图像
plt <- plot(x,y) # 画散点图
dev.off() # 关闭设备

运行上面的代码后,就可以得到一幅名为 plot.jpg的散点图了。

a = robjects.r('a<-c(1,2,3)')
print(a)

运行得到 [1] 1 2 3

x = robjects.r('x')
y = robjects.r('y')
print(x)
print(y)

  运行得到: 

[1] 1 2 3 4

[1] 1 4 9 16

当然rpy2不仅可以将R的数据对象转换为python的变量(或对象),还以将python的列表,字典等数据类型转换为R的向量或数据框类型,对应的函数有 robjects.IntVector(),

robjects.FloatVector()等,看这些名字基本就知道干嘛的了。举例如下:

print(robjects.IntVector([1,2,3]))
print(robjects.FactorVector(['a','a','b','c']))
print(robjects.FloatVector([1.2,2.3]))
print(robjects.baseenv) # 基本环境空间
print(robjects.DataFrame({'a':[1,2],'b':[3,4]}))

得到结果如下:

[1] 1 2 3

[1] a a b c

Levels: a b c

[1] 1.2 2.3

<environment: namespace:base>

a.1L a.2L b.3L b.4L

1 1 2 3 4

最后,再来看一个复杂一点的R代码在Python中的执行情况。

r_script = '''
library(randomForest) # 导入随机森林包
## use data set iris
data = iris # 使用鸢尾花数据集
table(data$Species)
## create a randomForest model to classfy the iris species
# 创建随机森林模型给鸢尾花分类
iris.rf <- randomForest(Species~., data = data, importance=T, proximity=T)
print('--------here is the random model-------')
print(iris.rf)
print('--------here is the names of model-----')
print(names(iris.rf))
confusion = iris.rf$confusion
print(confusion)
'''
robjects.r(r_script)

得到结果如下:

randomForest 4.6-12
Type rfNews() to see new features/changes/bug fixes.
[1] "--------here is the random model-------"

Call:
randomForest(formula = Species ~ ., data = data, importance = T, proximity = T)
Type of random forest: classification
Number of trees: 500
No. of variables tried at each split: 2

OOB estimate of error rate: 4%
Confusion matrix:
setosa versicolor virginica class.error
setosa 50 0 0 0.00
versicolor 0 47 3 0.06
virginica 0 3 47 0.06
[1] "--------here is the names of model-----"
[1] "call" "type" "predicted" "err.rate"
[5] "confusion" "votes" "oob.times" "classes"
[9] "importance" "importanceSD" "localImportance" "proximity"
[13] "ntree" "mtry" "forest" "y"
[17] "test" "inbag" "terms"
setosa versicolor virginica class.error
setosa 50 0 0 0.00
versicolor 0 47 3 0.06
virginica 0 3 47 0.06

最后,关于python与R在jupyter notebook中交互使用的实例可以参考:http://nbviewer.jupyter.org/gist/xccds/d692e468e21aeca6748a

热爱编程,热爱机器学习! github:http://www.github.com/Lyrichu github blog:http://Lyrichu.github.io 个人博客站点:http://www.movieb2b.com(不再维护)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 调用 R,使用rpy2 的相关文章

随机推荐

  • 用java实现用户登录

    方法1 直接设置用户名及密码登录 public static void main String args 用户名及密码 String username 123456798 String passward 123456 键盘输入 for in
  • 【AnyQ】百度开源 FAQ 问答系统—AnyQ介绍

    前言 近年来 随着人工智能技术的发展 人机对话技术得到越来越多的关注 人机对话产品也不断涌现 其中 智能客服作为人机对话的一个典型场景表现出极大的商业潜力和很强的研究价值 各企业也争先恐后的推出自己的智能客服产品 FAQ 问答技术作为智能客
  • Servlet初识

    servlet server applet 处理客户端请求 工作原理 tomcat容器 Servlet容器 服务器 Servlet框架 Servlet应用 1 首先客户端发起请求 2 服务器 tomcat Servlet容器 收到接收到来自
  • C指针之初始化(三)

    一 引言 C C 语言中引入了指针 使得程序能够直接访问内存地址 使得很多复杂的操作变得简单 同时也提高了程序的运行效率 指针即是地址 但是地址却是通过指针变量来存储的 因此我们通常所说的指针在很多时候说的都是指针变量 指针变量在使用之前必
  • 使用C#版Tesseract库

    上一篇介绍了Tesseract库的使用 OCR库Tesseract初探 文末提到了Tesseract是用c c 开发的 也有C 的开源版本 本篇介绍一下如何使用C 版的Tesseract C 版本源码下载地址 https github co
  • 用Python爬取英雄联盟(lol)全部皮肤

    首先 我们打开英雄联盟官网主页 网址为 https lol qq com main shtml 然后向下拉 可以看到英雄列表 如图所示 接着随意选一个英雄点击进入看一下 如图所示 再点击鼠标右键 接着选择检查 看一下皮肤的 URL 如图所示
  • Mysql连接数据库url的参数解析

    看之前各位看官可以不可以点个赞 呜呜呜 更正信息 错误 之前在url中使用 后面发现报错 要进行转义才行 amp 如果在springboot中使用 不需要转义 即把下面的 amp 改为 已经对下面url进行更正 大家直接拷贝粘贴就可以用 j
  • 数据结构_35

    一 线性表 排序 冒泡排序 选择排序 快速排序 归并排序 查找 二分查找 二 树 遍历 递归 前中后序 层次 排序 大根堆 小根堆 哈夫曼树 三 图 广度优先遍历 深度优先遍历 最小生成树 Prim算法 Kus算法 最短路径 Dij算法 一
  • 可视化理解卷积神经网络(CNN)

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • 用Python做一个猜拳游戏

    import random while True player input 请出拳 石头 剪刀 布 玩家出拳 print 玩家出拳 player list 石头 剪刀 布 computer random choice list 电脑出拳 随
  • Maven打包项目为依赖包、及包引用

    Maven打包项目为依赖包 及包引用 一 maven配置 1 1 原配置 1 2 更改配置 二 jar包引用 2 1 引入maven仓库 2 2 手动引入 更方便 一 maven配置 1 1 原配置
  • ubuntu升级python版本_ubuntu升级python版本

    Ubunt16 04默认安装python2 7和3 5 注意 系统自带的python千万不能卸载 1 输入python 2 输入python3 3 输入命令sudo add apt repository ppa jonathonf pyth
  • 高级 IO(非阻塞、多路复用、异步、存储映射、文件锁)

    目录 非阻塞I O 阻塞I O 与非阻塞I O 读文件 阻塞I O 的优点 阻塞后进入休眠 交出cpu资源降低使用率 使用非阻塞I O实现并发读取 I O 多路复用 何为I O多路复用 select 函数 poll 函数 总结 异步IO 优
  • 正点原子STM32(基于HAL库)5

    目录 SRAM 实验 存储器简介 SRAM 方案简介 硬件设计 程序设计 程序流程图 程序解析 下载验证 内存管理实验 内存管理简介 硬件设计 程序设计 程序流程图 程序解析 下载验证 SD 卡实验 SD 卡简介 SD 物理结构 命令和响应
  • SimOTA的简单理解

    SimOTA simOTA的作用是为不同目标设定不同的正样本数量 例如蚂蚁和西瓜 传统的正样本分配方案常常为同一场景下的西瓜和蚂蚁分配同样的正样本数 那要么蚂蚁有很多低质量的正样本 要么西瓜仅仅只有一两个正样本 对于哪个分配方式都是不合适的
  • CNN中的底层、高层特征、上下文信息、多尺度

    一 CNN中的底层 高层特征 简短总结 分类要求特征有较多的高级信息 回归 定位 要求特征包含更多的细节信息 1 图像的低层特征 对定位任务帮助大 我们可以想想比如轮廓信息都不准那怎么去良好定位 图像底层特征指的是 轮廓 边缘 颜色 纹理
  • ValueError: Image size of 55600x96000 pixels is too large. It must be less than 2^16 in each directi

    ValueError Image size of 55600x96000 pixels is too large It must be less than 2 16 in each direction 问题介绍 在用pycharm做图像处理
  • 遍历指定目录获取当前目录下指定后缀(如txt和ini)的文件名

    bin bash 遍历指定目录获取当前目录下指定后缀 如txt和ini 的文件名
  • LabVIEW通过以太网(TCP)与S7-1200 PLC通信

    LabVIEW通过以太网 TCP 与S7 1200 PLC通信 laiping 20170901 摘要 本文介绍LabView采用以太网 TCP 方式与西门子S7 1200PLC通讯 关键字 LabView S7 1200 TCP PLC
  • python 调用 R,使用rpy2

    python 与 R 是当今数据分析的两大主流语言 作为一个统计系的学生 我最早接触的是R 后来才接触的python python是通用编程语言 科学计算 数据分析是其重要的组成部分 但并非全部 而R则更偏重于统计分析 毕竟R是统计学家发明