加载R在Java / JRI代码中创建库的问题

我创建了自己的新R库(称为“媒体”)。 当我尝试使用RGui加载它时没有问题,我可以调用新包中定义的函数。 这是我加载它的方式:

> library(Media) 

但是,我也试图从Java / JRI代码调用这些函数,当我加载新的R包时,Java似乎没有找到pacakge,抛出消息“库中的错误(媒体):对象’媒体’ 未找到”

这是我使用JRI的当前代码:

  REXP rexpSetFolder = re.eval("setwd('C:/Users/Albert/Documents')"); REXP rexpFolder = re.eval("getwd()"); System.out.println(rexpFolder.asString()); REXP rexpLoad = re.eval("library(Media)"); // fails 

没有’setwd’命令也会失败,对现有R函数的简单调用工作正常。 我在Windows下使用R 2.10和最新的JRI 0.5-0。

任何帮助,将不胜感激。 非常感谢你。

编辑:

参数lib.loc似乎有效,至少这句话不会返回错误:

 library("Media", lib.loc = "c:/Users/Albert/Documents") 

但之后,使用re.eval("myfunction()");调用包中的函数re.eval("myfunction()"); 仍然失败,因为没有正确找到该function。

您可以修改库路径 – 请参阅R中的?.libPaths ,您只需要将私有库添加到路径中。 GUI为您做到了这一点,但如果您在外面则不会发生。 例如:

  re.eval(".libPaths('c:/users/foo/Documents/R')"); 

然后加载你的包裹。

你是否先正确安装了库? 您可能想尝试使用lib.loc参数。

 library("Media", lib.loc = "c:/Users/Albert/Documents") 

我的解决方法是将包从我的个人库(%USERPROFILE%\ Documents \ R)复制到全局库(%R_HOME%\ library)。

这不是最好的,因为这需要管理员权限,并非所有用户都拥有…