我在eclipse中创建了一个java应用程序。该应用程序使用Rserve包连接到R并运行r脚本。在运行我的应用程序之前,我必须从Rstudio中启动rserve,如下所示:
library(Rserve)
Rserve()
这个Java代码将捆绑为可执行文件,因此有一种方法可以在代码运行后自动调用Rserve()(在Windows中),这样我就可以跳过启动Rserve的手动步骤RStudio?
答案 0 :(得分:1)
我不确定是否有更简洁的方法可以做到这一点,但我解决这个问题的方法是从我的java程序中启动它的控制台风格。为此,您必须将路径放在系统路径中的R可执行文件中:
public Process rserve = null;
public static void startRServer() throws InterruptedException, IOException {
// check the runtime environment to see if there's an active Rserve running
String existingRserve = "";
try {
Process p = Runtime.getRuntime().exec("tasklist /FI \"IMAGENAME eq Rserve.exe\"");
p.waitFor();
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
existingRserve = in.readLine();
} catch(IOException e){}
if(rserve == null || existingRserve.contains("No tasks are running")) {
// start and rserve if we don't have one for this run yet,
// or if it has unexpectedly failed since we last used it
try {
rserve = Runtime.getRuntime().exec("Rscript -e \"library(Rserve); Rserve()\"");
rserve.waitFor();
} catch (IOException e) {
System.out.print("*** R Error: Unable to start the R server ***");
}
}
}
答案 1 :(得分:1)
https://github.com/yannrichet/rsession项目完全符合您的要求。
虽然查看此内容可能会很有趣:https://github.com/subes/invesdwin-context-r 因为它集成了RSession并且出于性能原因保留了一组Rserve连接,而不必为此做很多事情。您还可以切换到其他运行时解决方案,如JRI,RCaller,Renjin,而无需更改脚本代码。