2016-08-01 7 views
0

Я пишу приложение Java в IntelliJ IDE. Приложение использует Rserve() для подключения к R и доступа к сценариям. Первый вопрос: на данный момент мои сценарии R находятся прямо под моей основной папкой проекта java. Чтобы получить доступ к R сценарию, я создаю RConnection, а затем использовать следующий код:Проблемы с R-соединением с относительным путем и исполняемым банком

RConnection rc1 = new RConnection(); 
rc1.assign("parseFile", currentPath.concat("/parseFile.R")); 
rc1.eval("source(parseFile)"); 

currentPath переменные в коде является абсолютным путем, который я получаю с помощью этого:

final String currentPath = currentRelativePath.toAbsolutePath().toString(); 

Однако, Я хочу внести изменения в свой код и хотел бы получить доступ к моим сценариям R, используя относительный путь. Для этого я создал папку с именем rscripts в папке src и разместил мои R скрипты в этой папке. Затем я пометил этот каталог как Sources root, используя опцию Mark directory as в intelliJ. Чтобы получить доступ к сценариев, я сделал следующие изменения в коде:

rc1.assign("parseFile", "/rscripts/parseFile.R"); 
rc1.eval("source(parseFile)"); 

Однако, теперь я получаю ошибку:

org.rosuda.REngine.Rserve.RserveException: eval failed, request status: error code: 127 

Глядя на ошибки, кажется, что R сценарий не может быть доступно. Как использовать относительные пути для доступа к сценариям R?

Во-вторых, я хочу доставить свое приложение в виде файла jar. Должен ли я также связывать R с файлом jar, если у пользователя нет R, установленного в системе?

+0

Начиная с косой черты означает абсолютный путь. Я бы просто прочитал содержимое файла для строки в Java и eval, похоже, что несколько вещей идут не так, как надо –

ответ

0

Я предполагаю, что вы должны изменить рабочий каталог R в нужное место, используя setwd(). После этого вам может быть достаточно передать только имя файла функции source().