从bash脚本执行R文件

时间:2017-06-06 15:56:44

标签: java r bash

我需要为每次运行使用不同的参数反复运行相同的R脚本。我写了R部分,它的确有效。我正在尝试将此过程与我编写的其他一些Java工具集成在一起,这些工具需要在R脚本更改的文件上使用。因此我试图从Java运行我的R文件。我试图使用命令行提示符运行它:RScript TestR.R(此命令在终端中工作),但这不起作用。因此,我正在尝试从bash文件运行我的R脚本。我使用与上面相同的命令,我的bash文件可以执行其他命令,但由于某种原因,当我尝试运行R文件时没有任何反应。我正在使用的java命令是

Process proc = Runtime.getRuntime().exec("absolute-path/testbash.sh");

我不确定要查找的输出格式。目前,这运行没有任何运行时错误。

更新:当我检查ErrorStream时,它说"Rscript: command not found"

更新:我通过使用"/usr/local/bin/RScript"作为命令

来解决这个问题

2 个答案:

答案 0 :(得分:0)

您可以通过以下方式执行此操作:

new ProcessBuilder("<absolute-path-to-script>/testbash.sh").start();

答案 1 :(得分:0)

使用简单的R代码,我发现在Java中从终端调用RScript更容易,并解析R代码的输出。如果您以易于解析的格式打印所需的任何信息,这可以很好地工作。

例如,我将在Java中调用类似函数

private ArrayList<String> runCommand(String command)
{
    try
    {
        Runtime rt = Runtime.getRuntime();
        Process proc = rt.exec(command);

        BufferedReader stdInput = new BufferedReader(
            new InputStreamReader(proc.getInputStream()));

        String lastReadLine = null;
        ArrayList<String> output = new ArrayList<>();
        while((lastReadLine = stdInput.readLine()) != null)
            output.add(lastReadLine);
        return output;
    }
    catch(Exception ex) { throw new RuntimeException("[RunCommand]: Exception when trying to execute command: " + ex.getMessage()); }
}

使用参数\pathTo\RScript \pathTo\MyRCode.R并在Java中解析生成的ArrayList<String>以获取R代码生成的任何信息。

还有其他方法可以做到这一点。您可能会从R代码中写出一些JSON文件,并在R代码输出中返回一个路径,然后Java可以解析并读取该文件。或者您可以使用众多R-Java互操作库中的一个(只是谷歌)。

希望这会有所帮助。