我从哪里开始使用rJava?

时间:2011-04-25 18:58:04

标签: r rjava

我不是Java程序员。我编写R和C ++。我有一些我希望包含在R包中的java代码。该计划的基础是:

  1. 从标准输入读取数据。
  2. 运行MCMC链。
  3. 输出到文件。
  4. 我想将它转换为R,我可以从R运行程序。我熟悉Rcpp包,并习惯了它的一些便利。从哪里开始使用rJava包来学习使用此代码。

    具体来说,我有以下问题。

    1. 如何从R传输数据到Java,例如数字向量,因子等
    2. 如何运行类的方法?
    3. 如何在程序包中包含java代码?
    4. rJava文档不是很有帮助。有人有这方面的教程吗?

2 个答案:

答案 0 :(得分:5)

有一种“简单”的方法可以做到这一点,这是一种更难的方法。我是一个简单的人,所以我倾向于简单的解决方案:

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

然后使用任何有意义的R函数读入输出文件。

更难的解决方案是编辑Java代码,使其不从stdin读取,而是传递向量或其他Java对象。我不能真正概括如何改变你的Java代码,但如果最终需要为一个向量提供Java函数,你可以这样做:

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

我总是发现在rJava中处理类型是一种相当大的痛苦,正如你在上面所看到的那样。

为您节省大量时间的一个技巧是:当您在rJava中创建Java对象时,可以通过键入名称,美元符号然后单击选项卡来确定其方法。因此,使用上面创建的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 :(得分:3)

Deducer插件开发文档中对此进行了介绍。虽然它适用于扩展Deducer的包,但有些部分是通用的。

在R中运行java方法: 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是我的项目。