如何在 windows 中从 java 自动启动 rserve

How to start rserve automatically from java in windows

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

library(Rserve)
Rserve()

此 Java 代码将被捆绑为一个可执行文件,那么有没有一种方法可以在代码为 [=20= 时自动调用 Rserve()(在 windows 中) ] 这样我就可以跳过通过 RStudio 启动 Rserve 的手动步骤?

我不确定是否有更简洁的方法来执行此操作,但我解决此问题的方法是从我的 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 ***");
        }
    }
}

https://github.com/yannrichet/rsession 项目正是为您实现的。

虽然看看这个可能会很有趣:https://github.com/subes/invesdwin-context-r 由于它集成了 RSession 并出于性能原因保留了一个 Rserve 连接池,而您无需为此做很多事情。您还可以切换到其他运行时解决方案,如 JRI、RCaller、Renjin,而无需更改您的脚本代码。