R 调用 python
上一篇说了python使用 rpy2 调用 R,这里介绍R如何调用python。R的强项在于统计方面,尤其是专业的统计分析,统计检验以及作图功能十分强大,但是在通用性方面,就远不如Python了,比如python可以做web,可以开发GUI,可以爬虫,甚至可以开发游戏,这些R其实也不是完全不行,但是在易用性方面实在是难以与Python相匹敌。所以如果要是能将R与Python相结合,充分发挥二者的优势,那么无疑我们会得到一个更加强大的武器。幸运的是,R 为我们提供了这么一个工具,rPython。
rPython就是连接R与python的一个接口。其主页地址在:http://rpython.r-forge.r-project.org/。按照其官网的介绍,rPython就是为了能够弥补R在某些通用性领域的不足,使用python丰富的库来弥补这些不足之处而诞生的。关于rPython如何工作,官网上写的很清楚了:
How does rPython work?
One of the most daunting tasks in building an interface between two languages is provide mechanisms for exchanging different data structures between them. rPython uses json:
- R/Python objects are dumped into json strings using their respective parsers (RJSONIO and simplejson) respectively.
- These strings are passed between the two languages using their string exchange mechanisms.
- json strings are finally reconstructed into language objects on the other side.
This simple mechanism allow R and Python exchange relatively complex data structures with ease.
翻译过来就是,连接R与python的一个麻烦之处在于这两种语言的不同数据类型的以及对象的传递。rPython使用的解决办法是通过json作为中间对象。即将python与R的数据以及对象先转化为json字符串(python通过simplejson这个库,R通过RJSONIO这个库)进行传递,再转化为相应语言的数据类型就可以了。
这里需要特别提一下rPython在windows下的安装方式。如果你使用的是linux或者mac系统,那么安装rPython是比较简单的一件事情,直接使用命令install.packages("rPython")即可,但是坑爹的是,rPython在windows下没有编译好的包(以前如果我在windows下install.packages安装失败,就直接去CRAN官网找到相应的编译好的包,然后解压到R的library目录下,就可以直接使用了),所以我们必须要自己编译安装了。最开始,我没有找到合适的方法去安装rPython,后来发现了rJython这个包,这个包在CRAN上有编译好的,我成功安装之后,发现也可以使用。额外提一句,通常我们说的Python指的是用C实现的python,即Cpython,但是还有其他语言实现的python,比如Jython就是Java实现的python,Ironpython是.Net和mono平台上的python。pypy是使用纯pyhton写的python。对此有兴趣的可以自行查阅资料。因为装不上rPython,所以我只能使用Jython,使用Jython有利有弊,利当然就是可以无缝调用java一大堆的类库了,弊就是Jython的第三方库相比Cpython少的可怜,好多库都不能用,所以这也是比较蛋疼的一件事情。
但是今天,我终于在github上面找到rPython在windows下的安装方法了。链接在此:https://github.com/cjgb/rPython-win。大概安装步骤如下:
1.下载github的zip文件
2.下载完成之后解压,将文件夹重新命名为rPython
3.在R下安装devtools(一个包管理工具,可以从github上面下载R包),install.packages("devtools")
4.library(devtools)
5.打开解压之后的configure.win文件,大概长下面这个样子:
#!/bin/sh
echo 'PKG_LIBS=-LC:/python27/libs -lpython27' > src/makevars.win
echo 'PKG_CFLAGS=-I"C:/Python27/include"' >> src/makevars.win
原来默认python的安装位置为C:/python27,这里需要将其改为你自己的电脑中python实际安装的位置,以便于在编译时可以正确找到python的安装位置。
做好之后,执行命令:install("yourpath/rPython") ,引号中的内容是你解压rPython的位置。至此,rPython就成功安装了。如果安装过程中报错,比如我的就报错,无法下载RJSONIO,请自行安装相应的缺少的库。
安装成功之后,我们就来看看怎么使用rPython吧。
其实rPython的使用还是比较简单的,就提供了几个调用的接口函数。直接看代码实例吧:
# R 调用python
library(rPython)
python.call("len",1:10) # 调用函数
a <- 0:3
b <- 1:4
python.exec("def connact(a,b):return a+b") # 执行函数
c <- python.call("connact",a,b) # 调用函数
python.assign( "a", "hola hola" )
a.split <- python.method.call( "a", "split", " " ) # 对a调用split函数,使用空格分割
首先加载rPython这个库。
python.call("len",1:3)表示调用python的len函数对1:3这个向量进行计算,其实就是计算len([1,2,3]),答案当然是3了。python.exec()可以执行一段python代码,这里是执行了一个python函数,我们定义了两个变量的相加,然后使用call调用这个函数,函数的两个参数为a,b,计算结果为c。计算可以得到c的值为c(0,1,2,3,1,2,3,4)为一个向量,其实我们可以发现,R中的向量就对应了python中的列表。然后使用 python.assign()将字符串"hola hola" 赋值给变量a,然后对a调用split方法,split传入参数为空格,即对a按空格进行分割,得到 结果为 "hola" "hola" 这两个字符串。
其他还有一些方法的使用,大家可以自行参考CRAN上的函数帮助手册,或者直接??rPython查看帮助文档。
最后,来看如何在R中调用执行一个python文件。
名为 python_demo.py的文件如下:
# -*- coding:utf-8 -*-
import requests
'''
模拟登陆一个叫推酷的网站
'''
s = requests.session()
# data为要提交的数据,可以通过firefox的httpfox捕获
data = {
'email':'xxxxx@qq.com',
'password':'xxxxxxx',
'authenticity_token':'ANJyaQEi/IQqiFtLFu4md41p418qigNOzgIjJMwKz9A=',
'remember':''
}
url_login = 'http://www.tuicool.com/login' # 要提交数据的地址
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118Safari/537.36'}
res=s.post(url_login,data,headers = headers)
r = s.get(url_login)
content = r.content
with open('tuiku.html','w') as f:
f.write(content)
上面的代码使用requests库模拟登录了某一个网站,将返回的内容写入html文件。
只需要使用几行代码就可以从R调用执行这段python文件。
# 使用 rPython 调用 python文件
file_name = "F:/R_work/rPython/python_demo.py"
python.load(file_name) # 调用python文件
在R中运行上面的代码,几秒之后,就会发现已经新增了一个html文件。怎么样,是不是很酷呢?
有了rPython之后,以后像数据抓取以及大规模运算等任务就可以交给python了,得到数据之后再传入R,然后利用R的专业的统计包进行统计分析以及作图等。python与R的无缝结合,so cool!
R 调用 python的更多相关文章
- R调用python模块
明明已经安装了sctransfer,但仍然显示没有该模块 Error in py_module_import(module, convert = convert) : ModuleNotFoundEr ...
- R和Python,对抗or融合?
来源商业新知网,原标题:从对抗到融合,教你充分利用R+Python! 我们应该将关注点放在技能上,而不是工具上. 如果你从事数据科学的工作,可能会立即想到两种编程语言:R和Python. 事实上,R和 ...
- Java-调用R语言和调用Python(前后端展示)
1. 背景 R语言和Python用于数据分析和数据处理,并生成相应的直方图和散点图 需要实现一个展示平台,后端使用Java,分别调用R语言和调用Python,并返回数据和图给前端显示 这个平台主要实现 ...
- C++调用python
本文以实例code讲解 C++ 调用 python 的方法. 本文在util.h中实现三个函数: 1. init_log: 用google log(glog)初始化log 2. exe_command ...
- PHP调用Python接口过程中所遇到的问题
在php调用python脚本时,首先把python相关组件安装完善.用Python命令检测运行脚本而不报错. 在调用接口的过程 1.没有打开的python脚本的权限 解决办法:把python脚本所在的 ...
- c#调用python代码
c#调用python的方法比较多,比如ironpython,尽管不用安装python环境,可是不兼容python众多的包,也只更新到了python2,通过创建python进程这种方式可以很好的解决兼容 ...
- java调用python的惨痛史(无法获取环境变量)
环境:java,was,python2.6,红帽linux,oracle,python用cx_Oracle 事情是这样的,有个需求,需要对数据库进行处理,简单说就是把数据取出来,用pyt ...
- 让R与Python共舞
转载:http://ices01.sinaapp.com/?p=129 R(又称R语言)是一款开源的跨平台的数值统计和数值图形化展现 工具.通俗点说,R是用来做统计和画图的.R拥有自己的脚本 ...
- c++调用Python基础功能
c++调用Python首先安装Python,以win7为例,Python路径为:c:\Python35\,通过mingw编译c++代码.编写makefile文件,首先要添加包含路径:inc_path ...
随机推荐
- time模块、装饰器、类的装饰器
python time模块 导入模块: import time #time模块是python中最基本的模块之一 输出时间戳:time.time() #可以用变量接收,要打印出来要用print(),如 ...
- 2017年最新基于Bootstrap 4 的专业、多用途响应式布局的系统模板
本文分享一款2017年最新的2017年最新基于Bootstrap 4 的专业.多用途响应式布局的系统模板,该模板是一款强大并且非常灵活的后台管理系统模板:能适应绝大多数的web应用程序开发,比如:AP ...
- vue-router 组件复用问题
组件系统是Vue的一个重要组成部分,它可以将一个复杂的页面抽象分解成许多小型.独立.可复用的组件,通过组合组件来组成应用程序,结合vue-router的路由功能将各个组件映射到相应的路由上,通过路由的 ...
- JS原型、原型链深入理解
原型是JavaScript中一个比较难理解的概念,原型相关的属性也比较多,对象有”prototype”属性,函数对象有”prototype”属性,原型对象有”constructor”属性. 一.初识原 ...
- webpack学习之路
当自己在学习webpack的时候,在网上发现中文的很详细的教程很少,于是便想将自己学习webpack的笔记记录整理下来,便有了这篇文章,希望对大家有所帮助,如果有错误,欢迎大家指出. 在我们开始之前 ...
- 更换HomeBrew源
比较少用brew,只有之前安装Opencv的时候用过一次,后面有人问我怎么装,于是帮他研究了一下.MacOS的brew其实就是通过两个git仓库(brew和homebrew-core)来实现的源更新机 ...
- POJ 2209 The King(简单贪心)
The King Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7499 Accepted: 4060 Descript ...
- UVA 1030 - Image Is Everything【模拟+思维+迭代更新】
题目链接:uva 1030 - Image Is Everything 题目大意:有一个最大为n*n*n的立方体的一个不规整立体,由若干个1*1*1的小正方体构成(每一个小正方体被涂成不同的颜色),给 ...
- Kafka入门介绍
1. Kafka入门介绍 1.1 Apache Kafka是一个分布式的流平台.这到底意味着什么? 我们认为,一个流平台具有三个关键能力: ① 发布和订阅消息.在这方面,它类似一个消息队列或企业消息系 ...
- QT 操作 excel 教程
前言:环境 win7 64位,QT4.8.5,QT Creator 在 .pro 文件中加入语句"CONFIG+=qaxcontainer"; 源码如下: //main.cpp # ...