63938


JRIを使いJava上でRを使うことはできます。例として、以下のようなコードを打ってみました。

[code]

    import org.rosuda.JRI.REXP;
    import org.rosuda.JRI.Rengine;
    
    public class JriTest 
    {
        public static void main(String[] args) 
        {
            Rengine engine = new Rengine(new String[]{"--no-save"}, false, null);
            engine.assign("a", new int[]{49});
            REXP result = engine.eval("sqrt(a)");
            System.out.println(result.asDouble());
            engine.end();
        }
    }
    
[/code]

これは正常に

[code]

    7.0
    
[/code]

と表示されます。

しかし、これを整数として表示した場合に`asInt`にしましたが、`0`と表示されます。原因を教えてほしいです。その時には以下のプログラムを使用しました。

[code]

    import org.rosuda.JRI.REXP;
    import org.rosuda.JRI.Rengine;
    
    public class JriTest 
    {
        public static void main(String[] args) 
        {
            Rengine engine = new Rengine(new String[]{"--no-save"}, false, null);
            engine.assign("a", new int[]{49});
            REXP result = engine.eval("sqrt(a)");
            System.out.println(result.asInt());
            engine.end();
        }
    }
    
[/code]


CC BY-SA 4.0
2020-03-17T12:26:26.330
63935
2020-03-17T12:59:48.443
2020-03-17T12:35:56.930
3060
36217
question
java r
JRIを使った平方根の結果が意図した通りにならない


そういう仕様だからです。  
api仕様に以下の記述があります。

Returns:  
int content or 0 if the REXP is no integer

整数値の値を持たない場合、0を返すとあります。double型のコンテンツは保持しているがintではないため、0を返しているのです。

<https://www.rforge.net/org/docs/org/rosuda/JRI/REXP.html#asInt()>


CC BY-SA 4.0
2020-03-17T12:59:48.443
63938
2020-03-17T12:59:48.443
10174
63935
answer