2014-01-27 3 views
0

На компьютерах (работает Fedora) по моей работе R-2.15 установлен по умолчанию. Я скачал R-3.0.2, потому что мне нужно несколько пакетов, которые доступны только для R 3.Звонок R из java - разная версия R

Когда я пытаюсь вызвать Rscript из Java с помощью Runtime.getRuntime().exec(command); с командой является Строковый массив {"/path/to/Rscript/3-0" "name/of/script" "...args..."} я получаю ошибку WARNING: ignoring environment value of R_HOME и говорит что он не может загрузить необходимые пакеты. Когда я запускаю ту же самую команду в терминале, она работает хорошо.

В чем разница между вызовом через java и вызовом на консоли. И как я могу это исправить?

EDIT 1: когда я запускаю мой локально установленный R-3 версии, libPaths возвращает

> .libPaths() 
[1] "/home/<homedir>/.bin/R-3.0.2/library" 

Но когда я называю Rscript от Java, libPaths возвращает

[1] "/home/<homedir>/R/x86_64-redhat-linux-gnu-library/2.15" 
[2] "/usr/lib64/R/library"           
[3] "/usr/share/R/library"           
[4] "/home/<homedir>/.bin/R-3.0.2/library" 

Проблема, кажется, что Java добавляет переменные среды, которые сообщают R для загрузки пакетов из установки 2.15. Как я могу предотвратить это?

EDIT 2: Когда я перечислить все переменные окружения не используя метод System.getenv(); ничего R о связанных показан, то же самое имеет место, когда я список переменных среды, используя printenv в терминале. Но когда я вызываю Sys.getenv в R, переменные R_HOME, R_LIBS, ... определены. Как они определены?

+0

Это будет намного легче диагностировать, если вы предоставите воспроизводимый пример. Какова ценность 'R_HOME'? Что содержит ваш скрипт? Где библиотеки в каждом случае (что возвращает '.libPaths()')? Вы уверены, что используете ту же версию R в обоих случаях (что возвращает 'version')? –

+0

Я добавил информацию о libPaths. Вы правы, это, кажется, проблема ... Но как я могу это исправить? – Jonas

ответ

0

Вы можете выбрать библиотеку для поиска, когда вы загружаете пакет. Например, при вызове сценария через Rscript вы можете использовать

library(rJava, lib.loc = .libPaths()[4]) 
+0

Да, я знаю, но я хочу написать приложение Java, и такое обходное решение будет работать только на моем компьютере, но не в общем ... 'libPaths()' должно быть чем-то вроде 'c (" ") , "/R//") ' – Jonas

+0

Возможно, используйте' .Library' или '.Library.site', как описано на странице справки' .libPaths'. Вероятно, вы можете позволить пользователям решить, где они устанавливают и загружают свои пакеты. Лучшим решением было бы разработать, когда и где будут установлены дополнительные библиотеки. Вам придется делать рытье. –

Смежные вопросы