博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Rserve的R语言客户端RSclient
阅读量:6515 次
发布时间:2019-06-24

本文共 4234 字,大约阅读时间需要 14 分钟。

hot3.png

R语言作为统计学一门语言,一直在小众领域闪耀着光芒。直到大数据的爆发,R语言变成了一门炙手可热的数据分析的利器。随着越来越多的工程背景的人的加入,R语言的社区在迅速扩大成长。现在已不仅仅是统计领域,教育,银行,电商,互联网….都在使用R语言。

要成为有理想的极客,我们不能停留在语法上,要掌握牢固的数学,概率,统计知识,同时还要有创新精神,把R语言发挥到各个领域。让我们一起动起来吧,开始R的极客理想。

关于作者:

  • 张丹(Conan), 程序员Java,R,PHP,Javascript
  • weibo:@Conan_Z
  • blog: 
  • email: bsspirit

转载请注明出处:

前言

RSclient是实现Rserve通信的R语言客户端程序,对于统计人员使用RSclient调用Rserve运行R语言脚本,感觉会很奇怪。但对于实际应用架构来说却是很有帮助的,不仅可以统一Rserve的接口,还可以从架构上实现R语言的跨虚拟机的分步式程序设计。

目录

  1. Rserve和RSclient介绍
  2. Rserve系统环境
  3. RSclient安装
  4. RSclient的API
  5. RSclient使用
  6. 两个客户端同时访问

1. Rserve和RSclient介绍

Rserve介绍

Rserve是一个基于TCP/IP协议的,允许R语言与其他语言通信的C/S结构的程序,支持C/C++,Java,PHP,Python,Ruby,Nodejs等。 Rserve提供远程连接,认证,文件传输等功能。我们可以设计R做为后台服务,处理统计建模,数据分析,绘图等的任务。

Rserve的使用请参考文章:, 

RSclient介绍

RSclient是Rserve客户端的R语言实现,通过RSclient可以访问Rserve服务器实例。

官方介绍:

2. Rserve系统环境

服务器系统环境

  • Linux: Ubuntu 12.04.2 LTS 64bit
  • R: 3.0.1 x86_64-pc-linux-gnu
  • Rserve: Rserve v1.7-1

启动Rserve服务器

~ R CMD Rserve~ ps -aux|grep Rserveconan    28339  0.0  1.2 116292 25240 ?        Ss   22:31   0:00 /usr/lib/R/bin/Rserve~ netstat -ntlp|grep Rservetcp        0      0 0.0.0.0:6311            0.0.0.0:*               LISTEN      28339/Rserve

Rserve环境

  • IP: 192.168.1.201,允许远程访问
  • 端口: 6311
  • 登陆认证: 用户名:conan, 密码:conan
  • 字符编码: utf-8
~ R CMD Rserve --RS-settingsRserve v1.7-1config file: /etc/Rserv.confworking root: /tmp/Rservport: 6311local socket: [none, TCP/IP used]authorization required: yesplain text password: allowedpasswords file: [none]allow I/O: yesallow remote access: yescontrol commands: yesinteractive: yesmax.input buffer size: 262144 kB

3. RSclient安装

客户端环境,远程访问

  • Win7 64bit
  • R: 3.0.1 x86_64-w64-mingw32/x64 b4bit

RSclient安装和加载

~ R> install.packages("RSclient")> library(RSclient)

4. RSclient的API

RSclient的API分为两组,Rclient(旧版本)和RCC(新版本)。

Rclient 旧版本API:函数名是大小写连写的

RSassign           RSattach           RScloseRSconnect          RSdetach           RSeval             RSevalDetachRShowDoc           RSiteSearch        RSlogin            RSserverEvalRSserverSource     RSshutdown         RSclient::

RCC 新版本API:函数名以.分隔的

RS.assign          RS.authkey         RS.close           RS.collectRS.connect         RS.eval            RS.eval.qap        RS.loginRS.oobCallbacks    RS.server.eval     RS.server.shutdown RS.server.sourceRS.switch

我主要介绍新版本API的使用

客户端操作函数

  • RS.connect: 创建与Rserve的连接
  • RS.close: 关闭与Rserve的连接
  • RS.login: 登陆认证
  • RS.authkey: 设置认证时加密算法
  • RS.eval: 在Rserve远程执行R语句
  • RS.eval.qap: 远程执行R语句,使用Rserve QAP序列化对象代替本地对象
  • RS.collect: 等待异步执行的eval的结果,一起返回
  • RS.assign: 远程执行赋值
  • RS.switch: 协议转换,从QAP1到TLS QAP1
  • RS.oobCallbacks: 回调函数, 通过OOB_SEND函数和OOB_MSG函数中执行

