Java调用R脚本的方法总结 |
您所在的位置:网站首页 › java编写脚本常用的命令是 › Java调用R脚本的方法总结 |
0 前言
R是一种非常方便易用的绘图、统计分析、ML算法设计方面的脚本语言。实际中有这样一种场景:算法工程师用R搭建了机器学习算法模型,想用于javaweb之中但是又不想重新用java写一遍算法模型,那么可以考虑java程序中直接调用R的脚本。JAVA负责系统的构建,R用来做运算引擎,从而实现应用型和分析性相结合的系统。 本文将搞清楚如下几个问题: 1)java调用R的方式有哪些及每种方式如何使用? 2)这些调用方式的有哪些优缺点? 下面开始。 1 java调用R的两种方式 1.1 远程调用模式(使用Rserve)Rserve是一个基于TCP/IP的服务器,通过二进制协议传输数据,可以提供远程连接,使得客户端语言能够调用R。 Rserve作为一个package发布在CRAN上,在服务端计算机安装R之后可以直接使用install.packages(“Rserve”)进行安装。需要使用时在R控制台下加载该包,然后输入命令Rserve(),开启服务器就可以供客户端调用。 首先建立一个新的连接,然后就可以使用eval之类的方法将R中的表达式传到服务器端,通过R求值后传回JAVA中REXP类型的变量,然后打印出来,整个过程非常简单。由于不需要对R进行初始化,因此速度会比较快。在linux等其他系统下可以同时建立多个连接,但是在Windows下只允许同时打开一个连接,后续的连接都会共有相同的命名空间。 1.1.1 Rserve的安装、启动、关闭方法方法一: 准备工作:必须先安装并配置了R语言,可去官网https://www.r-project.org下载安装。 在命令行窗口依次执行如下命令: 每次启动r虚拟机时:r 第一次安装Rserve包时: install.packages(“Rserve”) 第一次加载Rserve包时:library(Rserve) 每次需要启动Rserve服务:Rserve() 关闭Rconnection连接: 关闭Rconnection连接用rc.close(); 方法二: 使用Rstudio软件直接安装Rserve的包。 操作略。 1.1.2 自定义Rserve的配置文件1)查看Rserve的help选项,Rserve包被安装在R的安装目录的library文件夹下,命令如下图所示。 2)查看Rserve的配置项 配置项含义: config file: Rserv.cfg 配置文件名称 working root: R运行时工作目录 /tmp/Rserv port: 6311 通信端口 local socket: TCP/IP TCP/IP协议 authorization: 认证未开启 plain text password: 不允许明文密码 passwords file: 密码文件,未指定 allow I/O: 允许IO操作 allow remote access: 远程访问未开启 control commands: 命令控制未开启 interactive: 允许通信 max.input buffer size: 文件上传限制262mb3)新建自定义Rserve配置文件Rserv.cfg(可先创建Rserv.txt添加内容后改后缀为cfg),该配置文件会覆盖Rserve的默认配置,文件位置如下图。 打开Rserv.cfg,其内容设置如下: workdir /tmp/Rserv remote enable fileio enable interactive yes port 6311 maxinbuf 262144 encoding utf8 control enable source start.R plaintext enable该自定义配置项包含了一个Rserve启动脚本start.R,该脚本可用于启动Rserve时输出提示信息,新建该脚本文件并输入内容: cat("This is my Rserve!") print(paste("Rserve Server start at ",Sys.time()))注:Rserve的服务器默认端口号是6311,当然用户也可以指定其他端口号。 1.1.3 Rserve的使用方法1) java项目调用Rserve需要三个jar文件:REngine.jar RserveEngine.jar Rserve.jar 常用类及方法如下: Rconnection():连接R服务 eval():执行R语句,返回REXP类型数据 assgin():声明变量 REXP类:其提供了asInteger(), asIntegers(), asString(), asDouble(), asDoubles(), asList()等方法将REXP类型数据转换成java相应类型的数据 2) 测试代码1,打印R版本信息: package com.rTest; import org.rosuda.REngine.REXP; import org.rosuda.REngine.Rserve.RConnection; public class Test { public static void main(String[] args) { RConnection rc = null try { rc = new RConnection();//建立与Rserve的连接 REXP x = c.eval("R.version.string");//执行R语句 System.out.println(x.asString()); } catch (Exception e) { e.printStackTrace(); } finally{ rc.close();//关闭与Rserve的连接 } } }3) 测试代码2,调用R文件中自定义函数: 创建R文件test.R myFunc |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |