Utiliser R en Java

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

Si vous utilisez l'interface graphique RGui, vous pouvez faire cela dans la barre de menus sous Packages - Install packages. Si vous utilisez une console R pure, vous pouvez utiliser la commande suivante :

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

Après l'installation de Rserve, il y aura un répertoire library sous le répertoire racine de R. Trouvez le répertoire Rserve/java dedans, et vous verrez deux fichiers : REngine.jar et Rserve.jar.

Ces deux fichiers constituent la bibliothèque d'interface R en Java.

Remarque :Java ne peut pas utiliser indépendamment les fonctionnalités de R sans le système R !

Étape 1 : Démarrer Rserve

Lancez R, puis saisissez le code suivant pour démarrer Rserve :

library("Rserve")
Rserve()

Si le démarrage réussit, R affichera le chemin d'accès à Rserve.

Étape 2 : Écrire un programme Java

Importez d'abord les deux bibliothèques jar mentionnées précédemment.

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

Maintenant, utilisons R en Java pour effectuer un calcul de matrice inverse :

Exemple

import org.rosuda.REngine.Rserve.*;

public class Main {

    public static void main(String[] args) {
        RConnection rcon = null;
        try {
            // Établir la connexion avec Rserve
            rcon = new RConnection("127.0.0.1");
           
            // La fonction eval() est utilisée pour permettre à R d'exécuter des instructions R
            // Ici, une matrice m1 est créée
            rcon.eval("m1 = matrix(c(1, 2, 3, 4), 2, 2, byrow=TRUE)");
           
            // La fonction solve() calcule l'inverse de la matrice m1 dans R
            // Et renvoie le résultat. La fonction asDoubleMatrix peut convertir les données en
            // un tableau de double à deux dimensions en Java pour représenter la matrice
            double[][] m1 = rcon.eval("solve(m1)").asDoubleMatrix();
           
            // Afficher le 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

De toute évidence, le résultat est correct, mais après tout, ce sont des nombres à virgule flottante, donc la sortie imprimée peut ne pas être très jolie ; cela n'affecte pas l'utilisation des données.

Autres extensions