如何从Windows

时间:2017-05-29 16:18:34

标签: java r eclipse rserve

我在eclipse中创建了一个java应用程序。该应用程序使用Rserve包连接到R并运行r脚本。在运行我的应用程序之前,我必须从Rstudio中启动rserve,如下所示:

library(Rserve)
Rserve()

这个Java代码将捆绑为可执行文件,因此有一种方法可以在代码运行后自动调用Rserve()(在Windows中),这样我就可以跳过启动Rserve的手动步骤RStudio?

2 个答案:

答案 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,而无需更改脚本代码。