rJava:将2维字符串数组作为函数输入

时间:2016-03-21 20:50:49

标签: r rjava

在我的java类中,我编写了3个测试函数,如下所示:

public void try2dStringArray(String[][] arr) {
    System.out.println(arr.length);

}
public void try1dStringArray(String[] arr) {
    System.out.println(arr.length);

}
public void try2dDoubleArray(double[][] arr) {
    System.out.println(arr.length);

}

在R部分,我运行以下内容:

library(rJava)
.jinit('/path/to/my/jar/app.jar')
obj <- .jnew('somepackage.Someclass')
doubleMatrix <- rbind(c(1,2), c(3,4))
stringMatrix <- rbind(c('a', 'b'), c('c', 'd'))
stringArray <- c('a', 'b')

result <- .jcall(obj,"V","try1dStringArray",
                 .jarray(stringArray, dispatch = T))
result <- .jcall(obj,"V","try2dDoubleArray",
                 .jarray(doubleMatrix, dispatch = T))
result <- .jcall(obj,"V","try2dStringArray",
                 .jarray(stringMatrix, dispatch = T))

只有最后一个错误出现:

Error in .jcall(obj, "V", "try2dStringArray", .jarray(stringMatrix, dispatch = T)) : 
  method try2dStringArray with signature ([[Ljava.lang.String;)V not found

在这种情况下,String[][]double[][]的区别如何?如何解决?

1 个答案:

答案 0 :(得分:2)

起初,我认为.jarray无法从String[][] R character正确创建matrix java数组。我错了,运行OP中的代码时收到的错误证明了这一点:

.jcall(obj,"V","try2dStringArray",.jarray(stringMatrix, dispatch = T))
#Error in .jcall(obj, "V", "try2dStringArray", .jarray(stringMatrix, dispatch = T)) : 
#method try2dStringArray with signature ([[Ljava.lang.String;)V not found

可以看出,签名(([[Ljava.lang.String;)V)似乎是正确的(双[[应该说我们实际上传递了一个String[][]对象),但由于某种原因{{1}找不到它。

但是,在.jcall方法中,也可以使用语法rJava调用方法,并以这种方式正确调用方法obj$method(arg1,arg2,...)

try2dStringArray