Простой код Rcaller - Ошибка при загрузке Runiversal

У меня есть следующий код Java, который использует Rcaller.

RCaller caller = new RCaller();
RCode code = new RCode();

caller.setRscriptExecutable("/usr/bin/Rscript");

code.addRCode("install.packages(\"bbmle\")");
caller.redirectROutputToConsole();
caller.runOnly();

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

Когда я запускаю этот код, я получаю следующий вывод в Java

Error:Loading required package: Runiversal

Однако у меня есть пакет Runiversal на моем Mac. Любые идеи, что это значит, и почему я на самом деле не вижу никакого R вывода метода install.packages, который обычно довольно многословен?


ОБНОВЛЕНИЕ: я должен отметить, что даже простой код, такой как следующий, приводит к той же ошибке:

code.addRCode("x = c(1,2,3)");
code.addRCode("y = c(2,3,5");
code.addRCode("x+y");
caller.redirectROutputToConsole();
caller.runOnly();

ОБНОВЛЕНИЕ: я также должен упомянуть, что отлично работает следующее:

StringBuffer allCode = readFile("temp.R");
code.setCode(allCode);

double[] xvector = new double[]{1,3,5,3,2,4,5,6,7,8,9,21,22,25,27,25,34,39,31};
double[] yvector = new double[]{6,7,5,6,5,6,6,7,6,8,9,21,20,19,23,24,29,38,30};
code.addDoubleArray("X",xvector);
code.addDoubleArray("Y",yvector);

code.addRCode("fun(X,Y)");

темп.R:

fun = function(x,y) {
    return(lm(y~x))
}

Вывод Java:

Output:
Output:Call:
Output:lm(formula = y ~ x)
Output:
Output:Coefficients:
Output:(Intercept)            x  
Output:      2.445        0.825  
Output:

person CodeGuy    schedule 02.02.2014    source источник


Ответы (2)


R загружает пакет из библиотек. Если библиотека, в которую вы установили пакет Runiversal, не ищется процессом R, запущенным под Java, это может привести к появлению сообщения об ошибке, которое вы видите.

Итак: каков путь к каталогу (т. е. к библиотеке), в котором установлен пакет Runiversal? Возможно, это связано с тем, какой пользователь установил пакет R и какой пользователь запускает код Java.

person Erik Iverson    schedule 02.02.2014
comment
Runiversal находится там же, где и все мои пакеты. /Library/Frameworks/R.framework/Resources/library/. Я пользователь, который установил пакет (непосредственно через R), и я пользователь, который запускает код Java. Есть ли способ проверить, ищет ли это место процесс R, запущенный под Java? - person CodeGuy; 02.02.2014
comment
Функция R .libPaths() вернет вектор символов каталогов библиотек. - person Erik Iverson; 02.02.2014
comment
Используете ли вы Rscript в качестве setRscriptExecutable в обоих случаях выше? - person Erik Iverson; 02.02.2014
comment
Rscript имеет аргумент, называемый пакетами по умолчанию, поэтому вам может понадобиться загрузить Runiversal с помощью этого аргумента? Просто предположим, попробуйте следующее из командной строки: Rscript --default-packages='Runiversal' -e 'search()' vs. Rscript -e 'search()' - person Erik Iverson; 02.02.2014

Версия 2.2 библиотеки RCaller не требует пакета R Runiversal. В пакете реализована компактная версия конвертеров R в XML. Попробуйте здесь

person jbytecode    schedule 13.04.2014