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