Java 中操作 R

首先,在 R 中安装软件包 "Rserve" 。

如果你使用的是 RGui 可视化界面,在菜单栏的 程序包 - 安装程序包 里可以完成这个步骤。如果你使用的是纯粹的 R Console,可以使用以下命令:

install.packages("Rserve",repos="https://mirrors.ustc.edu.cn/CRAN/")

当 Reserve 安装完成之后,在 R 的根目录下会有一个 library 目录,在其中找到 Rserve/java 目录,然后会发现目录下有两个文件:REngine.jar 和 Rserve.jar。

这两个文件就是 Java 中的 R 接口库。

注意:Java 不能做到脱离 R 系统独立使用 R 的功能!

第一步 启动 Reserve

进入 R,输入以下代码已启动 Rserve:

library("Rserve")Rserve()

如果启动成功,R 会输出 Rserve 的路径。

第二步 编写 Java 程序

首先导入刚才的两个 jar 库。

导入之后,我们认识一个关键的类:RConnection, 这个类可以用于连接到 Rserve。

我们现在在 Java 中利用 R 完成一个逆矩阵运算:

importorg.rosuda.REngine.Rserve.*;publicclassMain{publicstaticvoidmain(String[]args){RConnectionrcon=null;try{//建立与Rserve的连接rcon=newRConnection("127.0.0.1");//eval()函数用于令R执行R语句//此处制造了一个m1矩阵rcon.eval("m1=matrix(c(1,2,3,4),2,2,byrow=TRUE)");//solve()函数在R中求m1矩阵的逆矩阵//并将结果返回,asDoubleMatrix函数可以将数据转换成//Java中的double二维数组以表示矩阵double[][]m1=rcon.eval("solve(m1)").asDoubleMatrix();//输出矩阵的内容for(inti=0;i<m1.length;i++){for(intj=0;j<m1[0].length;j++)System.out.print(m1[i][j]+"\t");System.out.println();}}catch(Exceptione){e.printStackTrace();}finally{if(rcon!=null)rcon.close();}}}

执行结果:

-1.99999999999999981.01.4999999999999998-0.49999999999999994

很显然,结果是正确的,但毕竟是浮点数,所以打印出来可能有些不好看,不影响对数据的使用。

编辑于2024-05-20 15:22