2

RCaller を介してコードを実行したい場合、Java は次の例外をスローします。

Exception in thread "JavaFX Application Thread" com.github.rcaller.exception.ExecutionException: Can not send the source code to R file due to: java.io.IOException: The pipe is being closed Maximum number of retries exceeded.

これは私のコードです:

protected void initialize(){
    if (!System.getProperty("os.name").contains("Windows")){
        rscript = rscript.replace("\\","/");
        r = r.replace("\\","/");
    }
    out.println(rscript + "\n" + r);
    caller = RCaller.create(RCallerOptions.create(rscript,r,FailurePolicy.RETRY_1,500,500,RProcessStartUpOptions.create()));
}

private void calculateIntegral(String newValue){
    RCode rCode = RCode.create();
    rCode.addRCode("func <- function (x) (" + newValue + ")");
    rCode.addRCode("x <- integrate(func," + from.getValue() + "," + to.getValue() + ")");
    caller.setRCode(rCode);
    caller.runAndReturnResult("x"); <- This is where I get the Exception
    value.setText(String.valueOf(caller.getParser().getAsDoubleArray("x")[0]));
}

Rのインストールを確認しましたが、問題ないようです

編集:
rscript と r を "\"" で次のように連結してみました:

rscript =  "\"" + rscript +  "\"";
r =  "\"" + r +  "\"";

そして、それもうまくいきませんでした:(

編集2:次
のようなプロットを生成しようとすると:

rCode.addRCode("plot(func)");

Java は引き続き例外をスローしますが、内部にプロットを含む pdf も生成します

また...私はゆっくりとRをあきらめています... Javaで文字列として与えられた数学関数から積分を計算する別の方法はありますか?

4

1 に答える 1