我将 JRI 用作 Java 内部统计数据的计算从站。不时需要 R 计算,但不会太频繁。因此,我决定为计算创建一个包装器方法,该方法创建一个新的 REngine 实例并在最后关闭它。第一次调用该方法时,一切都像魅力一样。不幸的是,再次调用它会触发错误“R 已初始化”。
初始化:
private static Rengine createEngineInstance(){
//Initialise R Engine.
Rengine re=new Rengine (new String [] {"--vanilla"}, false, new CallbackListener());
//Wait until REngine-thread is ready
if (!re.waitForR())
{
System.err.println ("Cannot load R. Is the environment variable R_HOME set correctly?");
System.exit(1);
}
return re;
}
包装方法:
public static void performR(){
//Create instance of R engine
Rengine re = createEngineInstance();
//Perform some R operations
re.eval("...");
re.end();
}
显然,REngine 实例没有正确终止。因此,我需要知道:1)是否有机会终止 REngine 并稍后再次创建一个新实例?这如何正确工作?我知道使用 JRI 不可能同时运行多个 R 线程,但这不是我的目标。2)如果不是这种情况,我会使用单例模式创建一个实例。在这种情况下,如何确保程序终止时 R 会话关闭?
非常感谢您的帮助!谢谢!