使用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中运行

  1. 安装R.
  2. 从CRAN添加包RServe。
  3. 在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:

  1. 从这里下载RserveEngine.jar和REngine.jar。
  2. 在eclipse中创建一个java项目。
  3. 在项目目录下创建一个lib文件夹。 (与您的src文件夹相同)
  4. 将RserveEngine.jar和REngine.jar复制到lib文件夹中。
  5. 添加jar来构建路径: 说明
  6. 添加一个包然后添加一个主类:称之为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  

快速的,试图分开任务:

  1. Rserve可以单独安装。 从那里开始。

  2. Rserve有样本客户。 尝试使用Java示例。

  3. 从那里,写下你的新程序。

  4. 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)。