2016-10-10 13 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

あなたがnullの例外があり、それがRJavaに起こる、あなたはそれがクラッシュした場所を正確に把握するためにデバッガを使用しようとしたがありますか?

javaVectornew Rengineでコードがクラッシュすることはありません。Javaランタイムでは例外が発生することが保証されていますが、null例外ではないためです。あなたのコードは、evalの呼び出しでもクラッシュすることはありません。じゃあ他には?

コードは、engine.eval("Euvol")でクラッシュします。関数evalはnullを返し、2倍にキャストしようとしますが、これはできません。

ここで、あなたのRエンジンがあなたにnull例外を与えた理由を考えるべきです。いくつかの可能性があります:

:QuantLibがインストールされていません。 QuantLibが正しくインストールされていないと、RQuantLibは動作しません。さらに悪いことに、RQuantLibがインストールされていないことさえあります。

:あなたのRQuanlibへの入力が正しくありません。ドキュメントを読む:

enter image description here

最初の引数はSTRINGです。あなたのコードでputを与えました。これはの変数ですが、文字列ではありません。

Rベクターc(put, 0.0425, 66.592, 66.00, 0, 0.068, 0.072, 0.1)は無効です。 Rにコピーしてください。エラーが発生します。

関連する問題