2017-06-06 12 views
0

同じRスクリプトを実行ごとに異なるパラメータで何度も実行する必要があります。私はRの部分を書いて、それは動作します。私は、このプロセスを、Rスクリプトによって変更されたファイルで使用する必要のある他のJavaツールと統合しようとしています。私はJavaからRファイルを実行しようとしています。私は、コマンドラインプロンプトを使用してそれを実行しようとしました:RScript TestR.R(このコマンドは端末で動作します)が動作しませんでした。私はbashファイルからRスクリプトを実行しようとしています。私は上記と同じコマンドを使用していて、bashファイルは他のコマンドを実行できますが、何らかの理由でRファイルを実行しようとすると何も起こりません。私が使用しているjavaコマンドはbashスクリプトからRファイルを実行する

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

私は探している出力の形式がわかりません。現在のところ、これはランタイムエラーなしで実行されます。

UPDATE:私はErrorStreamをチェックすると、それは"Rscript: command not found"

UPDATEを言った:私はあなたがそれを次のように操作を行うことができ、コマンド

+0

.shスクリプトの絶対パスを入れてみてください。また、 "exec()"がうまくいかない場合、プロセスは何らかのステータスを保持する必要があります。 –

+0

他のSOの例(例:[https://stackoverflow.com/questions/3468987/executing-another-application-from-java])を試しましたか? – morecore

+0

Agastya、質問がうまく書式設定されていない場合、質問を整理するのにもう少し時間を費やすことができますか?私たちに物事がどこにあるのかなどのより良い画像を与えるために – alexmherrmann

答えて

0

として"/usr/local/bin/RScript"を使用してそれを考え出し:

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

シンプルなRコードを使用すると、ターミナル、Java内でRScriptを呼び出して、Rコードの出力を解析する方が簡単であることがわかりました。必要な情報を簡単に解析した形式で印刷すると、うまくいく可能性があります。例えば

I引数\pathTo\RScript \pathTo\MyRCode.Rとそうジャワ

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()); } 
} 

ような関数を呼び出すとRコードが生成どんな情報を取得するためにJavaで得ArrayList<String>を解析します。

これを行う方法は他にもあります。あなたは潜在的にRコードからいくつかのJSONファイルを書き出し、これにRコード出力でパスを返すと、Javaはこのファイルを解析して読み込むことができます。または、そこに多くのR-Java interopライブラリの1つを使用することができます(ちょうどGoogle)。

これが役に立った。

関連する問題