Код интерфейса Java/R (JRI) для обмена данными (например, значения PDF)
Можно ли сделать несколько простых вычислений в R с помощью ввода из Java-программы и получить ответ в эту Java-программу?
Типичным примером такого обмена данными между Java и R является вычисление функции распределения вероятностей (PDF) массива чисел (скажем, Java). double[]
массив).
Внутри класса Java массив должен передаваться в R через интерфейс Java/R (JRI), и результатом вычисления должен быть не графический график (как JRI сделал бы в JFrame), а другой массив значений (или аналогичная структура данных Java), которую можно извлечь из того же класса Java для дальнейшей обработки.
Часть назначения JRI будет выглядеть примерно так:
Rengine re=new Rengine(new String [] {"--vanilla"}, false, null);
if (!re.waitForR())
{
System.out.println ("Cannot load R");
return;
}
double[] values = ... // The data values
re.assign("data", values);
Итак, вопрос в том, data
Приведенный выше массив может быть обработан в R, как уже описано (например, для PDF), с результатами, возвращенными обратно в вызывающий класс Java, вместо графического построения графика R.
Возможно ли это, и если да, есть ли пример кода, демонстрирующего это?
1 ответ
Самый простой метод, который я вижу для реализации этого, - это запустить Java R с использованием таких методов, как этот простой метод или эти более осторожные методы. R отправит вывод на стандартный вывод, который может быть получен и проанализирован в Java.
Увидеть ?Rscript
в R, чтобы увидеть форматирование системного вызова, запускаемого из Java.
Более надежный метод (который я использовал) работает с использованием Java (или любой другой программы, которую вы используете) для сохранения команд и данных R в один или несколько текстовых файлов (возможно, один script.R и один или несколько data1). файлы вкладок), вызовите чтение R в файле сценария R, в R сохраните результаты в текстовый файл, затем Java (или что-то еще) прочитает результаты и очистит. Недостатком здесь является скорость, конечно. Если вы сможете заставить встроенный метод (stdin/stdout) работать на вас, это будет намного быстрее.
Хотя это не указывает на JRI, было бы довольно легко написать несколько функций на Java (или что-то еще), которые предоставляют такой интерфейс для произвольного кода R и коллекции векторов / матриц Java, которые автоматически передаются в R в сценарии, используя формат, указанный для функции R ?dump
,