1、Rserve介绍
2、Rserve安装
install.packages("Rserve")
3、启动Rserver服务
> library(Rserve)
> Rserve()
Starting Rserve...
"d:\PROGRA~2\R\R-32~1.5\library\Rserve\libs\x64\Rserve.exe"
>
4、Java远程连接Rserve
REngine.jar
RserveEngine.jar
在Rserver的安装目录中R_HOME \library\Rserve\java也有这两个包名字不同但是可以用。
把这两个包加入到项目的classpath中即可
RConnection Connection = new RConnection(); //建立连接
Connection.assgin()该方法进行赋值
Connection.eval()该方法调用R函数
5、编写Java脚本
import org.rosuda.REngine.REXP;
import org.rosuda.REngine.Rserve.RConnection;
import org.rosuda.REngine.REXPMismatchException;
import org.rosuda.REngine.REngineException;
import org.rosuda.REngine.Rserve.RserveException;
public class Test6 {
public static void main(String[] args) throws REngineException {
// TODO Auto-generated method stub
try {
callRserve();
} catch (RserveException e) {
e.printStackTrace();
} catch (REXPMismatchException e) {
e.printStackTrace();
}
}
static void callRserve() throws REXPMismatchException, REngineException{
RConnection Connection = new RConnection(); //建立连接
//查看R版本
System.out.println("##########查看R版本###########");
String rv = Connection.eval("R.version.string").asString();
System.out.println(rv);
REXP x = Connection.eval("R.version.string ");
System.out.println(x.asString());
//执行R语句
System.out.println("##########执行R语句###########");
double [] arr = Connection.eval("runif(10)").asDoubles();
for(double d : arr) {
System.out.println(d);
}
//调取外部R脚本
System.out.println("##########调取外部R脚本###########");
String fileName = "E:\\WorkTestData\\area.R";//area.R里R语句为:area
Connection.assign("fileName", fileName); //赋值
Connection.eval("source(fileName)"); //sourceR脚本
REXP rexp = Connection.eval("area(10)"); //执行R语句
System.out.println("Area of 10 is " + rexp.asDouble());
//使用R语言画图
System.out.println("##########使用R语言画图###########");
double[] xx = {1,2,3,4,5,6,7,8,9,10}; //生成两个数组
double[] yy = {1,4,9,16,25,36,49,64,81,100};
Connection.assign("x", xx); //给R的变量赋值
Connection.assign("y", yy);
System.out.println("jpeg('E:/WorkTestData//test.jpg')");
Connection.eval("jpeg('E:/WorkTestData/test.jpg')");
Connection.eval("plot(x, y)");//绘图
Connection.eval("dev.off()");
}
}