R in Java betreiben

Installieren Sie zunächst das Paket "Rserve" in R.

Wenn Sie die grafische Oberfläche RGui verwenden, können Sie dies in der Menüleiste unter Pakete - Pakete installieren vornehmen. Wenn Sie eine reine R-Konsole verwenden, können Sie den folgenden Befehl verwenden:

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

Nachdem Rserve installiert wurde, befindet sich ein library-Verzeichnis unter dem R-Stammverzeichnis. Suchen Sie darin das Verzeichnis Rserve/java, und Sie werden zwei Dateien sehen: REngine.jar und Rserve.jar.

Diese beiden Dateien sind die R-Schnittstellenbibliothek in Java.

Hinweis:Java kann die R-Funktionalität nicht unabhängig vom R-System nutzen!

Schritt 1: Rserve starten

Starten Sie R, und geben Sie den folgenden Code ein, um Rserve zu starten:

library("Rserve")
Rserve()

Wenn der Start erfolgreich ist, gibt R den Pfad zu Rserve aus.

Schritt 2: Schreiben Sie ein Java-Programm

Importieren Sie zuerst die beiden jar-Bibliotheken von zuvor.

Nach dem Importieren lernen wir eine wichtige Klasse kennen: RConnection. Diese Klasse kann verwendet werden, um eine Verbindung zu Rserve herzustellen.

Jetzt wollen wir R in Java nutzen, um die Berechnung einer inversen Matrix durchzuführen:

Beispiel

import org.rosuda.REngine.Rserve.*;

public class Main {

    public static void main(String[] args) {
        RConnection rcon = null;
        try {
            // Verbindung mit Rserve herstellen
            rcon = new RConnection("127.0.0.1");
           
            // Die eval()-Funktion wird verwendet, um R dazu zu bringen, R-Anweisungen auszuführen
            // Hier wird eine Matrix m1 erstellt
            rcon.eval("m1 = matrix(c(1, 2, 3, 4), 2, 2, byrow=TRUE)");
           
            // Die solve()-Funktion berechnet die Inverse der Matrix m1 in R
            // Und gibt das Ergebnis zurück. Die Funktion asDoubleMatrix kann die Daten umwandeln in
            // ein zweidimensionales Double-Array in Java, um die Matrix darzustellen
            double[][] m1 = rcon.eval("solve(m1)").asDoubleMatrix();
           
            // Ausgabe des Inhalts der Matrix
            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();
        }
    }
}

Ausführungsergebnis:

-1.9999999999999998    1.0    
1.4999999999999998    -0.49999999999999994

Offensichtlich ist das Ergebnis korrekt, aber es sind schließlich Gleitkommazahlen, daher mag die gedruckte Ausgabe nicht sehr schön aussehen; dies beeinträchtigt die Verwendung der Daten nicht.

Weitere Erweiterungen