2014-03-13 43 views
0

我的R腳本,從數據庫中檢索數據,執行它的一些操作,並提供我的數據我想用JRI獲得來自R腳本空執行長時間運行的查詢

beforeQuery <- c(1) 
query <- {{Query}} 
.... 
queryResult <- fetch(queryResultSet,1) 
在Java中以檢索

的Java代碼得到結果:

re.eval("source('" + location + "')"); //location of the R script 
System.out.println(re.eval("beforeQuery").asString()); //works 
System.out.println(re.eval("queryResult$column").asString()); //returns null 

我覈實,QueryResult中是運行R程序獨立沒關係。

我該怎麼做才能確保我可以成功獲取java程序中的結果?

回答

0

需要將re.eval()方法通過成REXP變量,然後將其轉移到一個Java字符串.asString(),像:

REXP test = re.eval("head(queryResult$column,100)"); 
    String [] output = test.asString(); 
for (i = 0; i < test.length ; i++) {System.out.println(output[i]);} 

注意,如在JRI and ARIMA integration提到的,對於可以從R傳遞給Java的數據量有限制,這就是爲什麼我添加了「head」,以檢查它是否有效。如果是這樣,那就把它刪除。