R语言教程:Java 中操作 R

2022-08-0219:55:11编程语言入门到精通Comments1,120 views字数 1190阅读模式

首先,在 R 中安装软件包 "Rserve" 。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26450.html

如果你使用的是 RGui 可视化界面,在菜单栏的 程序包 - 安装程序包 里可以完成这个步骤。如果你使用的是纯粹的 R Console,可以使用以下命令:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26450.html

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

当 Reserve 安装完成之后,在 R 的根目录下会有一个 library 目录,在其中找到 Rserve/java 目录,然后会发现目录下有两个文件:REngine.jar 和 Rserve.jar。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26450.html

这两个文件就是 Java 中的 R 接口库。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26450.html

注意:Java 不能做到脱离 R 系统独立使用 R 的功能!文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26450.html

第一步 启动 Reserve

进入 R,输入以下代码已启动 Rserve:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26450.html

library("Rserve")
Rserve()

如果启动成功,R 会输出 Rserve 的路径。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26450.html

第二步 编写 Java 程序

首先导入刚才的两个 jar 库。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26450.html

导入之后,我们认识一个关键的类:RConnection, 这个类可以用于连接到 Rserve。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26450.html

我们现在在 Java 中利用 R 完成一个逆矩阵运算:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26450.html

R语言教程:Java 中操作 R文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26450.html

实例

import org.rosuda.REngine.Rserve.*;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26450.html

public class Main {文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26450.html

public static void main(String[] args) {
RConnection rcon = null;
try {
// 建立与 Rserve 的连接
rcon = new RConnection("127.0.0.1");文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26450.html

// eval() 函数用于令 R 执行 R 语句
// 此处制造了一个 m1 矩阵
rcon.eval("m1 = matrix(c(1, 2, 3, 4), 2, 2, byrow=TRUE)");文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26450.html

// solve() 函数在 R 中求 m1 矩阵的逆矩阵
// 并将结果返回,asDoubleMatrix 函数可以将数据转换成
// Java 中的 double 二维数组以表示矩阵
double[][] m1 = rcon.eval("solve(m1)").asDoubleMatrix();文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26450.html

// 输出矩阵的内容
for (int i = 0; i < m1.length; i++) {
for (int j = 0; j < m1[0].length; j++)
System.out.print(m1[i][j] + "\t");
System.out.println();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (rcon != null) rcon.close();
}
}
}文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26450.html

执行结果:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26450.html

-1.9999999999999998    1.0    
1.4999999999999998    -0.49999999999999994

很显然,结果是正确的,但毕竟是浮点数,所以打印出来可能有些不好看,不影响对数据的使用。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26450.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/ymba/26450.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定