2015-10-19 36 views
0

我正在爲一個java代碼準備一個R封裝器,我沒有自己寫(並且實際上我不知道java)。我正嘗試第一次使用rJava,並且我正在努力獲得.jcall的權利。如何使用rjava在R中調用String [] []

這裏是我編寫一個包裝中的Java代碼的提取物:

public class Model4R{ 

[...切...]

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

[... ...切]

dir和initFileName是具有初始條件的目錄和文件名的字符串,變量名是字符串列表,我將在R中這樣寫:c(「var1」,「var2」,「var3 「,...),並且可以是fr的長度嗡一到五。最後,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

你在String [] []的JNI結尾缺少一個分號 - 它應該是"[[Ljava/lang/String;"。另外,我認爲你需要致電.jarray而不是as.vectorvarNames。 R錯誤告訴你rJava認爲第三個參數的類是Ljava/lang/String;而不是[Ljava/lang/String;

+0

在rJava作者的幫助下,我已經解決了這個問題,但是謝謝,這確實是我錯過的要點! – franchong

+0

@franchong:很高興聽到你有工作! :)在將來,請記住你可以[回答你自己的問題](https://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/)。這有助於解決相同問題的其他用戶,並阻止潛在的答覆者重複您的工作。歡迎來到Stack Overflow - 我希望你喜歡這個網站! –