在Java中使用RQuantLib和RJava

时间:2016-10-10 11:11:16

标签: java r rjava

我使用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)

1 个答案:

答案 0 :(得分:0)

你有一个空的异常并且它发生在jQuery.extend(true, {}, this)中,你试过使用调试器找出崩溃的确切位置吗?

您的代码无法在RJavajavaVector中崩溃,因为Java运行时会保证它会抛出异常,但它不会成为空异常。您的代码也无法在new Rengine来电中崩溃。还有什么呢?

您的代码在eval中崩溃了。函数engine.eval("Euvol")给你一个null,你试图强制转换为double,你不能这样做。

现在,你应该想一想你的R引擎为什么会给你一个null异常。有几种可能性:

1 :您没有安装QuantLib。如果未正确安装QuantLib,RQuantLib将无法正常工作。更糟糕的是,您甚至可能没有安装RQuantLib。

2 :您对RQuanlib的输入不正确。阅读文档:

enter image description here

第一个参数是 STRING 。在您提供eval的代码中,这是变量,但不是字符串。

R向量put无效。尝试将其复制到R中,您将收到错误。