我需要一遍又一遍地运行相同的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"作为命令解决了这个问题
发布于 2017-06-07 00:21:45
您可以通过以下方式进行操作:
new ProcessBuilder("<absolute-path-to-script>/testbash.sh").start();发布于 2017-06-07 01:03:31
使用简单的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互操作库中的一个(只需google)。
希望这能帮上忙。
https://stackoverflow.com/questions/44394718
复制相似问题