English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
まず、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の機能を使用することができません!
Rに移動し、以下のコードを入力してRserveを起動します:
library("Rserve") Rserve()
起動が成功すれば、RはRserveのパスを出力します。
まず、先ほどの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
明らかに、結果は正しいですが、それも浮動小数点数なので、出力が見栄えがよくありませんが、データの使用には影響しません。