RCaller抛出java.io.IOException / ExecutionException

时间:2017-06-05 14:28:41

标签: java r math integral rcaller

当我想通过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中作为字符串给出的数学函数?

1 个答案:

答案 0 :(得分:1)

您可以使用数值优化以及符号优化将最大值用于定积分。例如

integrate(2 * x, x)

返回x ^2。您可以定义数值计算的上限和下限(定积分的近似值)。您可以使用几个选项来调用可执行文件的最大值。您可以在文本文件中以及在命令外壳程序上的字符串中发送积分(当然,包括极限和导数在内的任何其他数学运算)。例如

maxima -q -r "integrate(2 * x, x);"

计算括号之间的整数并将结果返回到标准输出。

祝你好运。