尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

使用Rserve远程执行R脚本_rserve 镜像地址-CSDN博客

使用Rserve远程执行R脚本_rserve 镜像地址-CSDN博客 首屏导读 · 本教程配套付费专栏 大模型工程师修炼手记19.9 元AI 编程 / Agent 实战 本文同主题系统课程· AI时代程序员的自我提升49.9 元AI 时代成长方法论。单篇不过瘾订阅解锁全量源码、实战与答疑文末附资料包领取方式 ↓注1关于Rserve网上有很多资料可以参考详细情况可以参考博客下面的“参考资料”部分本文只是简单介绍一下Rserve主要目的是记录一下Java远程执行R脚本文件的方法。注2这里提到的远程执行R脚本文件的方式都是R脚本存在于Rserve服务端如果R脚本文件存在客户端可以使用RUtils工具包http://blog.csdn.net/zhyh1986/article/details/13065199Rserve介绍Rserve是一个基于TCP/IP协议的允许R语言与其他语言通信的C/S结构的程序支持C/C,Java,PHP,Python,Ruby,Nodejs等。 Rserve提供远程连接认证文件传输等功能。我们可以设计R做为后台服务处理统计建模数据分析绘图等的任务。 详细介绍请参照官方网站https://rforge.net/Rserve/Rserve安装Linux系统下建议使用root权限安装。下面的内容是依据Windows7系统中安装过程进行描述的。进入R语言解释器R安装命令install.packages(“Rserve”)然后安装程序会提示我们选择下载镜像提示如下— Please select a CRAN mirror for use in this session —等我们选择了镜像后测试时选择的是China(xxx)安装程序便进行下载安装最终会输出如下的信息Linux下的输出信息或有不同说明Rserve安装成功安装路径为%R_HOME%\library\Rserve目录。启动Rserve服务在Windows命令窗口进入R_HOME\library\Rserve\libs\i386目录中执行如下命令我的Windows7是32位的如果是64位系统对应目录为R_HOME\library\Rserve\libs\x64[plain] view plain copyR CMD RserveR将作出如下应答说明Rserve启动成功端口6311可以进行连接测试了。上面的启动命令使用的本地模式如果想远程连接需要增加参数 –RS-enable-remote即启动命令为[plain] view plain copyR CMD Rserve –RS-enable-remoteJava远程连接Rserve下载依赖jar包地址http://www.rforge.net/Rserve/files/共两个jar包下载完成后将它们加入到项目的classpath中即可 REngine.jar RserveEngine.jar也可以到Rserve安装目录中寻找比如R_HOME \library\Rserve\java目录中就有相关jar包名字略有不同经测试可以使用简单的测试代码[java] view plain copypackage com.zyh.up.general.rjava;import org.rosuda.REngine.REXPMismatchException;import org.rosuda.REngine.Rserve.RConnection;import org.rosuda.REngine.Rserve.RserveException;public class RserveBegin {public static void main(String[] args) {try {callRserve();} catch (RserveException e) {e.printStackTrace();} catch (REXPMismatchException e) {e.printStackTrace();}}static void callRserve() throws RserveException, REXPMismatchException { RConnection rConnection new RConnection(192.168.101.122); String rv rConnection.eval(R.version.string).asString(); System.out.println(rv); double [] arr rConnection.eval(rnorm(10)).asDoubles(); for(double d : arr) { System.out.println(d); } }}测试可以通过程序将输出R语言版本信息及10个Double类型的数字。Java远程执行R脚本上面的示例只是执行R命令但如果我们在服务器上放置R脚本又该如何执行该脚本或调用其中的函数呢有两种方法可以完成上面的问题。假如我们定义了一个R脚本area.R其中定义了一个方法area该方法接收一个半径值然后计算对应面积并返回脚本内容非常简单[plain] view plain copyarea-function(r){pi*r^2}下面描述一下如何调用这个脚本中的area函数并获取其返回值。第一种方法就是直接用source函数将area.R脚本加载上来然后就可以像调用R语言内置命令/函数一样调用脚本中的area方法了。这样做有一个缺点就是每建立一次Java与R之间的连接就需要调用source函数一次。示例代码[java] view plain copypackage com.zyh.up.general.rjava;import org.rosuda.REngine.REXP;import org.rosuda.REngine.REXPMismatchException;import org.rosuda.REngine.Rserve.RConnection;import org.rosuda.REngine.Rserve.RserveException;public class RserveBegin {public static void main(String[] args) {try {callRScript();} catch (Exception e) {e.printStackTrace();}}static void callRScript() throws RserveException, REXPMismatchException { RConnection rc new RConnection(192.168.101.122); // source函数需要给出R脚本路径, 注意传入转义的引号 rc.eval(source(\/home/hadoop/wangfeng/javaR/area.R\)); REXP rexp rc.eval(area(10)); System.out.println(Area of 10 is rexp.asDouble()); }}代码测试通过。另一种调用R脚本的方法是通过Rserv.conf配置文件该文件路径为/etc/Rserv.conf如果文件不存在则创建一个新的然后在文件中添加如下的代码[plain] view plain copysource /home/hadoop/wangfeng/javaR/area.R然后重新启动Rserve服务即可。使用这种方式Java测试代码需要去掉source语句这一行即[plain] view plain copyrc.eval(“source(\”/home/hadoop/wangfeng/javaR/area.R\”)”);其它不变经测试成功。注1第二种方式只在Linux下采用Win平台对应的方法没有找到。另外有些人说配置文件为Rserve.conf但我在122的/etc下找到的是Rserv.conf不管是哪一个文件甚至两者都不是随便命名一个只要执行下面命令告诉Rserve配置文件是哪一个即可需要重启Rserve[plain] view plain copyR CMD Rserve –RS-conf Rserv.conf参考资料https://rforge.net/Rserve/example.htmlhttp://blog.fens.me/r-rserve-java/http://www.studytrails.com/R/RServe/RServe-Source-R-File.jsphttp://stackoverflow.com/questions/13553397/sourcing-r-files-only-once-on-rservehrefhttps://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-e1cc28b339.css relstylesheet hrefhttps://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-d1e89cace4.css relstylesheet内容来源csdn.net作者昵称Tom·Ge原文链接https://blog.csdn.net/gedonshen/article/details/79070063作者主页https://blog.csdn.net/gedonshen标签#脚本 #java确定要放弃本次机会福利倒计时::立减 ¥普通VIP年卡可用立即使用延伸阅读 · 我的付费专栏觉得这篇文章对你有帮助我把同类主题的系统化内容沉淀成了付费专栏欢迎订阅支持持续输出专栏定价内容大模型工程师修炼手记19.9 元AI 编程 / Agent 深度实战AI时代程序员的自我提升49.9 元AI 时代成长方法论本文配套代码 / 资料包欢迎在评论区留言「求代码」我会私信发送完整资源
返回列表