Я написал небольшой Java-клиент, который выполняет некоторые вычисления на Rserver. Для этой цели на стороне сервера есть файлы functions.r
- и libraries.r
, которые необходимо получить, прежде чем можно будет выполнить фактический расчет.
В настоящее время я загружаю файлы при каждом новом соединении:
import org.rosuda.REngine.Rserve.RConnection;
public class RserveTester {
public void doOnRserve() {
RConnection c = new RConnection( "rserve.domain.local" );
c.login( "foo", "user" );
c.eval("source(\"/home/rserve/lib/libraries.r\")");
c.eval("source(\"/home/rserve/lib/functions.r\")");
c.eval( "someCalculation()" )
c.close();
}
}
где doOnRserve()
вызывается из-за каких-то событий на стороне клиента пару раз в минуту.
Мой вопрос: возможно ли получить библиотеки только один раз, чтобы они были доступны во время всех новых сеансов RS без индивидуального поиска?
Я пробовал на стороне клиента что-то вроде:
c.serverSource("/home/rserve/lib/libraries.r" )
c.serverSource("/home/rserve/lib/functions.r" )
Что дает мне следующее исключение (не знаю, почему это не работает, если eval
работает):
org.rosuda.REngine.Rserve.RserveException: serverSource failed, request status: access denied (local to the server)
Могу ли я запустить Rserve с определенным .Rprofile
?
ИЗМЕНИТЬ:
По сути, существует три возможных метода:
- Пусть /home/rserve/.Rprofile является источником файлов .r. Но это швы, чтобы получать их каждый раз, когда я звоню
new RConnection()
- Передача исходных команд непосредственно в R при запуске Rserve (не знаю, как это сделать).
- Мой предпочтительный метод: делать это со стороны клиента с помощью serverSource(), который выдает эти исключения «отказано в доступе».
EDIT2:
Rserve версия v0.6-8 (338)
R версии 2.15.2 для x86_64-pc-linux-gnu.