我尝试使用Rserve从java执行一些r代码:
try {
RConnection conn = new RConnection();
conn.eval("write.csv(PoS, file = 'C:/test/PoS.csv',row.names=FALSE)");
} catch (REngineException eR) {
System.err.println("Exception: "+ eR);
throw new TestException("syntax error on eval on R code");
} catch(Exception e){
e.printStackTrace();
throw new TestException("parseAndEval did not generate an exception on syntax error" );
}
我得到了eval失败错误。但我可以在R中成功执行R代码:
write.csv(PoS, file = 'C:/test/PoS.csv',row.names=FALSE)
我确信已在R方面启动Rserve()
,以及其他语句如
conn.eval("iris");
是可能的。
答案 0 :(得分:1)
我已经解决了这个问题。每次建立新的Rconnection时,都需要重新加载矩阵PoS
,或者将其保存在默认的工作空间图像中。
答案 1 :(得分:1)
要获取正确的错误消息,请使用此代替简单的eval
REXP rResponseObject = rServeConnection.parseAndEval("try(eval("+R_COMMAND_OR_SOURCE_FILE_PATH+"),silent=TRUE)");
if (rResponseObject.inherits("try-error")) {
LOGGER.error("R Serve Eval Exception : "+rResponseObject.asString());
}
此记录器打印从R抛出的确切错误。