使用Eclipse和Rserve从Java调用R的简单程序
我的应用程序必须执行R操作,例如:
m = matrix(sample(0:1,100, rep=T),ncol=10)
结果应该可供Java应用程序使用。
Rserve包将R桥接到其他语言,因为它充当TCP / IP服务器。 我已经阅读了网站,但不知道如何制作可以使用Rserve的最简单的应用程序。
制作一个使用Rserve从Java执行R命令的简单Eclipse应用程序需要哪些步骤?
下载部分有一个二进制版本的Rserve(www.rforge.net/Rserve/files/我有版本R 2.13和Windows xp,所以我需要下载Windows二进制文件:Rserve_0.6-8.zip(541.3kb,更新) :Wed Apr 18 07:00:45 2012))。 将文件复制到包含R.DLL的目录。 从CRAN安装Rserve后
install.packages("Rserve")
在R(我有RStudio – 方便的事情: 下载RStudio IDE )。 Rserve是从R内开始的,只是输入
library(Rserve) Rserve()
Сheck在任务管理器中 – 应该运行Rserve.exe。 在Eclipse中创建Java项目之后,在该项目下创建一个名为lib的目录。 在这里粘贴2jarRserveEngine.jar和REngine.jar(www.rforge.net/Rserve/files/)。 不要忘记在属性java-project中添加这个jar。 在新的类代码中:
import org.rosuda.REngine.*; import org.rosuda.REngine.Rserve.*; public class rserveuseClass { public static void main(String[] args) throws RserveException { try { RConnection c = new RConnection();// make a new local connection on default port (6311) double d[] = c.eval("rnorm(10)").asDoubles(); org.rosuda.REngine.REXP x0 = c.eval("R.version.string"); System.out.println(x0.asString()); } catch (REngineException e) { //manipulation } } }
以下是从头开始创建RServe项目的更详细说明:
首先安装并让Rserve在R中运行
- 安装R.
- 从CRAN添加包RServe。
- 在R类型:install.packages(“Rserve”)
对于远程访问:
- 创建文件:/etc/Rserv.conf
将以下内容添加到Rserv.conf中
workdir /tmp/Rserv remote enable auth required plaintext disable port 6311 maxsendbuf 0 (size in kB, 0 means unlimited use)
在R中:运行以下命令
library(Rserve)
对于Windows:
Rserve()
对于Mac:
Rserve(args="--no-save")
Rserve的一个实例现在在localhost端口6311上运行。
下一步创建一个Rserve项目(我正在使用eclipse)
为此,我将使用eclipse:
- 从这里下载RserveEngine.jar和REngine.jar。
- 在eclipse中创建一个java项目。
- 在项目目录下创建一个lib文件夹。 (与您的src文件夹相同)
- 将RserveEngine.jar和REngine.jar复制到lib文件夹中。
- 添加jar来构建路径: 说明
- 添加一个包然后添加一个主类:称之为HelloWorldApp。
将此代码添加到类中
package com.sti.ai; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import org.rosuda.REngine.REXP; import org.rosuda.REngine.REXPMismatchException; import org.rosuda.REngine.Rserve.RConnection; import org.rosuda.REngine.Rserve.RserveException; public class HelloWorldApp { public static void main(String[] args) throws RserveException, REXPMismatchException, FileNotFoundException, IOException { RConnection c = new RConnection("", 6311); if(c.isConnected()) { System.out.println("Connected to RServe."); if(c.needLogin()) { System.out.println("Providing Login"); c.login("username", "password"); } REXP x; System.out.println("Reading script..."); File file = new File(""); try(BufferedReader br = new BufferedReader(new FileReader(file))) { for(String line; (line = br.readLine()) != null; ) { System.out.println(line); x = c.eval(line); // evaluates line in R System.out.println(x); // prints result } } } else { System.out.println("Rserve could not connect"); } c.close(); System.out.println("Session Closed"); } }
最后,运行HelloWorldApp.java
对于那些使用Maven的人
REngine
org.nuiton.thirdparty REngine 1.7-3
RServe
org.rosuda.REngine Rserve 1.8.1
快速的,试图分开任务:
-
Rserve可以单独安装。 从那里开始。
-
Rserve有样本客户。 尝试使用Java示例。
-
从那里,写下你的新程序。
-
Eclipse完全是可选的。 你不必使用它。 如果这是学习的又一步,请考虑跳过它。 一旦1到3很好,学习如何在Eclipse中表达构建依赖项。
从Java调用R有两种方法–JRI和RServe。 这是一个插件,可以帮助您在Windows上设置RJava。 如果您正在寻找更具生产力的解决方案,那么Rserve可以提供更好的用途。 此示例显示如何运行示例RServe程序。 如果您使用的是RServe,请在eval函数中运行命令
REXP m = c.eval("matrix(sample(0:1,100, rep=T),ncol=10)")
您可以使用一些默认数据结构来转换m(REXP)。
- 无法打开数据库/无法将(数据库)的区域设置更改为“en_US”
- 什么是用于调查Java中无意识的对象保留的好的免费工具?
- 任何人都可以在mac os 10.5.8上运行eclipse galileo
- m2e:使用exec-maven-plugin生成代码
- 在“正在更新Maven项目”期间发生内部错误。 org.eclipse.m2e.wtp.WTPProjectsUtil.isM2eWtpDisabled
- Tomcat Jersey Eclipse ClassNotFound org.glassfish.jersey.servlet.ServletContainer
- 用于处理protobuf的Eclipse插件
- 在Eclipse IDE中调试Java时将exception作为表达式捕获
- 无法使用双击打开.jar,仅使用cmd