Java 与 R 交互--Java调用R函数-Rserver方式

JAVA很适合开发应用系统,但是数学建模和计算能力非其所长,如果该系统需要进行大量的统计或者优化的计算,调用R是一种很好的方式。JAVA负责系统的构建,R用来做运算引擎,从而实现应用型和分析性相结合的系统。
首先要介绍的是Rserve的方式,这是一个基于TCP/IP的服务器,通过二进制协议传输数据,可以提供远程连接,使得客户端语言能够调用R。目前Rserve作为一个package发布在CRAN上,可以直接使用install.packages(“Rserve”)进行安装。需要使用时在R控制台下加载该包,然后输入命令Rserve(),开启服务器,就可以供客户端调用。
参考:http://blog.csdn.net/likelet/article/details/7826054

准备工作:
jar包下载:http://www.rforge.net/Rserve/files/
REngine.jar
RserveEngine.jar

R/Rstudio操作

# Java 与 R 交互--Java调用R函数
#加载Rserver包,先启动
#install.packages('Rserve')
library(Rserve)
Rserve()

Java/Eclipse 操作

//在Eclipse中加载jar包,进行测试,代码如下:
//创建连接
RConnection rConnection = new RConnection();
REXP rexp = rConnection.eval("R.version.string");//测试连接,方法是eval(String arg0) 
System.out.println(rexp.asString());// R version 3.1.2 (2014-10-31)

// Java代码 调用 测试R函数
String vector = "c(1,3,5,7,9)";
REXP meanR = rConnection.eval("meanVal<-mean(" + vector + ")");
System.out.println("meanR = " + meanR.asDouble());// 5.0

double mean = rConnection.eval("meanVal").asDouble();
System.out.println("mean = " + mean);
//Console输出结果:
R version 3.1.2 (2014-10-31)
meanR = 5.0
mean = 5.0

调用R自定义函数

//加载源文件
rConnection.eval("source('D:/11_Java_R.R')");//文件名不能带中文,否则报错:eval failed, request status: error code: 127
int a = 2;
int b = 3;
int c = 4;
int sum = rConnection.eval("getSum(" + a + "," + b + "," + c + ")").asInteger();

System.out.println("the sum = " + sum);
//Console输出:
the sum = 3
#附录R文件中的自定义函数
#自定义求和函数
getSum<-function(x,y,z){
  m = 2*x + y - z
  return(m)
}

你可能感兴趣的:(R语言,java,r语言,远程连接,整合,交互)