R desde dentro de Java

¿Cuál es la mejor manera de llamar a la funcionalidad R desde Java?

Estoy buscando una manera rápida, fácil y confiable de hacer diagtwigs de dispersión 2D estándares e histogtwigs en R usando mis aplicaciones Java. Me preguntaba qué paquetes / interfaces surgieron en una búsqueda rápida de Google serían más convenientes de usar.

¡Espero sus sugerencias!

Use JRI: http://www.rforge.net/JRI/ . Viene incluido con rJava, incluidos algunos ejemplos de uso.

Un ejemplo muy simple sería como esto:

import java.io.*; import java.awt.Frame; import java.util.Enumeration; import org.rosuda.JRI.Rengine; import org.rosuda.JRI.REXP; import org.rosuda.JRI.RVector; import org.rosuda.JRI.RMainLoopCallbacks; public class rJavaTest { public static void main(String[] args) { Rengine re=new Rengine(args, false, new TextConsole()); REXP x; re.eval("print(1:10/3)"); System.out.println(x=re.eval("iris")); RVector v = x.asVector(); if (v.getNames()!=null) { System.out.println("has names:"); for (Enumeration e = v.getNames().elements() ; e.hasMoreElements() ;) { System.out.println(e.nextElement()); } } if (true) { System.out.println("Now the console is yours ... have fun"); re.startMainLoop(); } else { re.end(); System.out.println("end"); } } } 

Hay algo nuevo llamado http://www.renjin.org/

Una cosa que me gusta más de JRI es la implementación, mientras que jri requiere que los usuarios de la aplicación descarguen R, renjin no, y usa solo la JVM para ejecutar.

He descubierto que bifurcar R como un proceso, unirme a las secuencias stdin, stdout y stderr del proceso, y enviar comandos R a través del flujo de entrada para que sea bastante efectivo. Utilizo el sistema de archivos para comunicarme entre R y mi proceso de Java. De esta forma, puedo tener múltiples procesos R ejecutándose desde diferentes subprocesos en Java y sus entornos no entran en conflicto entre sí.

Paquetes o bibliotecas para R con Java

Llamar a R desde Java

  • RCaller
  • Rserve
  • JRI
  • Rsession
  • Renjin

Llamar a Java desde R

  • rJava