English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Java で R を操作

まず、Rで「Rserve」パッケージをインストールします。

RGuiのビジュアルインターフェースを使用している場合、メニューの「パッケージ」から: - パッケージのインストールプロセスでこのステップを完了できます。純粋なR Consoleを使用している場合、以下のコマンドを使用できます:

install.packages("Rserve", repos = "https://mirrors.ustc.edu.cn/CRAN/)

Reserveのインストールが完了すると、Rのルートディレクトリにlibraryディレクトリがあります。その中でRserveを見つけます。/javaディレクトリに移動すると、ディレクトリ下にREngine.jarとRserve.jarの2つのファイルがあります。

これら2つのファイルはJavaのRインターフェースライブラリです。

注意:JavaはRシステムから独立してRの機能を使用することができません!

第1ステップ:Reserveの起動

Rに移動し、以下のコードを入力してRserveを起動します:

library("Rserve")
Rserve()

起動が成功すれば、RはRserveのパスを出力します。

第2ステップ:Javaプログラムの作成

まず、先ほどの2つのjarライブラリをインポートします。

インポート後、重要なクラスを認識します:RConnection、このクラスはRserveに接続するために使用できます。

今、JavaでRを使って逆行列の計算を行います:

import org.rosuda.REngine.Rserve.*;
public class Main {
    public static void main(String[] args) {
        RConnection rcon = null;
        try {
            // Rserve との接続を確立
            rcon = new RConnection("127.0.0.1");
            
            // eval() 関数は R で R 文を実行
            // ここに m1 マトリックス
            rcon.eval("m1 = matrix(c(1, 2, 3, 4), 2, 2,
            
            // , byrow=TRUE)1 します。solve() 関数は R で m
            // し、結果を返します。asDoubleMatrix 関数はデータをマトリックスに変換
            // Java の double 二次元配列でマトリックスを表現
            double[][] m1 = rcon.eval("solve(m1).asDoubleMatrix();
            
            // マトリックスの内容を出力
            for (int i = 0; i < m1.length; i++) {
                for (int j = 0; j < m1[0].length; j++)
                    System.out.print(m1[i][j] + "\t");
                System.out.println();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (rcon != null) rcon.close();
        }
    }
}

実行結果:

-1.9999999999999998    1.0    
1.4999999999999998    -0.49999999999999994

明らかに、結果は正しいですが、それも浮動小数点数なので、出力が見栄えがよくありませんが、データの使用には影響しません。