有一种“简单”的方法可以做到这一点,也有一种更难的方法来做到这一点。我是一个简单的人,所以我倾向于简单的解决方案:
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 中处理类型是一件相当痛苦的事情。
一个可以为您节省大量时间的技巧是:当您在 rJava 中创建了一个 Java 对象时,您可以通过键入名称、美元符号,然后点击 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$
祝你好运,如果你有特定的障碍,一定要大喊大叫。