

【質問】  
java r interface（JRI）を使用して、Rの結果を取得しています。  
JRIで返す桁数とRのGUIで返す桁数に差異があり、どこでJRIの桁数を指定したら良いのか分かりません。  
どなたかご教示お願いします。

【事象】  
RのGUI  
1.getOption(digits)を実行して、デフォルトの7であることを確認。  
2.「t.test」コマンドを実行して、tが-1.234567(数字は仮)でなることを確認。  
JRI  
1.evalでRのGUI1.と同じコマンドを実行して、デフォルトの7であることを確認。  
2.evalでRのGUI2.と同じコマンドを実行すると、tが-1.23456789012345(数字は仮)になってしまう。  
✳︎evalでOption(digits=1)を実行しても、上記2.と同じ結果になる。

【その他情報】  
JRI-0.9.7.jar  
spring boot 1.5.19  
java1.8

【ソースコード】  
下記イメージになります。  
必要箇所だけ抜粋しています。

[code]

    ～
    import org.rosuda.JRI.REXP;
    import org.rosuda.JRI.Rengine;
    ～
    
    
    public static void main(String[] args) {
    
        Rengine engine = new Rengine(new String[] { "--no-save" }, false, null);
    
        // dataframe作成
        engine.eval("dataframe <- data.frame(\"group1\"=c(100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,136,127,128,160,158,158,159,159,158,157,156,155))");
    
        // ここでは7が返ってくる。
        engine.eval("getOption(\"digits\")");
        engine.eval("options(digits=5)");
    
        // ここでは5が返ってくる。
        engine.eval("getOption(\"digits\")");
    
        // ★取得結果の桁数がRGUIを実行した際と異なる。
        REXP result = engine.eval("t.test(dataframe$group1, mu=150, alternative=\"less\", data=dataframe)");
    }
    
[/code]


CC BY-SA 4.0
2019-09-02T10:08:32.103
57772
2020-08-04T07:00:35.067
2019-09-03T06:18:51.077
19110
35690
question
java r
java r interfaceの有効桁数


`options`のヘルプを見てみると

> digits: controls the number of digits to print when printing numeric values.

とあります。要するに、`options(digits)`は、数値の表示桁数を制御するものです。あくまで **表示だけ**
で、内部では、十進数で15桁ほどの有効桁数で値を持っています。Rで計算をすれば、`options(digits)`の設定にかかわらず、この有効桁数全部を使って計算しています。

JNIで取ってきているのは、表示結果ではなく、数値なので、`options(digits)`の設定は全く関係ありません。

数値自体の有効桁数を短くしたいのなら、別途、自分で計算する必要があると思います。


CC BY-SA 4.0
2019-09-05T02:16:40.223
57858
2019-09-05T02:16:40.223
3605
57772
answer