Запуск R в Java

Сначала установите пакет "Rserve" в R.

Если вы используете графический интерфейс RGui, это можно сделать в строке меню в разделе Пакеты - Установить пакеты. Если вы используете чистую консоль R, можно воспользоваться следующей командой:

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

После установки Rserve в корневом каталоге R появится каталог library. Найдите в нем каталог Rserve/java, и вы увидите два файла: REngine.jar и Rserve.jar.

Эти два файла — библиотека интерфейса R в Java.

Примечание:Java не может самостоятельно использовать функциональность R без системы R!

Шаг 1: Запуск Rserve

Войдите в R и введите следующий код, чтобы запустить Rserve:

library("Rserve")
Rserve()

Если запуск успешен, R выведет путь к Rserve.

Шаг 2: Напишите программу на Java

Сначала импортируйте две библиотеки jar, упомянутые ранее.

После импорта мы познакомимся с ключевым классом: RConnection. Этот класс можно использовать для подключения к Rserve.

Теперь давайте использовать R в Java для вычисления обратной матрицы:

Пример

import org.rosuda.REngine.Rserve.*;

public class Main {

    public static void main(String[] args) {
        RConnection rcon = null;
        try {
            // Установить соединение с Rserve
            rcon = new RConnection("127.0.0.1");
           
            // Функция eval() используется для того, чтобы R выполнял операторы R
            // Здесь создаётся матрица m1
            rcon.eval("m1 = matrix(c(1, 2, 3, 4), 2, 2, byrow=TRUE)");
           
            // Функция solve() вычисляет обратную матрицу для матрицы m1 в R
            // И возвращает результат. Функция asDoubleMatrix может преобразовать данные в
            // двумерный массив double в Java для представления матрицы
            double[][] m1 = rcon.eval("solve(m1)").asDoubleMatrix();
           
            // Вывод содержимого матрицы
            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();
        }
    }
}

Результат выполнения:

-1.9999999999999998    1.0    
1.4999999999999998    -0.49999999999999994

Очевидно, результат верен, но всё же это числа с плавающей запятой, поэтому напечатанный вывод может выглядеть не очень красиво; это не влияет на использование данных.

Другие расширения