English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Opérations en R dans Java

Tout d'abord, installez le paquet "Rserve" dans R.

Si vous utilisez l'interface visuelle RGui, dans le menu bar de l'application - Le programme d'installation peut accomplir cette étape. Si vous utilisez un pur R Console, vous pouvez utiliser la commande suivante :

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

Après l'installation de Reserve, un répertoire library sera présent dans le répertoire racine de R, où vous trouverez Rserve/Le répertoire java, puis vous会发现目录下有两个文件:REngine.jar et Rserve.jar。

Ces deux fichiers sont les bibliothèques d'interface R en Java.

Attention :Java ne peut pas utiliser les fonctionnalités de R indépendamment du système R !

Première étape : démarrer Reserve

Entrez R et tapez le code suivant pour démarrer Rserve :

library("Rserve")
Rserve()

Si le lancement est réussi, R affichera le chemin d'accès à Rserve.

Deuxième étape : écrire un programme Java

Tout d'abord, importez les deux bibliothèques jar précédentes.

Après l'importation, nous connaissons une classe clé : RConnection, cette classe peut être utilisée pour se connecter à Rserve.

Nous utilisons R en Java pour effectuer une opération de matrice inversée :

import org.rosuda.REngine.Rserve.*;
public class Main {
    public static void main(String[] args) {
        RConnection rcon = null;
        try {
            // 建立与 Rserve 的连接
            rcon = new RConnection("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();
            
            // Affichage du contenu de la matrice
            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();
        }
    }
}

Résultat de l'exécution :

-1.9999999999999998    1.0    
1.4999999999999998    -0.49999999999999994

Il est évident que le résultat est correct, mais毕竟它是浮点数,所以打印出来可能有些不好看,不影响对数据的使用。