加载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)。
这不是最好的,因为这需要管理员权限,并非所有用户都拥有…