2011-09-17 13 views
49

Tengo una aplicación de Java que necesita realizar una regresión de mínimos cuadrados parciales. Parece que no hay implementaciones de Java de PLSR por ahí. Weka podría haber tenido algo así en algún momento, pero ya no está en la API. Por otro lado, he encontrado una buena implementación R, que tiene una ventaja adicional. Fue utilizado por las personas cuyo resultado quiero replicar, lo que significa que hay menos posibilidades de que las cosas salgan mal debido a las diferencias en la forma en que se implementa PLSR.Integración Java-R?

La pregunta es: ¿existe un paquete lo suficientemente bueno (y fácil de usar) que permita a Java llamar a R, pasar algunos parámetros a una función y leer los resultados? Mi otra opción es hacer que Java genere R en un Proceso y luego monitorearlo. Los datos se leerían y escribirían en el disco. ¿Cuál de los dos recomendarías? ¿Me estoy perdiendo la tercera opción obvia?

+0

Aquí está el tutorial lo suficientemente bueno para integrar la I + Java . http://codophile.com/2015/04/15/how-to-integrate-r-with-java-using-rjava/ –

Respuesta

47

he utilizado con éxito dos alternativas en el pasado.

JRI

  • Pros: probablemente mejor rendimiento.
  • Contras: tiene que configurar algunas variables de entorno y bibliotecas, diferentes en Win/UNIX.

RServe

  • Pros: fácil de instalar, no es necesario para inicializar R o enlace contra cualquier biblioteca R, se puede ejecutar en un equipo diferente.
  • Contras: basada en TCP/IP (el servidor está en funcionamiento), no hay devoluciones de llamada de R.

Otras alternativas nunca he utilizado: RCaller

+0

Eche un vistazo a esto: https://github.com/subes/invesdwin-context-r Proporciona una API simple de Java con múltiples implementaciones de tiempo de ejecución disponibles para elegir. Por lo tanto, escribe tus sripts una vez y elige en el tiempo de ejecución qué integración usar. Como cada uno tiene sus propios beneficios/inconvenientes según lo declarado por Guido. – subes

1

Hace un tiempo tuve una necesidad similar y probé algunas de las interfaces a R. La que encontré mejor para mis necesidades (windows, C#) fue Rserve que creo que está escrita en Java. Mi única queja es que no era de 64 bits. Usé un cliente simple escrito en C# y funcionó muy bien. Estoy seguro de que el cliente de Java es mucho mejor.

10

Ha habido obras de Duncan Temple Lang: http://rss.acs.unt.edu/Rdoc/library/SJava/Docs/RFromJava.pdf.

Supongo que la solución más robusta sería JGR. Los desarrolladores de JGR tienen una lista de correo, y la Stats-Rosudamailing list Archive indica la lista permanece activo a partir de 2013.

There is also code that has been put up at Googlecode, con un ejemplo aquí: http://stdioe.blogspot.com/2011/07/rcaller-20-calling-r-from-java.html

+1

JGR es la GUI que, si no me equivoco, usa JRI debajo de las carátulas. –

+0

Lo he visto descrito como un método para llamar a R desde Java por los desarrolladores de JGR –

3

JRI tiene tanto bajo nivel y Interfaz de alto nivel para Call R desde Java. Hay un complemento eclipse que ayuda a configurar el entorno R Java en http://www.studytrails.com/RJava-Eclipse-Plugin/.

+0

Seguí todos los pasos pero no pude hacer el último: Agregar JRI_DIR. Según uno de ellos, "en realidad no tiene que ver el JRI_DIR, simplemente agrega los * .jar-s de [rjava]/jri/y funciona", pero no puedo hacerlo. ¿Qué significa esto? –

8

Esta es una vieja pregunta ..pero para cualquiera que esté navegando por aquí que todavía esté interesado: escribí un artículo de blog que proporciona un ejemplo detallado de cómo usar JRI/rjava (un puente basado en JNI) para hacer este tipo de cosas (el cómo hacerlo se centra en el desarrollo de Linux ambientes). También comparo y contraste enfoques alternativos para hacer cosas 'mathy' llamando a R y frameworks similares.

URL>http://buildlackey.com/integrating-r-and-java-with-jrirjava-a-jni-based-bridge/

5

Renjin es una alternativa que permite no sólo la integración de los muchos paquetes de R también una comunicación fácil que va entre Java y R a través de objetos:

http://www.renjin.org/