加载R在Java / JRI代码中创建库时遇到问题

时间:2010-03-19 12:57:32

标签: java r rjava jri

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

   > library(Media)

但是,我也试图从Java/JRI代码调用这些函数,当我加载新的R包时,Java似乎没有找到pacakge,抛出消息“Error in library(Media ):找不到对象'媒体'“

这是我目前使用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()");调用包中的函数仍然失败,因为找不到该函数。

3 个答案:

答案 0 :(得分:3)

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

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

然后加载你的包裹。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

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