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()
- 1
- 2
- 3
- 4
- 5
- 6
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);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
//Console输出结果:
R version 3.1.2 (2014-10-31)
meanR = 5.0
mean = 5.0
- 1
- 2
- 3
- 4
调用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);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
//Console输出:
the sum = 3
- 1
- 2
#附录R文件中的自定义函数
#自定义求和函数
getSum<-function(x,y,z){
m = 2*x + y - z
return(m)
}