Подтвердить что ты не робот

Простая программа для вызова R из Java с использованием Eclipse и Rserve

Мое приложение должно выполнять операции R, такие как:

m = matrix(sample(0:1,100, rep=T),ncol=10)

Результаты должны быть доступны для приложения Java.

пакет Rserve соединяет R с другими языками, поскольку он действует как сервер TCP/IP. Я читал веб-сайт, но не знаю, как сделать простейшее приложение, которое может использовать Rserve.

Какие шаги необходимы для создания простого приложения Eclipse, которое использует Rserve для выполнения R-команд из Java?

4b9b3361

Ответ 1

В разделе загрузки есть двоичная версия Rserve (www.rforge.net/Rserve/files/У меня есть версия R 2.13 и Windows xp, поэтому мне нужно загрузить двоичный файл Windows: Rserve_0.6-8.zip(541.3 kb, обновлено: ср апр. 18 07:00:45 2012)). Скопируйте файл в каталог, содержащий R.DLL. После установки Rserve из CRAN

install.packages("Rserve")

в R (у меня RStudio - удобная вещь: Загрузить RStudio IDE). начал Rserve изнутри R, просто введите

library(Rserve)
Rserve()

Выберите диспетчер задач - Rserve.exe должен быть запущен. После создания Java-проекта в Eclipse создайте в этом проекте каталог lib. Вставить 2 jar здесь RserveEngine.jar и REngine.jar(www.rforge.net/Rserve/files/). Не забудьте добавить эти банки в свойствах вашего java-проекта. В новом коде класса:

import org.rosuda.REngine.*;
import org.rosuda.REngine.Rserve.*;

public class rserveuseClass {
    public static void main(String[] args) throws RserveException {
        try {
            RConnection c = new RConnection();// make a new local connection on default port (6311)
            double d[] = c.eval("rnorm(10)").asDoubles();
            org.rosuda.REngine.REXP x0 = c.eval("R.version.string");
            System.out.println(x0.asString());
} catch (REngineException e) {
            //manipulation
        }       

    }
}

Ответ 2

Вот несколько более подробных инструкций по созданию проекта RServe с нуля:

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

  • Установить R
  • Добавить пакет RServe из CRAN.
  • В R-типе: install.packages( "Rserve" )

Для удаленного доступа:

  • Создать файл:/etc/Rserv.conf

Добавьте в Rserv.conf следующее:

workdir /tmp/Rserv
remote enable
auth required
plaintext disable
port 6311
maxsendbuf 0 (size in kB, 0 means unlimited use)

В R: выполните следующие команды

library(Rserve)

Для Windows:

Rserve()

Для Mac:

Rserve(args="--no-save")

Экземпляр Rserve теперь запущен на локальном хосте 6311.

Далее Создать проект Rserve (я использую eclipse)

Для этого я собираюсь использовать eclipse:

  • Загрузите RserveEngine.jar и REngine.jar из здесь.
  • Создайте проект java в eclipse.
  • Создайте папку lib в каталоге проекта. (тот же уровень, что и ваша папка src)
  • Скопируйте RserveEngine.jar и REngine.jar в папку lib.
  • Добавьте банки для построения пути: Инструкции
  • Добавьте пакет, затем основной класс: назовите его чем-то вроде HelloWorldApp.

Добавьте этот код в класс

package com.sti.ai;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

import org.rosuda.REngine.REXP;
import org.rosuda.REngine.REXPMismatchException;
import org.rosuda.REngine.Rserve.RConnection;
import org.rosuda.REngine.Rserve.RserveException;

public class HelloWorldApp {

    public static void main(String[] args) throws RserveException, REXPMismatchException, FileNotFoundException, IOException {
        RConnection c = new RConnection("<host/ip>", 6311);
        if(c.isConnected()) {
            System.out.println("Connected to RServe.");
            if(c.needLogin()) {
                System.out.println("Providing Login");
                c.login("username", "password");
            }

            REXP x;
            System.out.println("Reading script...");
            File file = new File("<file location>");
            try(BufferedReader br = new BufferedReader(new FileReader(file))) {
                for(String line; (line = br.readLine()) != null; ) {
                    System.out.println(line);
                    x = c.eval(line);         // evaluates line in R
                    System.out.println(x);    // prints result
                }
            }

        } else {
            System.out.println("Rserve could not connect");
        }

        c.close();
        System.out.println("Session Closed");
    }

}

Наконец, запустите HelloWorldApp.java

Для тех, кто использует Maven

REngine

<dependency>
    <groupId>org.nuiton.thirdparty</groupId>
    <artifactId>REngine</artifactId>
    <version>1.7-3</version>
</dependency>

RServe

<dependency>
    <groupId>org.rosuda.REngine</groupId>
    <artifactId>Rserve</artifactId>
    <version>1.8.1</version>
</dependency>

Ответ 3

Быстрые, пытаясь разделить задачи:

  • Rserve может быть установлен сам по себе. Начните там.

  • У Rserve есть образцы клиентов. Попробуйте использовать образцы Java.

  • Оттуда напишите новую программу.

  • Eclipse полностью необязателен. Вам не обязательно использовать его. Если это еще один шаг к обучению, подумайте о его пропуске. Когда-то от 1 до 3 прекрасно, узнайте, как выражать зависимости сборки в Eclipse.

Ответ 4

Существует два способа вызова R из Java - JRI и RServe. Это - это плагин, который поможет вам настроить RJava на windows. Если вы ищете решение для более высокого уровня производительности, то Rserve лучше подходит. Этот пример показывает, как запустить образец программы RServe. Если вы используете RServe, тогда запустите свою команду в функции eval

REXP m = c.eval("matrix(sample(0:1,100, rep=T),ncol=10)")

Существуют некоторые стандартные структуры данных, которые можно использовать для преобразования m (REXP).