【问题标题】:Problem loading R own created libraries in Java/JRI code在 Java/JRI 代码中加载 R 自己创建的库时出现问题
【发布时间】:2011-01-29 11:05:38
【问题描述】:

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

   > library(Media)

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

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

【问题讨论】:

    标签: java r rjava jri


    【解决方案1】:

    您可以修改库路径 - 请参阅 R 中的 ?.libPaths,您只是想将私有库添加到路径中。 GUI 会为您执行此操作,但如果您在外面,则不会发生。例如:

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

    然后加载你的包。

    【讨论】:

    • 这对我很有用。但我不得不在 Windows 中使用:re.eval(".libPaths('c:/users/foo/Documents/R/win-library/3.2')");
    【解决方案2】:

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

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

    【讨论】:

    • 遗憾的是我没有找到解决方案(你的似乎是一个不错的解决方法)。我终于在 re.eval 调用中内联了这些函数,而不是让它们成为库的一部分(就像我试图做的那样)。
    【解决方案3】:

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

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

    【讨论】:

    • 我会试试的,但奇怪的是我可以直接在 RGui 中执行相同的代码而不会出现问题。谢谢。
    • 这句话似乎与参数“lib.loc”一起工作,但在那之后,用 re.eval("media(t)"); 调用包中名为“media”的函数;仍然失败,并显示一条消息说它无法找到“媒体”功能......
    猜你喜欢
    • 2018-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    相关资源
    最近更新 更多