【问题标题】:How to call String[][] in R using rjava如何使用 rjava 在 R 中调用 String[][]
【发布时间】:2015-10-19 19:43:10
【问题描述】:

我正在为我自己没有编写的 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[][] 不正确。无论如何,任何可以指导我解决问题的帮助都将受到欢迎!

【问题讨论】:

    标签: java r rjava


    【解决方案1】:

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

    【讨论】:

    • 我已经在 rJava 作者的帮助下解决了这个问题,但是谢谢,这些正是我所缺少的!
    • @franchong:很高兴听到你成功了! :) 以后,记得你可以answer your own questions。这有助于其他用户遇到相同的问题,并阻止潜在的回答者重复您的工作。欢迎来到 Stack Overflow - 希望您喜欢这个网站!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-05
    相关资源
    最近更新 更多