2016-10-10 78 views
0

我相对较新使用RJava,并且从我正在尝试的一段代码中获得空指针异常。我怀疑这可能是由于我使用的数据类型,但对如何解决这个问题有点困惑。任何帮助,这将是惊人的。在RJava中与Java一起使用RQuantLib

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

您的项目使用哪些依赖关系jar包含类org.rosuda.JRI.Rengine? – hammerfest

+0

我有JRI.jar,JRIEngine.jar和REngine.jar。 –

+0

版本号? – hammerfest

回答

0

你有一个空的例外,它在RJava发生,你尝试过使用调试器来找出它到底崩溃?

您的代码无法在javaVectornew Rengine中崩溃,因为Java运行时确保它会引发异常,但它不会为空异常。您的代码也不会在您的eval调用中崩溃。还有什么?

您的代码崩溃在engine.eval("Euvol")。函数eval为您提供了一个null,并且您尝试将其转换为double,您无法执行此操作。

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

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

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

enter image description here

第一个参数是一个字符串。在您的代码中,您输入put,这是一个变量但不是字符串。

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