如何在 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,而无需更改您的脚本代码。
我在 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,而无需更改您的脚本代码。