java eclipse r rserve

Sencillo programa para llamar a R desde Java usando Eclipse y Rserve



(4)

Mi aplicación debe realizar operaciones de R como:

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

Los resultados deben estar disponibles para una aplicación Java.

El paquete Rserve conecta R con otros idiomas, ya que actúa como un servidor TCP / IP. He leído el sitio web pero no sé cómo hacer la aplicación más sencilla que puede usar Rserve.

¿Qué pasos se requieren para hacer una aplicación Eclipse simple que use Rserve para ejecutar comandos R desde Java?


Aquí hay algunas instrucciones más detalladas para crear un proyecto RServe desde cero:

Primero instale y haga que Rserve se ejecute en R.

  1. Instalar R
  2. Añadir paquete RServe desde CRAN.
  3. En el tipo R: install.packages ("Rserve")

Para acceso remoto:

  • Crear archivo: /etc/Rserv.conf

Agregue lo siguiente a Rserv.conf

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

En R: ejecuta los siguientes comandos

library(Rserve)

Para ventanas:

Rserve()

Para Mac:

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

Ahora se está ejecutando una instancia de Rserve en el puerto localhost 6311.

Siguiente Crear un proyecto Rserve (estoy usando eclipse)

Para esto voy a utilizar eclipse:

  1. Descargue RserveEngine.jar y REngine.jar desde here .
  2. Crea un proyecto java en eclipse.
  3. Crea una carpeta lib en el directorio de tu proyecto. (el mismo nivel que su carpeta src)
  4. Copie RserveEngine.jar y REngine.jar en la carpeta lib.
  5. Añadir tarros para construir ruta: Instructions
  6. Agregue un paquete y luego una clase principal: llámelo algo así como HelloWorldApp.

Agrega este código a la clase

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"); } }

Finalmente, ejecute HelloWorldApp.java

Para aquellos que están usando Maven

REngine

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

REngine

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


Hay dos formas de llamar a R desde Java: JRI y RServe. This es un complemento que te ayudará a configurar RJava en Windows. Si está buscando una solución de mayor nivel de producción, Rserve tiene un mejor propósito. This ejemplo muestra cómo ejecutar un programa RServe de muestra. Si está utilizando RServe, ejecute su comando en la función eval

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

Hay algunas estructuras de datos predeterminadas que puede utilizar para convertir m (REXP).


Hay una versión binaria de Rserve en la sección de descargas (www.rforge.net/Rserve/files/ Tengo la versión R 2.13 y Windows XP, por lo que necesito descargar el binario de Windows: Rserve_0.6-8.zip (541.3kb, actualizado : Mié 18 de abril 07:00:45 2012)). Copie el archivo al directorio que contiene R.DLL. Después de instalado Rserve de CRAN

install.packages("Rserve")

en R (tengo RStudio - cosa conveniente: descargar RStudio IDE ). Rserve iniciado es desde dentro de R, simplemente escriba

library(Rserve) Rserve()

Comprobar en el Administrador de tareas: se debe ejecutar Rserve.exe. Después de hacer un proyecto Java en Eclipse, haga un directorio llamado lib bajo ese proyecto. Pegue 2 jar aquí RserveEngine.jar y REngine.jar (www.rforge.net/Rserve/files/). No olvide agregar estos archivos jar en Propiedades su proyecto java. En el nuevo código de clase:

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 } } }


Los rápidos, intentando separar tareas:

  1. Rserve se puede instalar por sí mismo. Empieza por ahi

  2. Rserve tiene clientes de muestra. Trate de que las muestras de Java funcionen.

  3. A partir de ahí, escribe tu nuevo programa.

  4. Eclipse es totalmente opcional. No tienes que usarlo. Si este es un paso más para aprender, considere omitirlo. Una vez que 1 a 3 estén bien, aprenda cómo expresar dependencias de compilación en Eclipse.