当我想通过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中作为字符串给出的数学函数?
答案 0 :(得分:1)
您可以使用数值优化以及符号优化将最大值用于定积分。例如
integrate(2 * x, x)
返回x ^2。您可以定义数值计算的上限和下限(定积分的近似值)。您可以使用几个选项来调用可执行文件的最大值。您可以在文本文件中以及在命令外壳程序上的字符串中发送积分(当然,包括极限和导数在内的任何其他数学运算)。例如
maxima -q -r "integrate(2 * x, x);"
计算括号之间的整数并将结果返回到标准输出。
祝你好运。