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

Operaciones en R desde Java

Primero, instale el paquete "Rserve" en R.

Si usa RGui interfaz visual, en la barra de menú de programa - El programa de instalación puede completar este paso. Si usa puramente R Console, puede usar las siguientes órdenes:

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

Después de que Reserve se instale, habrá un directorio library en la raíz de R, donde puede encontrar Rserve/directorio java, y luego descubrirá que hay dos archivos en el directorio: REngine.jar y Rserve.jar.

Estos dos archivos son las bibliotecas de interfaz de R en Java.

Atención:Java no puede lograr el uso independiente de las funciones de R sin el sistema R!

Primero paso, iniciar Reserve

Ingrese R, ingrese el siguiente código para iniciar Rserve:

library("Rserve")
Rserve()

Si se inicia con éxito, R mostrará la ruta de Rserve.

Segundo paso, escribir un programa Java

Primero, importe los dos jars que se importaron recientemente.

Después de importar, nos familiarizamos con una clase clave: RConnection, que se puede usar para conectarse a Rserve.

Ahora estamos utilizando R en Java para realizar una operación de matriz inversa:

import org.rosuda.REngine.Rserve.*;
public class Main {
    public static void main(String[] args) {
        RConnection rcon = null;
        try {
            // Establecer la conexión con Rserve
            rcon = new RConnection("127.0.0.1");
            
            // eval() función se utiliza para hacer que R ejecutar R enunciado
            // Aquí se ha creado un m1 matriz
            rcon.eval("m1 = matrix(c(1, 2, 3, 4), 2, 2, byrow = TRUE")
            
            // la función solve() en R para buscar m1 matriz inversa
            // y devolver el resultado, la función asDoubleMatrix puede convertir los datos en
            // Java double dos dimensiones array para representar la matriz
            double[][] m1 = rcon.eval("solve(m1).asDoubleMatrix();
            
            // Mostrar 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

Claramente, el resultado es correcto, pero después de todo es un número de coma flotante, por lo que la salida puede no ser tan agradable, pero no afecta el uso de los datos.