Что лучший способ состоит в том, чтобы назвать функциональностью R из Java?
Я ищу быстрый, легкий и надежный способ сделать стандартные 2-е диаграммы рассеяния и гистограммы в R использованием моих JAVA-приложений. Я задавался вопросом, какие пакеты/интерфейсы, которые подошли в быстром поиске Google, будут самыми удобными для использования.
Я с нетерпением жду Ваших предложений!
Использование JRI: http://www.rforge.net/jri/ . Он приходит в комплекте с Rjava, включая некоторые примеры использования.
Очень простой пример будет таким:
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");
}
}
}
Я обнаружил, что весьма эффективным является форкирование R как процесса, присоединение к потокам stdin, stdout и stderr процесса, а также отправка команд R через входной поток. Я использую файловую систему для связи между R и моим Java процессом. Таким образом, я могу иметь несколько процессов R, запущенных из разных потоков Java, и их окружения не конфликтуют друг с другом.