java - 从java启动R进程

标签 java r process

我正在尝试从 Java 启动 R 进程并重定向标准输入和标准输出。

processBuilder = new ProcessBuilder().command("/usr/bin/R").redirectErrorStream(
            true);
try {
        Process p = processBuilder.start();
        OutputStream stdin = p.getOutputStream();
        InputStream stdout = p.getInputStream();

        BufferedReader reader = new BufferedReader (new InputStreamReader(stdout));
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stdin));
        String line;
        while ((line = reader.readLine ()) != null) {
            System.out.println ("Stdout: " + line);
        }

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

我使用的是 Java 1.6。当程序运行时,我收到以下错误:

标准输出: fatal error :您必须指定“--save”、“--no-save”或“--vanilla”

任何帮助将不胜感激!谢谢!

最佳答案

如果没有这些选项之一,您不能仅使用重定向的标准输入运行 R:

R < foo.R 
Fatal error: you must specify '--save', '--no-save' or '--vanilla'

您希望 R 在完成后保存其工作数据(--save)吗?或者不(--不保存)?您可能会发现 --vanilla 适合您的使用。

--vanilla
          Combine --no-save, --no-restore, --no-site-file, --no-init-file and --no-environ

我不太清楚如何将参数传递给 Java ProcessBuilder,但也许只是:

processBuilder = new ProcessBuilder().command("/usr/bin/R --vanilla").redirectErrorStream(
            true);

或者也许它有设置参数的方法。

关于java - 从java启动R进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20216253/

相关文章:

mysql - 如何判断一个MySQL进程是否卡住了?

java - 何时关闭 HSSFWorkbook 构造函数中使用的 InputStream 对象?

java - 如何让手机 hibernate ?

R:向量元素的全局分配仅在函数内部有效

operating-system - 如何找出进程在 Solaris 上使用的线程数?

c# - Windows 对您可以创建和启动的进程对象的数量有限制吗?

Java - 为什么这个枚举数组的输出为空?

java - 在 Dropwizard 中使用 JDBI Mapper 注释和构造函数

r - 计算连续数字的运行平均值

r - 不要在 2 图例图 (R ggplot2) 中的颜色图例中显示形状