服务器管理函数:Rserve启动时,需要设置–RS-enable-control

  • RS.server.eval: 服务器控制函数,执行脚步
  • RS.server.shutdown: 服务器控制函数,关闭服务器
  • RS.server.source: 服务器控制函数,执行服务器端本地文件

5. RSclient的使用

~ R> library(RSclient)#建立连接> conn<-RS.connect(host="192.168.1.201")> conn Rserve QAP1 connection 0x000000000445cd60 (socket 308, queue length 0)#登陆认证> RS.login(conn,"conan","conan",authkey=RS.authkey(conn))[1] TRUE#执行脚本> RS.eval(conn,rnorm(5))[1] -2.6762608  1.4435144 -0.4298395 -0.7046573 -1.4056073#设置变量> RS.assign(conn,"xx",99)raw(0)> RS.eval(conn,xx-55)[1] 44#同步执行> RS.eval(conn,head(rnorm(10000000)),wait=TRUE)[1] -4.20217390  0.22353317 -1.70256992  0.30053213 -0.01427486 -0.70522254#异步执行> RS.eval(conn,head(rnorm(10000000)),wait=FALSE)NULL> RS.collect(conn)[1] -0.2814752  0.3215521 -1.0978825 -0.8534461 -0.2459560 -0.4804882#关闭连接> RS.close(conn)NULL> conn Closed Rserve connection 0x000000000445cc80

6. 两个客户端同时访问

客户端A

~ R library(RSclient)conn<-RS.connect(host="192.168.1.201")RS.login(conn,"conan","conan",authkey=RS.authkey(conn))RS.assign(conn,"A",1234)> RS.eval(conn,A)[1] 1234> RS.eval(conn,getwd())[1] "/tmp/Rserv/conn29039"

客户端B

~ R library(RSclient)conn<-RS.connect(host="192.168.1.201")RS.login(conn,"conan","conan",authkey=RS.authkey(conn))RS.assign(conn,"B",5678)> RS.eval(conn,B)[1] 5678> RS.eval(conn,ls())[1] "B"> RS.eval(conn,getwd())[1] "/tmp/Rserv/conn29040"

我们看到A,B两个客户端建立接口后,服务器端的Rserve会在两个单独的空间运行。因此,A,B两个客户端的访问是独立的。

在客户端A,设置服务器全局变量

> RS.server.eval(conn, "G<-999") :  command failed with status code 0x48: access denied

注:出现拒绝访问的错误,虽然我们已经打开了--RS-enable-control,还是有错误,不知道是不是Rserve的bug。

通过RSclient,我们就可以远程连接Rserve。如果大家发散一下想法,就可以通过Rserve和RSclient构建一个纯R的分步式计算环境。下篇文章我将模拟构建一个这样的环境!!

转载请注明出处:

转载于:https://my.oschina.net/zh119893/blog/232870

你可能感兴趣的文章
zabbix监控
查看>>
构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(20)-权限管理系统-根据权限获取菜单...
查看>>
设计模式(六):Singleton 单件模式 -- 创建型模式
查看>>
delphi webbrowser 经常用法演示样例
查看>>
018 关联映射文件中<class>标签中的lazy(懒加载)属性
查看>>
[Aaronyang紫色博客] 写给自己的WPF4.5-Blend5公开课系列 3 - 再来一发
查看>>
scala 官方教程
查看>>
雅居乐在核心产品 &quot;决策&quot;
查看>>
10款jQuery图片左右滚动插件
查看>>
微信公众平台预研小结
查看>>
左侧倒换菜单 frameset 已过时
查看>>
Embarcadero RAD Studio 2016 Product Approach and Roadmap
查看>>
兼容ie6及以上和firefox等标准浏览器的表格行滑过时背景色切换的效果
查看>>
架构漫谈(一):什么是架构?
查看>>
CDOJ 1281 暴兵的卿学姐 构造题
查看>>
一个基于angularJS的工资计算器
查看>>
ST官方翻译的中文应用笔记汇总
查看>>
CSS3超酷移动手机滑动隐藏側边栏菜单特效
查看>>
三期_day12_其它+jetty的使用
查看>>
Activiti 查看流程图
查看>>