Получение r-файлов только один раз на Rserve

Я написал небольшой 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?

ИЗМЕНИТЬ:

По сути, существует три возможных метода:

  1. Пусть /home/rserve/.Rprofile является источником файлов .r. Но это швы, чтобы получать их каждый раз, когда я звоню new RConnection()
  2. Передача исходных команд непосредственно в R при запуске Rserve (не знаю, как это сделать).
  3. Мой предпочтительный метод: делать это со стороны клиента с помощью serverSource(), который выдает эти исключения «отказано в доступе».

EDIT2:

Rserve версия v0.6-8 (338)

R версии 2.15.2 для x86_64-pc-linux-gnu.


person Beasterfield    schedule 25.11.2012    source источник


Ответы (2)


Это тривиально делается добавлением source строк в файл конфигурации, т.е.

source "/foo/bar.R"

в /etc/Rserv.conf будет источником /foo/bar.R при запуске. Если вы хотите использовать другой файл конфигурации, используйте аргумент командной строки --RS-conf, чтобы указать его. Наконец, Rserve 1.x также поддерживает параметр --RS-source в командной строке.

Без кавычек в пути к файлу может появиться ошибка «Файл не найден».

Кстати: вы упомянули serverSource() доступ запрещен - это означает, что вы не включили команды управления в Rserve (control enable в конфигурации или --RS-enable-control в командной строке).

PS: Пожалуйста, используйте список рассылки stats-rosuda-devel для вопросов по Rserve.

person Simon Urbanek    schedule 29.11.2012
comment
Спасибо, но что касается serverSource, оба упомянутых вами метода не работают: запуск демона с помощью R CMD Rserve --RS-enable-control --RS-conf ~/control/Rserve.conf выдает предупреждение при запуске: Предупреждение: неизвестная опция '--RS-enable-control'. Добавление control enable в (мой локальный) Rserve.conf не дает предупреждения, но затем я все равно получаю исключение Java: serverSource не удалось, статус запроса: доступ запрещен (локальный для сервера) - person Beasterfield; 30.11.2012
comment
Если --RS-enable-control не распознается, значит, вы используете старый Rserve (вероятно, серии 0.x), который его не поддерживает. Что касается control enable - пожалуйста, запустите отладочную версию, чтобы убедиться, что вы правильно установили конфигурацию, чтобы она отображала распознанные флаги. Также обратите внимание, что если вы используете аутентификацию пользователей, вы должны указать пользователей, которым разрешено выдавать команды управления (см. документы). - person Simon Urbanek; 30.11.2012
comment
извините, но мне потребовалось некоторое время, чтобы вернуться к этому. Да, вы были правы, я установил серию 0.x. Большое спасибо, это было очень полезно. - person Beasterfield; 21.12.2012

Да, ты можешь. Всегда помните об этом:

R> fortunes::fortune("Yoda")

Evelyn Hall: I would like to know how (if) I can extract some of the information 
             from the summary of my nlme.
Simon Blomberg: This is R. There is no if. Only how.
   -- Evelyn Hall and Simon 'Yoda' Blomberg
      R-help (April 2005)

R> 

Или, как указано в документации для Rserve:

\description{ Запускает Rserve в режиме демона (только для Unix).

Любые дополнительные параметры, не связанные с Rserve, будут переданы прямо в базовый R. Информацию о конфигурации, использовании и параметрах командной строки см. в онлайн-документации по адресу http://www.rforge.net/Rserve. Используйте \code{R CMD Rserve --help} для краткой справки.

person Dirk Eddelbuettel    schedule 25.11.2012
comment
Мне очень жаль, но это мне совсем не помогает (я прочитал всю документацию по RServe). Может быть, это просто потому, что я не знаю, как передать исходную команду «прямо в базовый R». Я попытался добавить команды source в Rserve.conf безрезультатно. Я создал .Rprofile, но затем команды source по-прежнему вызываются каждый раз, когда я создаю новый RConnection. Кроме того, .Rprofile не загружается, когда я запускаю Rserve с помощью старт-стоп-скрипта. - person Beasterfield; 25.11.2012
comment
Извините, забудьте о неработающем .Rprofil при запуске демона старт-стоп-скриптом. Это была моя вина. - person Beasterfield; 25.11.2012
comment
Возможно, нам следует отредактировать вопрос и / или ответ, чтобы записать его одним легко работающим способом. Что ты выбрал? RHOME/etc/Rprofile ? Каталог запуска .Rprofile ? - person Dirk Eddelbuettel; 25.11.2012
comment
Я отредактировал свой вопрос, сделав возможные решения, надеюсь, более понятными. - person Beasterfield; 25.11.2012