【问题标题】:Call R from java - different R version从java调用R - 不同的R版本
【发布时间】:2014-01-27 16:47:38
【问题描述】:

在我工作的计算机(运行 fedora)上,默认安装 R-2.15。我下载了 R-3.0.2,因为我需要几个仅适用于 R 3 的包。

当我尝试使用 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、...。这些是如何定义的?

【问题讨论】:

  • 如果您提供可重现的示例,这将更容易诊断。 R_HOME 的值是多少?你的脚本包含什么?每种情况下的库在哪里(.libPaths() 返回什么)?您确定在这两种情况下都使用相同版本的 R(version 返回什么)?
  • 我添加了有关 libPaths 的信息。你是对的,这似乎是问题....但是我该如何解决呢?

标签: java r version environment-variables


【解决方案1】:

您可以在加载包时选择要查看的库。例如,通过 Rscript 调用脚本时,可以使用

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

【讨论】:

  • 是的,我知道,但我想编写一个 java 应用程序,这样的解决方法只能在我的计算机上工作,但一般不工作......libPaths() 应该类似于 c("&lt;default of the installation&gt;", "&lt;home-of-user&gt;/R/&lt;arch&gt;/&lt;R-version&gt;")
  • 可能使用.Library.Library.site,两者都在?.libPaths 帮助页面中描述。您可能可以让用户决定他们在哪里安装和加载他们的包。更好的解决方案是确定设置这些额外库的时间和地点。您必须进行一些挖掘。
猜你喜欢
  • 2012-02-09
  • 2018-03-11
  • 2018-03-09
  • 2018-10-20
  • 1970-01-01
  • 1970-01-01
  • 2011-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多