从R脚本获取null,执行长时间运行的查询

时间:2014-03-13 06:56:35

标签: r rjava jri

我有一个R脚本,它从数据库中检索数据,对它执行一些操作,并使用JRI向我提供我想用Java重写的数据

beforeQuery <- c(1)
query <- {{Query}}
....
queryResult <- fetch(queryResultSet,1)

获得结果的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

我已经通过独立运行R程序验证了queryResult没问题。

我可以做些什么来确保我能够成功地在java程序中获得结果?

1 个答案:

答案 0 :(得分:0)

您需要将re.eval()方法传递给REXP变量,然后将其传输到带有.asString()的Java字符串中,如下所示:

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的数据量有限制,这就是我添加&#34; head&#34的原因;,检查它是否有效。如果是的话,那就把它移除。