首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从bash脚本执行R文件

从bash脚本执行R文件
EN

Stack Overflow用户
提问于 2017-06-06 23:56:44
回答 2查看 289关注 0票数 0

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

代码语言:javascript
复制
Process proc = Runtime.getRuntime().exec("absolute-path/testbash.sh");

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

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

更新:我使用"/usr/local/bin/RScript"作为命令解决了这个问题

EN

回答 2

Stack Overflow用户

发布于 2017-06-07 00:21:45

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

代码语言:javascript
复制
new ProcessBuilder("<absolute-path-to-script>/testbash.sh").start();
票数 0
EN

Stack Overflow用户

发布于 2017-06-07 01:03:31

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

例如,我将在Java中调用如下所示的函数

代码语言:javascript
复制
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互操作库中的一个(只需google)。

希望这能帮上忙。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44394718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档