我正在为我自己编写的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", "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[][] 不正确。无论如何,任何可以指导我找到解决方案的帮助都将受到欢迎!
最佳答案
您在 String[][] 的 JNI 末尾缺少一个分号 - 它应该是 "[[Ljava/lang/String;"
。另外,我认为您需要在 varNames
上调用 .jarray
而不是 as.vector
。 R 错误告诉您 rJava 认为第三个参数的类是 Ljava/lang/String;
而不是 [Ljava/lang/String;
。
关于java - 如何使用 rjava 在 R 中调用 String[][],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33222596/