Код интерфейса Java / R (JRI) для обмена данными (например, значения PDF) - PullRequest
1 голос
/ 05 марта 2012

Можно ли сделать несколько простых вычислений в 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 Ответ

1 голос
/ 24 мая 2012

Самый простой способ, который я вижу для реализации этого, - это запустить Java R с использованием таких методов, как , это простой метод или , эти более осторожные методы . R отправит вывод на стандартный вывод, который может быть получен и проанализирован в Java.

См. ?Rscript в R, чтобы увидеть форматирование системного вызова, запускаемого из Java.

Более надежный метод (который я использовал) работает с использованием Java (или любой другой программы, которую вы используете) для сохранения команд и данных R в один или несколько текстовых файлов (возможно, один скрипт. R и один или дополнительные файлы data1.tab), вызовите R для чтения в файле сценария R, в R сохраните результаты в текстовый файл, затем Java (или что-то еще) прочитает результаты и очистит. Недостатком здесь является скорость, конечно. Если вы сможете заставить встроенный метод (stdin / stdout) работать на вас, это будет намного быстрее.

Хотя это не указывает на JRI, было бы довольно легко написать несколько функций на Java (или что-то еще), которые предоставляют такой интерфейс для произвольного кода R и коллекции векторов / матриц Java, которые автоматически передается в сценарий R в формате, указанном для функции R ?dump.

...