R語言- 實驗報告 - 利用R語言腳本與Java相互調用



一、 實訓內容

  1. 利用R語言對Java項目程序進行調用,本實驗包括利用R語言對java的.java文件進行編譯和執行輸出。
  2. 在Java中調用R語言程序。本實驗通過eclipse編寫Java程序的方式,調用R語言的腳本文件進行傳值運算,並將執行后的結果返回給Java程序。

二、 實驗課題目標

  1. 要求能在R x64 3.6.1程序中進行簡單的工作空間切換功能,以及掌握基本的shell.exec()和system()函數的應用。
  2. 掌握在R語言中進行包的下載和加載的方法,以及啟動Rserve服務的方法。
  3. 掌握R語言與Java相互調用的基本原理和實現方法。

三、 實驗平台

  1、  系統:  Windows 10

         Intel(R) Core(TM)i7-7500U CPU @ 2.70GHz 2.90 GHz

    RAM 8.00GB

  2、工具:

         R x64 3.6.1  

    notepad.exe

    eclipse

    word 2016

四、 實施步驟

(1)、R語言調用Java項目程序

  1、  切換R語言的工作空間。

    首先在C:\目錄下,新建文件夾為workspace,再打開R x64 3.6.1程序,輸入命令:getwd()  ,獲取當前R語言程序的工作空間。輸入如命令:setwd("C:/workspace")  ,將workspace作為R語言的工作目錄,再加以驗證是否切換成功。

圖4-1 切換工作空間


  2、  編寫Java程序。

    在R x64 3.6.1程序中,輸入命令:shell.exec("notepad")  ,打開記事本,編寫相應的Java類文件,並保存到C:\ workspace目錄下,命名為demo.java。

圖4-2  R語言打開notepad

圖4-3 Java代碼示例


  3、  使用R語言編譯Java源文件。

    首先,這里以demo.java文件,雖然只有一個.java格式的文件,但是也可以將其理解為一個簡單的Java項目。在R x64 3.6.1程序中,輸入命令:system("javac demo.java")  ,編譯C:\ workspace目錄下的demo.java文件。

圖4-4 編譯Java文件成功


        當在返回的結果中看到[1] 0  ,則表示已經成功進行了編譯。如圖4-5所示,在C:\ workspace目錄下,已經成功生成了demo.class字節文件,也再次驗證了編譯過程中沒有錯誤。

圖4-5 編譯結果生成文件


  4、  使用R語言運行已經編譯的demo.class文件。在R x64 3.6.1程序中,輸入命令:system("java demo")  ,執行剛編譯好的demo.class字節文件。

圖4-6 執行成功


  很明顯,在返回的結果中顯示:“利用R語言成功調用Java程序!  [1] 0”的字樣,這表示R語言成功調用了經過編譯的Java項目程序。這里雖然是以簡單的單個.java文件做實驗,但即使Java項目文件再多,此方法都可以使用。

(2)、Java中調用讓語言程序

  1、安裝Rserve包。在R x64 3.6.1程序中,輸入命令:install.packages("Rserve") ,下載‘Rserve’程序包。在彈出的mirrors選項中,選擇上海的服務器即可。

圖4-7 Rserve下載成功


  2、加載Rserve包。輸入命令:library(Rserve)  ,加載Rserve程序包。

  3、啟動服務。輸入命令:Rserve()   ,開始啟動Rserve服務。

圖4-8 Rserve服務開啟成功


  4、編寫調用R語言的Java程序。打開eclipse,新建項目為demo。同時,在demo項目工程名稱上右擊,選擇“Build Path”-“Configure Build Path..”。在Libraries

    選項卡中,單擊Add External JARs.. ,加載2、3步驟中下載的REngine.jarRserve.jar文件

圖4-9成功加載Rserve包


  5、  編寫demo類文件。具體示例代碼如下:

package demo;

import org.rosuda.REngine.Rserve.RConnection;

import org.rosuda.REngine.Rserve.RserveException;

import org.rosuda.REngine.REXPMismatchException;;

public class demo {

        public static void main(String[] args) throws REXPMismatchException {

                 RConnection connection = null;

                 System.out.println("平均值");

                 try {

                         connection = new RConnection();

                         String vetor = "c(1,2,3,4)";

                         connection.eval("meanVal<-mean(" + vetor +")");

                         double mean = connection.eval("meanVal").asDouble();

                         System.out.println("the mean of given vector is=" + mean);

                 } catch (RserveException e) {

                         e.printStackTrace();

                 }

                 System.out.println("執行腳本");

                 try {

                         connection.eval("source('c:/ workspace/myAdd.r')");

                         int num1 = 20;

                         int num2 = 10;

                         int sum = connection.eval("myAdd(" + num1 + "," + num2 + ")").asInteger();

                         System.out.println("the sum=" + sum);

                 } catch (RserveException e) {

                         System.out.println(e);

                         e.printStackTrace();

                 }

                 connection.close();

        }

}



  6、  在c:\workspace目錄下新建myAdd.r腳本,腳本內容如圖所示:

圖4-10 myAdd.r腳本


  7、  在eclipse中運行該工程的主類文件,運行結果如圖4-11所示:

圖4-11 執行成功


         明顯,在返回的結果中,有以下信息:“the mean of given vector is=2.5

    執行腳本 the sum=30 ”,這正是Java程序調用R語言執行后,返回的結果。

五、 實驗成果

(1)、R語言調用Java項目程序

     在實驗步驟中,利用R對編譯的demo.class字節文件進行執行時,成功返回如圖5-1所示的內容,即“利用R語言成功調用Java程序!  [1] 0”,表明利用R語言成功運行了Java項目程序。同時,隱含性地表明R語言可以調用Java語言,對.java文件進行編譯和執行。

圖5-1  R語言成功調用Java


(2)、Java中調用R語言程序

    當在eclipse中運行調用R腳本的主類時,在執行反饋信息中,返回了:“the mean of given vector is=2.5 執行腳本 the sum=30 ”。這計算結果,需通過R語言進行,也就是說Java也成功調用了R語言,即調用R語言腳本進行運算。如圖5-2所示:

圖5-2 Java調用R語言程序成功


六、 實訓總結

本實驗的經驗收獲和總結,可分點總結如下:

  1. 在利用Java調用R語言腳本時,需要加載REngine.jar和Rserve.jar兩個jar包。而這兩個jar包來源於,在中R x64 3.6.1使用install.packages("Rserve") 的方式進行下載Rserve。
  2. 在服務端計算機安裝R之后可以直接使用install.packages(“Rserve”)進行安裝。需要使用時在R控制台下加載該包,然后輸入命令Rserve(),開啟服務器就可以供客戶端調用。
  3. 在實現R語言調用java的過程中,也可以使用rjava包,其是一個R語言和Java語言的通信接口,通過底層JNI實現調用,允許R直接調用java對象的方法。而本實驗,利用簡單的函數system()來實現在R語言直接調用Java程序。
  4. 在R語言調用java的時候,也可以進行傳值類型的調用。即:Main函數參數String[] args,它是一個字符串數組,用來接收從命令行輸入的參數。

參數之間用空格隔開,java解釋器會自動處理,把用空格隔開的每一個參數通過args數組傳遞給main方法。參數下標從0開始,args[0]就代表1第一個參數。當然輸入參數之間可以有多個空格,中間的多個空格會被忽略掉。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM