Проблема загрузки R собственных созданных библиотек в коде Java / JRI - PullRequest
2 голосов
/ 19 марта 2010

Я создал свою собственную новую библиотеку R (называемую «Media»). Нет проблем, когда я пытаюсь загрузить его с помощью RGui, и я могу вызвать функции, определенные в новом пакете. Вот как я его загружаю:

   > library(Media)

Но я также пытаюсь вызвать эти функции из Java / JRI кода, и когда я загружаю новый пакет R, Java, кажется, не находит пакет, выдавая сообщение "Ошибка в библиотеке (Media): объект '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 работают нормально. Я использую R 2.10 и последнюю версию JRI 0.5-0 под Windows.

Любая помощь будет оценена. Большое спасибо.

Edit:

Параметр lib.loc, кажется, работает, по крайней мере, это предложение не возвращает ошибку:

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

Но после этого вызывать функцию в пакете с re.eval("myfunction()"); все равно не удается, так как функция не найдена должным образом.

Ответы [ 3 ]

3 голосов
/ 22 декабря 2011

Вы можете изменить путь к библиотеке - см. ?.libPaths в R, вы просто хотите добавить свою личную библиотеку к пути. GUI делает это для вас, но если вы находитесь снаружи, этого не происходит. Например:

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

Затем загрузите ваш пакет.

1 голос
/ 06 декабря 2010

Мой обходной путь - скопировать пакет из моей личной библиотеки (% USERPROFILE% \ Documents \ R) в глобальную библиотеку (% R_HOME% \ library).

Это не самое лучшее, потому что для этого требуются права администратора, которые будут доступны не у всех пользователей ...

1 голос
/ 19 марта 2010

Сначала вы правильно установили библиотеку? Возможно, вы захотите попробовать использовать параметр lib.loc.

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