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

Java-Operationen in R

Zunächst installieren Sie das Paket "Rserve" in R.

Wenn Sie RGui als visuelle Oberfläche verwenden, wählen Sie im Menüband unter Pakete - Das Installationsprogramm kann diesen Schritt durchführen. Wenn Sie einen reinen R Console verwenden, können Sie den folgenden Befehl verwenden:

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

Nachdem Reserve installiert ist, gibt es im Hauptverzeichnis von R ein Verzeichnis library, darin finden Sie Rserve/Im Verzeichnis java, dann finden Sie unter diesem Verzeichnis zwei Dateien: REngine.jar und Rserve.jar.

Diese beiden Dateien sind die R-Schnittstellenbibliotheken in Java.

Achtung:Java kann die Funktionen von R nicht unabhängig vom R-System nutzen!

Schritt 1: Reserve starten

Gehen Sie in 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: Java-Programm schreiben

Zuerst importieren wir die beiden刚才的两个 jar-Bibliotheken.

Nach dem Import kennen wir eine wichtige Klasse: RConnection, die zum Verbinden mit Rserve verwendet werden kann.

Wir verwenden R in Java, um eine Inversmatrixrechnung durchzuführen:

import org.rosuda.REngine.Rserve.*;
public class Main {
    public static void main(String[] args) {
        RConnection rcon = null;
        try {
            // Verbindung zur Rserve herstellen
            rcon = new RConnection("127.0.0.1");
            
            // eval() Funktion verwendet, um R auszuführen
            // hier wurde eine m1 Matrix
            rcon.eval("m1 = matrix(c(1, 2, 3, 4), 2, 2, byrow=TRUE)");
            
            // solve() Funktion in R um m1 inverse Matrix der Matrix
            // und das Ergebnis zurückzugeben, die asDoubleMatrix-Funktion kann die Daten in eine Matrix umwandeln
            // Java-Double-Dimensionales-Array, um die Matrix darzustellen
            double[][] m1 = rcon.eval("solve(m1)").asDoubleMatrix();
            
            // Inhalt der Matrix ausgeben
            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ührungsresultat:

-1.9999999999999998    1.0    
1.4999999999999998    -0.49999999999999994

Es ist offensichtlich, dass das Ergebnis korrekt ist, aber es ist毕竟 ein Fließkommazahl, also könnte es beim Drucken ein bisschen schlecht aussehen, beeinflusst nicht die Verwendung der Daten.