在 Java 中使用 RQuantLib 与 RJava

Using RQuantLib in Java with 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)

您有一个空异常,它发生在 RJava,您是否尝试使用调试器找出它崩溃的确切位置?

您的代码不会在 javaVectornew Rengine 中崩溃,因为 Java 运行时保证它会抛出异常,但不会是空异常。您的代码也不会在 eval 调用中崩溃。那还有什么?

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

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

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

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

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

R 向量 c(put, 0.0425, 66.592, 66.00, 0, 0.068, 0.072, 0.1) 无效。尝试将它复制到你的 R 中,你会得到一个错误。