1. 程式人生 > >Java與R語言的配置,呼叫

Java與R語言的配置,呼叫

    我是最近才接觸到了R語言,所以用起來有很多的問題,之前只是想單純想用java呼叫到R語言中的一些東西,沒有想到這個事情並不是想象的那麼簡單的。好了,閒話不多說,下面我來說說我在運用R的時候遇上的問題吧。

    第一步,配置R的環境。

    首先,需要下載一個RGUI的東西,這個東西在我的理解上就跟JVM一個樣子,我下載的版本是R 3.1.3(順便說一句,在64位系統下面的32位的RGUI和64位的RGUI都可以使用的,我的電腦系統是64位的)。下載安裝完成,我相信用java的朋友都把java的環境給配置好了,這裡我就不講java的配置了。開啟系統的環境變數,在CLASSPATH中新增D:\R-3.1.3\library\rJava\jri\;(就是你那個rjava包的路徑),然後在path中新增D:\R-3.1.3\bin\x64;D:\R-3.1.3\library\rJava\jri\x64;(我的系統是64位的,32位的把x64換成i386,但是強調一點你在多少位的JVM中執行R就得把R配置成多少位的,這樣子配置會省很多的事情),然後配置R_HOME:D:\R-3.1.3(安裝的路徑)。這樣子配置就算是把R的東西給配置好了。

  第二步,下載rjava的包。

   然後,你需要去下載你對應的rjava包,在RGUI中選程式包,選一個隔你最近的一個城市然後把rjava包下載(有時候下載不起,我在後面可以提供R 3.1.3版本的rjava包,這個包的版本不一樣後面在java中一樣的不能呼叫r)。把下載好的rjava包放在R-3.1.3\library下面(解壓了的資料夾),OK下載好了,位置也放好了,進入下一步。

  第三步,在myeclipse中呼叫R。

  先在rjava包jri中找到3個包,JRI.jar,JRIEngnie.jar和REngine.jar,將這3個包放在自己的java工程中匯入進去。然後在R-3.1.3\library\rJava\jri\examples中找到rtest.java和rtest2.java這兩個檔案,直接複製到自己的java工程中。先說說這兩種連線方式有什麼不同,rtest.java是直接把R的console引在了我們的java控制檯中,而rtest2.java是啟動一個R的一個服務,這兩種方式各有優勢,自己進行選擇,我選擇的是rtest.java的方式。說說這裡會遇到的問題,第一,可能會出現java.library.path的問題,那是因為沒有找到那個庫,可以在VM中給他指向你的那個庫在vm arguments裡新增-

Djava.library.path=.../.../lib;第二,可能會出現什麼不能在32位系統平臺中執行64位的 .dll ,出現這個錯的時候說明你的配置出問題了,你要去檢查你的這個java程式中配置的java是不是64位的,反正就是要把這兩個的位數對應起來就行了。遇到最多的問題就是這兩個了,然後基本技能跑通這個程式。

  第四步,Spring MVC的專案中呼叫語言

  可以說大多數的開發人員最重要的目的就是把這個rjava運用到專案中去。在這個步驟中,我將這個呼叫的方法寫成了一個工具類,但是我遇見了兩個大的問題,第一個,因為在專案是在tomcat中釋出的,所以tomcat在載入的時候沒有找到R的.dll檔案,這個問題可以通過System.out.println(System.getProperty("java.library.path"));

這句話,找到你用的那個tomcat下面載入檔案的目錄,將這個jri.dll放進去,重新執行這個就行了。第二個,是我在寫工具類的時候發生的一個錯誤,我沒有考慮到自己會多次使用到這個工具,從而導致我的電腦啟動了很多個JVM,記憶體溢位,宕機。這個問題,是通過一個單例模式的建立來解決的,我只讓這個Rengine在專案中被例項化一次,這樣子,他就只能被啟動一次,不會導致電腦宕機等等。

  第五步,呼叫R的方法

  這裡呼叫的方法是rengine.eval("xxxxx"),xxx就是你寫的R語言的程式碼。OK,介紹完畢。

最後就是我給大家提供的rjava包和R的安裝包,http://pan.baidu.com/s/1bnynNfp。