С чего начать работу с rJava?

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

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

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

Конкретно у меня есть следующие вопросы.

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

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


person Andrew Redd    schedule 25.04.2011    source источник
comment
Привет, Эндрю. На странице rJava в CRAN перечислены несколько десятков пакетов, использующих его. Может быть, вы можете ткнуть в них палкой, чтобы посмотреть, как они что-то делают?   -  person Dirk Eddelbuettel    schedule 26.04.2011
comment
У @JDLong есть хороший пример расчета солнечной радиации на поверхности Земли. Может быть, он сможет скинуться и указать вам исходный код (может быть, поищите cmastication на github.   -  person Roman Luštrik    schedule 26.04.2011


Ответы (2)


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

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

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

Несколько более сложное решение состоит в том, чтобы отредактировать ваш код Java, чтобы он не читался из стандартного ввода, а передавался вектору или другому объекту 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$

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

person JD Long    schedule 26.04.2011
comment
Спасибо, это должно дать мне то, что мне нужно, чтобы все заработало. - person Andrew Redd; 27.04.2011

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

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

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

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

person Ian Fellows    schedule 25.04.2011
comment
Поскольку в вашем профиле есть ссылка www.deducer.org, вы также должны указать в своем ответе, что вы связаны с продуктом (ами) / решением (ами), которые вы предлагаете. - person Bart Kiers; 26.04.2011
comment
Справедливо. Я добавил заявление о раскрытии информации. - person Ian Fellows; 26.04.2011