使用Eclipse和Rserve从Java调用R的简单程序
我的应用程序必须执行R操作,例如:使用Eclipse和Rserve从Java调用R的简单程序,java,eclipse,r,rserve,Java,Eclipse,R,Rserve,我的应用程序必须执行R操作,例如: m = matrix(sample(0:1,100, rep=T),ncol=10) 结果应该可用于Java应用程序 由于它充当TCP/IP服务器,因此桥接器可以连接到其他语言。我读过这个网站,但不知道如何制作可以使用Rserve的最简单的应用程序 制作一个简单的Eclipse应用程序,使用Rserve从Java执行R命令需要哪些步骤?快速步骤,尝试分离任务: Rserve可以自行安装。从那里开始 Rserve提供了示例客户机。尝试使用Java示例来工作 从
m = matrix(sample(0:1,100, rep=T),ncol=10)
结果应该可用于Java应用程序
由于它充当TCP/IP服务器,因此桥接器可以连接到其他语言。我读过这个网站,但不知道如何制作可以使用Rserve的最简单的应用程序
制作一个简单的Eclipse应用程序,使用Rserve从Java执行R命令需要哪些步骤?快速步骤,尝试分离任务:
下载部分有一个二进制版本的Rserve(www.rforge.net/Rserve/files/我有版本R2.13和Windows xp,所以我需要下载Windows二进制:Rserve_0.6-8.zip(541.3kb,更新:Wed Apr 18 07:00:45 2012))。将文件复制到包含R.DLL的目录。安装后,从起重机上恢复
install.packages("Rserve")
在R中(我有RStudio-方便的东西:)。
已从R中启动Rserve,只需键入
library(Rserve)
Rserve()
С应运行任务管理器中的检查-Rserve.exe。
在Eclipse中创建Java项目后,在该项目下创建一个名为lib的目录。粘贴
这里有2个jar rservengine.jar和REngine.jar(www.rforge.net/Rserve/files/)。不要忘记在java项目中添加这个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
}
}
}
从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)。以下是一些更详细的说明,用于从头创建RServe项目: 首先在R中安装并运行Rserve。
- 创建文件:/etc/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的一个实例现在正在本地主机端口6311上运行
接下来创建一个Rserve项目(我正在使用eclipse)
为此,我将使用eclipse:
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("<host/ip>", 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("<file location>");
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");
}
}
package com.sti.ai;
导入java.io.BufferedReader;
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.io.FileReader;
导入java.io.IOException;
导入org.rosuda.REngine.REXP;
导入org.rosuda.REngine.REXPMismatchException;
导入org.rosuda.REngine.Rserve.r连接;
导入org.rosuda.REngine.Rserve.RserveException;
公共类HelloWorldApp{
publicstaticvoidmain(字符串[]args)抛出RserveException、rexpmismatcheException、FileNotFoundException、IOException{
RConnection c=新的RConnection(“,6311”);
如果(c.断开连接()){
System.out.println(“连接到RServe”);
if(c.needLogin()){
System.out.println(“提供登录”);
c、 登录(“用户名”、“密码”);
}
rexpx;
System.out.println(“读取脚本…”);
文件文件=新文件(“”);
try(BufferedReader br=new BufferedReader(new FileReader(file))){
for(字符串行;(line=br.readLine())!=null;){
系统输出打印项次(行);
x=c.eval(line);//计算R中的行
System.out.println(x);//打印结果
}
}
}否则{
System.out.println(“Rserve无法连接”);
}
c、 close();
System.out.println(“会话关闭”);
}
}
最后,运行HelloWorldApp.java
对于使用Maven的用户
org.nuiton.thirdparty
org.rosuda.REngine
R服务
1.8.1
我的问题是如何让java客户端工作,到底应该做什么?请假定我不知道
<dependency>
<groupId>org.nuiton.thirdparty</groupId>
<artifactId>REngine</artifactId>
<version>1.7-3</version>
</dependency>
<dependency>
<groupId>org.rosuda.REngine</groupId>
<artifactId>Rserve</artifactId>
<version>1.8.1</version>
</dependency>