我需要为每次运行使用不同的参数反复运行相同的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"
作为命令
答案 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互操作库中的一个(只是谷歌)。
希望这会有所帮助。