如何使用rjava调用R中的String [] []

时间:2015-10-19 19:43:11

标签: java r rjava

我正在准备一个我自己没有写过的java代码的R包装器(实际上我并不认识java)。我试图第一次使用rJava,我正在努力让.jcall正确。

以下是我编写包装器的java代码的摘录:

public class Model4R{

[...切...]

public String[][] runModel(String dir, String initFileName, String[] variableNames, int numSims) throws Exception {

[...切...]

dir和initFileName是具有初始条件的目录和文件名的字符串,变量名是我在R:c中编写的字符串列表(" var1",&#34 ; var2"," var3",...),长度可以从1到5。最后,numSim是一个整数。

这是我的包装函数的暂定R代码:

runmodel <- function(dir, inFile, varNames, numSim){

hjw <- .jnew("Model4R")

out <- .jcall(hjw, "[[Ljava/lang/String", "runModel", as.character(dir), as.character(inFile), as.vector(varNames), as.integer(numSim))

return(out)

}

R中的错误是:

Error in .jcall(hjw, "[[Ljava/lang/String", "runModel", as.character(dir),
: method runModel with signature (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;II)[[Ljava/lang/String not found

我怀疑JNI类型对于String [] []是不正确的。无论如何,任何可以指导我找到解决方案的帮助都会受到欢迎!

1 个答案:

答案 0 :(得分:1)

你在字符串[] []的JNI末尾错过了一个分号 - 它应该是"[[Ljava/lang/String;"。另外,我认为您需要在.jarray上致电as.vector而不是varNames。 R错误告诉你rJava认为第三个参数的类是Ljava/lang/String;而不是[Ljava/lang/String;