Java 中操作 R

首先,在 R 中安裝軟件包 "Rserve" 。

如果你使用的是 RGui 可視化界面,在菜單欄的 程序包 - 安裝程序包 里可以完成這個步驟。如果你使用的是純粹的 R Console,可以使用以下命令:

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

當(dāng) Reserve 安裝完成之后,在 R 的根目錄下會有一個 library 目錄,在其中找到 Rserve/java 目錄,然后會發(fā)現(xiàn)目錄下有兩個文件:REngine.jar 和 Rserve.jar。

這兩個文件就是 Java 中的 R 接口庫。

注意:Java 不能做到脫離 R 系統(tǒng)獨立使用 R 的功能!

第一步 啟動 Reserve

進入 R,輸入以下代碼已啟動 Rserve:

library("Rserve")
Rserve()

如果啟動成功,R 會輸出 Rserve 的路徑。

第二步 編寫 Java 程序

首先導(dǎo)入剛才的兩個 jar 庫。

導(dǎo)入之后,我們認(rèn)識一個關(guān)鍵的類:RConnection, 這個類可以用于連接到 Rserve。

我們現(xiàn)在在 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() 函數(shù)用于令 R 執(zhí)行 R 語句
            // 此處制造了一個 m1 矩陣
            rcon.eval("m1 = matrix(c(1, 2, 3, 4), 2, 2, byrow=TRUE)");
            
            // solve() 函數(shù)在 R 中求 m1 矩陣的逆矩陣
            // 并將結(jié)果返回,asDoubleMatrix 函數(shù)可以將數(shù)據(jù)轉(zhuǎn)換成
            // Java 中的 double 二維數(shù)組以表示矩陣
            double[][] m1 = rcon.eval("solve(m1)").asDoubleMatrix();
            
            // 輸出矩陣的內(nèi)容
            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();
        }
    }
}

執(zhí)行結(jié)果:

-1.9999999999999998    1.0    
1.4999999999999998    -0.49999999999999994

很顯然,結(jié)果是正確的,但畢竟是浮點數(shù),所以打印出來可能有些不好看,不影響對數(shù)據(jù)的使用。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清