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()
  • 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)
}

猜你喜欢

转载自blog.csdn.net/u010251897/article/details/79715836
R
R: