2

我开发了一个使用 JRI 来利用 ptw 包的 Java 应用程序。

在 Linux(Ubuntu 10.04、R 2.10.1、JRI 0.5.0)上运行良好。

但是,在 Vista(R 2.12.0,JRI 0.5.0)上,当应用程序评估“library(ptw)”时,会发生以下错误:

库中的错误(ptw):找不到对象“ptw”

当我从 Vista 命令行运行 R 并发出“library(ptw)”命令时没有问题。

如果我将 ptw 包从 %USERPROFILE%\Documents\R\win-library 复制到 %R_HOME%\library,那么问题就会消失。但是,我不希望我的用户必须这样做,事实上,有些人可能没有这样做的权限。

因此,如何让 JRI 调用可以访问用户已安装在其 %USERPROFILE%\Documents\R\win-library 中的包的 R-Engine?

我也在r-help 邮件列表上询问过,但并不高兴。

我知道 library() 函数的libloc参数,但我更喜欢一些不那么脆弱的东西,即自动而不是需要配置......

4

3 回答 3

2

%USERPROFILE%\Documents\R\win-library 是一个“非标准”库位置,尽管当用户是非管理员时它会自动添加到 .libPaths() 中。

启动 JRIEngine 后,您可以手动添加库位置。

jriengine.parseAndEval(".libPaths(<the directory>)");

于 2010-12-06T18:02:54.450 回答
2

感谢JorisIan的评论,我发现在运行我的应用程序之前显式设置R_LIBS_USER环境变量可以解决问题。

无论出于何种原因,这仅在 Vista 上是必需的(与 Linux 相比)。在这两个系统上,Rprofile.site 文件都是一个空模板。

于 2010-12-07T04:28:19.247 回答
2

如果位置与默认位置不同,则应在 Rprofile.site 文件中提及它们,在该文件中.libPaths()使用或设置.Library.site变量。检查您是否可以在您的 R 版本的 Rprofile.site 文件中找到它,让您的应用程序打印函数的输出.libPaths()

据我所知(但我可能是错的),JRI 使用 Rserve,它不会以经典方式启动 R。我怀疑在 Windows 上这会以某种方式忘记 Rprofile.site (这实际上是一个错误)。看不出它不起作用的另一个原因,但我不是专家。

一种解决方案是:

  • 在开始时获取 Rprofile.site。
  • 或将任何可能的位置添加到.libPaths()(请参阅?.libPaths
  • 或者.Library.site在脚本中自己设置变量

您可能想检查问题在 Windows 7 上是否仍然存在,因为我注意到某些程序在使用 Vista 时尝试连接到 R 的行为有问题,而同一版本在 Windows 7 上运行良好。

于 2010-12-06T10:57:17.280 回答