С чего мне начать с rJava?

#r #rjava

#r #rjava

Вопрос:

Я не программист на Java. Я программирую на R и C . У меня есть некоторый Java-код, который я хочу включить в пакет R. Основы программы заключаются в следующем:

  1. Считывать данные со стандартного ввода.
  2. Запустите цепочку MCMC.
  3. вывод в файл.

Я хочу преобразовать это в R, чтобы я мог запускать программу с R. Я знаком с пакетом Rcpp и привык к некоторым его удобствам. С чего мне начать с пакета rJava, чтобы научиться использовать этот код.

В частности, у меня есть следующие вопросы.

  1. Как мне перенести данные в java из R, например, числовой вектор, коэффициент и т.д.
  2. Как мне запустить методы класса?
  3. Как мне включить Java-код в пакет?

Документация rJava не очень полезна. У кого-нибудь есть руководство по этому вопросу?

Комментарии:

1. Привет, Эндрю — на странице rJava в CRAN перечислены несколько десятков пакетов, использующих его. Может быть, вы можете ткнуть в них палкой, чтобы посмотреть, как они что-то делают?

2. У @JDLong есть хороший пример расчета солнечной радиации на поверхности Земли. Может быть, он может присоединиться и указать вам на исходный код (возможно, найдите «cmastication» на github.

Ответ №1:

Есть «простой» способ сделать это и несколько более сложный способ сделать это. Я простой человек, поэтому склоняюсь к простому решению:

 myCommand <- paste("/path/to/java", argument1, argument2, sep=" ")
system(shQuote(myCommand))
  

Затем прочитайте в выходном файле, используя любую функцию R, которая имеет смысл.

Несколько более сложным решением является редактирование вашего Java-кода, чтобы он не считывался из stdin, а передавался vector или другим объектом Java. Я не могу действительно обобщать о том, как изменить ваш Java-код, но если Java-функции в конечном итоге необходимо передать вектор, вы бы сделали это примерно так:

 .jinit()
v <- .jnew("java/util/Vector")
rVector <- as.character(1:10)
addToV <- function( item ){
  v$add( item )
}
sapply(rVector, addToV)
  

Я всегда нахожу, что работа с типами в rJava является значительной проблемой, как вы можете видеть выше.

Один совет, который значительно сэкономит вам время, заключается в следующем: когда у вас есть объект Java, созданный в rJava, вы можете выяснить его методы, введя имя, знак доллара, а затем нажав tab. Итак, используя созданный выше объект v, введите «v $», и вы должны получить это:

 1> v$
v$add(                 v$hashCode()           v$contains(            v$size()               v$elementAt(           v$capacity()           v$containsAll(         v$firstElement()       v$removeElement(       v$iterator()           v$wait()
v$get(                 v$clone()              v$isEmpty()            v$toArray()            v$remove(              v$ensureCapacity(      v$removeAll(           v$insertElementAt(     v$removeElementAt(     v$listIterator()       v$getClass()
v$equals(              v$indexOf(             v$lastIndexOf(         v$toArray(             v$elements()           v$trimToSize()         v$retainAll(           v$lastElement()        v$setElementAt(        v$listIterator(        v$notify()
v$toString()           v$clear()              v$addAll(              v$addElement(          v$set(                 v$subList(             v$copyInto(            v$removeAllElements()  v$setSize(             v$wait(                v$notifyAll()
1> v$
  

Удачи, и будьте уверены, и кричите, если у вас есть конкретные проблемы.

Комментарии:

1. Спасибо, это должно дать мне то, что мне нужно, чтобы наладить работу.

Ответ №2:

Это описано в документе по разработке подключаемого модуля Deducer. Хотя он ориентирован на пакеты, расширяющие Deducer, некоторые разделы являются общими.

Запуск методов Java в R:http://www.deducer.org/pmwiki/pmwiki.php?n=Main .Разработка #wwjoir

Перенос объектов R в java и создание пакета с кодом Java: http://www.deducer.org/pmwiki/pmwiki.php?n=Main .Разработка #suaptijc

Полное раскрытие: Deducer — это мой проект.

Комментарии:

1. Поскольку у вас есть ссылка www.deducer.org в своем профиле вы также должны указать в своем ответе, что вы являетесь аффилированным лицом продукта (ов) / решения (ов), которые вы предлагаете.

2. Достаточно справедливо. Я добавил заявление о раскрытии.