我开发了一个使用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调用可以访问用户已在其中安装的软件包的R-Engine %USERPROFILE%\文件\ r \双赢的图书馆吗?
我在r-help邮件列表上也asked,但没有快乐。
我知道library()函数的 libloc 参数,但我更喜欢一些不那么脆弱的东西,即自动而不是需要配置......
答案 0 :(得分:2)
如果位置不同于默认位置,则应在Rprofile.site文件中提及它们,其中使用.libPaths()
或设置.Library.site
变量。检查您是否可以在R版本的Rprofile.site文件中找到它,让您的应用程序打印函数.libPaths()
的输出。
据我所知(但我可能错了),JRI使用Rserve,它不会以经典的方式启动R.我怀疑在Windows上这会以某种方式忘记Rprofile.site(事实上这将是一个bug)。看不出为什么它不起作用的另一个原因,但我不是专家。
一种解决方案是:
.libPaths()
添加任何可能的位置(请参阅?.libPaths
).Library.site
变量您可能想要检查问题是否仍然存在于Windows 7上,因为我注意到某些程序在使用Vista时尝试连接到R的问题行为,而相同的版本在Windows 7上运行正常。
答案 1 :(得分:2)
%USERPROFILE%\ Documents \ R \ win-library是一个“非标准”库位置,尽管它在用户是非管理员时自动添加到.libPaths()。
启动JRIEngine后,您可以手动添加库位置。
jriengine.parseAndEval(".libPaths(<the directory>)");
答案 2 :(得分:2)