Operación de R en Java
Primero, instala el paquete "Rserve" en R.
Si usas la interfaz visual RGui, puedes completar este paso en el menú Paquetes - Instalar paquetes. Si usas solo la consola de R, puedes utilizar el siguiente comando:
install.packages("Rserve", repos = "https://mirrors.ustc.edu.cn/CRAN/")
Una vez completada la instalación de Rserve, en el directorio raíz de R habrá un directorio library. Dentro de él, busca el directorio Rserve/java y encontrarás dos archivos: REngine.jar y Rserve.jar.
Estos dos archivos son las bibliotecas de interfaz de R para Java.
Nota:¡Java no puede usar las funcionalidades de R de manera independiente sin el sistema R!
Primer paso: iniciar Rserve
Entra en R e ingresa el siguiente código para iniciar Rserve:
library("Rserve")
Rserve()
Si el inicio es exitoso, R mostrará la ruta de Rserve.
Segundo paso: escribir un programa Java
Primero importa las dos librerías jar anteriores.
Después de importarlas, conocemos una clase clave: RConnection. Esta clase se puede usar para conectarse a Rserve.
Ahora usaremos R en Java para realizar una operación de matriz inversa:
![]()
Ejemplo
public class Main {
public static void main(String[] args) {
RConnection rcon = null;
try {
// Establece la conexión con Rserve
rcon = new RConnection("127.0.0.1");
// La función eval() se usa para que R ejecute sentencias de R
// Aquí se crea una matriz m1
rcon.eval("m1 = matrix(c(1, 2, 3, 4), 2, 2, byrow=TRUE)");
// La función solve() en R calcula la matriz inversa de la matriz m1
// Y devuelve el resultado. La función asDoubleMatrix puede convertir los datos en
// un arreglo bidimensional double de Java para representar una matriz
double[][] m1 = rcon.eval("solve(m1)").asDoubleMatrix();
// Imprime el contenido de la matriz
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();
}
}
}
Resultado de la ejecución:
-1.9999999999999998 1.0 1.4999999999999998 -0.49999999999999994
Obviamente, el resultado es correcto, pero después de todo son números de punto flotante, por lo que la impresión puede no verse muy bien, pero no afecta el uso de los datos.
Otras extensiones