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

Operazioni in Java con R

Prima di tutto, installa il pacchetto "Rserve" in R.

Se utilizzi l'interfaccia visiva RGui, puoi completare questa operazione nella barra del menu Programmi - Installazione del pacchetto. Se utilizzi un semplice console R, puoi utilizzare il seguente comando:

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

Dopo che Reserve è stato installato, ci sarà una directory library nel percorso di root di R, nella quale trovare la directory Rserve/java, e scoprire che ci sono due file: REngine.jar e Rserve.jar.

Questi due file sono le librerie di interfaccia R in Java.

Attenzione:Java non può utilizzare le funzionalità di R in modo indipendente dal sistema R!

Primo passo: avviare Reserve

Entrare in R e inserire il seguente codice per avviare Rserve:

library("Rserve")
Rserve()

Se l'avvio è stato eseguito con successo, R esprimerà il percorso di Rserve.

Secondo passo: scrivere un programma Java

Prima di tutto, importiamo le due librerie jar precedenti.

Dopo l'importazione, riconosciamo una classe chiave: RConnection, che può essere utilizzata per connettersi a Rserve.

Ora stiamo utilizzando R in Java per eseguire un calcolo di matrice inversa:

import org.rosuda.REngine.Rserve.*;
public class Main {
    public static void main(String[] args) {
        RConnection rcon = null;
        try {
            // Si stabilisce una connessione con Rserve
            rcon = new RConnection("127.0.0.1");
            
            // La funzione eval() viene utilizzata per far eseguire R in R
            // Ecco una matrice m1
            rcon.eval("m1 = matrix(c(1, 2, 3, 4), 2, 2, byrow=TRUE)");
            
            // La funzione solve() in R calcola l'inerzia della matrice m1
            // E il risultato viene restituito, la funzione asDoubleMatrix può convertire i dati in
            // In Java, un array bidimensionale di double viene utilizzato per rappresentare la matrice
            double[][] m1 = rcon.eval("solve(m1)").asDoubleMatrix();
            
            // Output del contenuto della 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();
        }
    }
}

Risultato dell'esecuzione:

-1.9999999999999998 1.0    
1.4999999999999998 -0.49999999999999994

Chiaramente, il risultato è corretto, ma è un numero a virgola mobile, quindi potrebbe non apparire bene nella stampa, non influisce sull'uso dei dati.