我使用RJava相对较新,并且从我尝试的一段代码中得到了一个空指针异常。我怀疑这可能是由于我使用的数据类型,但我对如何解决这个问题感到有点困惑。对此的任何帮助都会很棒。
import org.rosuda.JRI.Rengine;
public class RJava {
public static void main(String a[]) {
String javaVector = "c(put, 0.0425, 66.592, 66.00, 0, 0.068, 0.072, 0.1)";
Rengine engine = new Rengine(new String[] { "--no-save" }, false, null);
engine.eval("library(RQuantLib)");
engine.eval("rVector=" + javaVector);
engine.eval("Euvol=EuropeanOptionImpliedVolatility(rVector)");
double vol = engine.eval("Euvol").asDouble();
System.out.println("Vol=" + vol);
}
}
Exception in thread "main" java.lang.NullPointerException
at co.karan.RJava.main(RJava.java:49)
答案 0 :(得分:0)
你有一个空的异常并且它发生在jQuery.extend(true, {}, this)
中,你试过使用调试器找出崩溃的确切位置吗?
您的代码无法在RJava
和javaVector
中崩溃,因为Java运行时会保证它会抛出异常,但它不会成为空异常。您的代码也无法在new Rengine
来电中崩溃。还有什么呢?
您的代码在eval
中崩溃了。函数engine.eval("Euvol")
给你一个null,你试图强制转换为double,你不能这样做。
现在,你应该想一想你的R引擎为什么会给你一个null异常。有几种可能性:
1 :您没有安装QuantLib。如果未正确安装QuantLib,RQuantLib将无法正常工作。更糟糕的是,您甚至可能没有安装RQuantLib。
2 :您对RQuanlib的输入不正确。阅读文档:
第一个参数是 STRING 。在您提供eval
的代码中,这是变量,但不是字符串。
R向量put
无效。尝试将其复制到R中,您将收到错误。