#r #rjava
#r #rjava
Вопрос:
Я не программист на Java. Я программирую на R и C . У меня есть некоторый Java-код, который я хочу включить в пакет R. Основы программы заключаются в следующем:
- Считывать данные со стандартного ввода.
- Запустите цепочку MCMC.
- вывод в файл.
Я хочу преобразовать это в R, чтобы я мог запускать программу с R. Я знаком с пакетом Rcpp и привык к некоторым его удобствам. С чего мне начать с пакета rJava, чтобы научиться использовать этот код.
В частности, у меня есть следующие вопросы.
- Как мне перенести данные в java из R, например, числовой вектор, коэффициент и т.д.
- Как мне запустить методы класса?
- Как мне включить 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. Достаточно справедливо. Я добавил заявление о раскрытии.