2014-01-27 24 views
0

在我工作的計算機上(運行fedora)R-2.15默認安裝。我下載了R-3.0.2,因爲我需要幾個包,其僅可對R 3從Java調用R - 不同的R版本

當我嘗試使用Runtime.getRuntime().exec(command);從Java調用RSCRIPT與命令是字符串數組{"/path/to/Rscript/3-0" "name/of/script" "...args..."}我得到的錯誤WARNING: ignoring environment value of R_HOME,它說它無法加載所需的軟件包。當我在終端中運行相同的命令時,它運行良好。

通過java調用和調用控制檯之間的區別是什麼?我該如何解決它?

編輯1: 當我運行我的本地安裝的R-3版本,libPaths回報

> .libPaths() 
[1] "/home/<homedir>/.bin/R-3.0.2/library" 

但是,當我從Java調用的RSCRIPT,libPaths回報

[1] "/home/<homedir>/R/x86_64-redhat-linux-gnu-library/2.15" 
[2] "/usr/lib64/R/library"           
[3] "/usr/share/R/library"           
[4] "/home/<homedir>/.bin/R-3.0.2/library" 

這個問題似乎因爲Java會添加任何告訴R從2.15安裝中加載軟件包的環境變量。我怎樣才能防止這個?

編輯2: 當我列出使用System.getenv();方法沒有R - 相關被示出所有環境變量,同樣是這種情況,當我列出在終端使用printenv的環境變量。但是當我在R中調用Sys.getenv時,變量R_HOME,R_LIBS,...被定義。這些是如何定義的?

+0

如果您提供可重複的示例,這將更容易診斷。 R_HOME的價值是什麼?你的腳本包含什麼?每種情況下的庫在哪裏('.libPaths()'返回什麼)?你確定你在這兩種情況下都使用相同版本的R(什麼'版本'返回)? –

+0

我添加了有關libPath的信息。你是對的,這似乎是問題....但我該如何解決它? – Jonas

回答

0

當您加載包時,您可以選擇要查找的庫。例如,當通過Rscript調用腳本時,可以使用

library(rJava, lib.loc = .libPaths()[4]) 
+0

是的,我知道,但我想寫一個Java應用程序,這種解決方法只會在我的電腦上工作,但一般情況下......'libPaths()'應該像'c(「<安裝>的默認值」 , 「<家庭用戶的->/R//」)' – Jonas

+0

也許使用'.Library'或'.Library.site',在'?.libPaths'幫助頁面都描述。你可能會讓用戶決定他們在哪裏安裝和加載他們的軟件包。更好的解決方案是確定何時何地設置這些額外的庫。你必須做一些挖掘。 –