Вопрос по eclipse, java, r – Простая программа для вызова R из Java с использованием Eclipse и Rserve

21

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

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

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

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

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

Ваш Ответ

4   ответа
14

нуля:

First Install and get Rserve running in R. Install R Add package RServe from CRAN. In R type: install.packages("Rserve")

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

Create file: /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.

Next Create an Rserve project (i'm using eclipse)

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

Download RserveEngine.jar and REngine.jar from here. Create a java project in eclipse. Create a lib folder under your project directory. (same level as your src folder) Copy RserveEngine.jar and REngine.jar into the lib folder. Add jars to build path: Instructions Add a package then a main class: call it something like 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

For those who are using 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 can be installed by itself. Start there.

Rserve has sample clients. Try to the Java samples to work.

From there, write your new program.

Eclipse is entirely optional. You do not have to use it. If this is one more step to learn, consider skipping it. Once 1 to 3 are fine, learn how to express build dependencies in Eclipse.

Моя проблема состоит в том, чтобы заставить клиентов Java работать, что именно должно быть сделано? пожалуйста, предположите, что я не знаю Musmar
2

это это плагин, который поможет вам настроить RJava для Windows. Если вы ищете решение более производительного уровня, то Rserve служит лучшим целям.это Пример показывает, как запустить пример программы RServe. Если вы используете RServe, запустите вашу команду в функции eval

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

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

20

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

install.packages("Rserve")

в R (у меня RStudio - удобная вещь:Скачать RStudio IDE). started Rserve is from within R, just type

library(Rserve)
Rserve()

& # x421; heck в диспетчере задач - нужно запустить 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
        }       

    }
}

Похожие вопросы