2014-01-27 26 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'帮助页面都描述。你可能会让用户决定他们在哪里安装和加载他们的软件包。更好的解决方案是确定何时何地设置这些额外的库。你必须做一些挖掘。 –