Выполнение сценария R способом, отличным от использования source() в JRI

Я новичок в R и пытаюсь использовать JRI. Через JRI я использовал функцию "eval()" для получения определенных результатов. Если я хочу выполнить сценарий R, я использовал «source ()». Однако сейчас я нахожусь в ситуации, когда мне нужно выполнить скрипт для постоянно поступающих данных. Хотя я все еще могу использовать "source()", я не думаю, что это будет оптимальным способом с точки зрения производительности.

Что я сделал, так это прочитал весь R-скрипт в память, а затем попытался использовать "eval()" для передачи скрипта, но это, похоже, не работает. Я удостоверился, что сценарий был правильно загружен в память, потому что, если я запишу этот сценарий (загруженный в память) в файл и создам этот вновь созданный файл, он даст ожидаемые результаты.

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

Я много искал и не нашел ничего, связанного с этим. Любые указатели, которые могли бы помочь мне в этом направлении, были бы действительно полезны.


person user2940063    schedule 23.12.2013    source источник


Ответы (1)


Как я справился с этим, как показано ниже:

  1. Я заключил весь скрипт в функцию.
  2. Я получил файл сценария (который теперь содержит функцию) в начале выполнения моей программы.
  3. Место, где я искал файл, теперь я просто вызываю функцию, содержащую сам скрипт, т.е. -

    Результат REXP = rengine.eval("retVal‹-" + getFunctionName() + "()");

    Здесь getFunctionName() дает мне имя имени функции, содержащей скрипт.

Поскольку он загружается в память и доступен, мне не нужно каждый раз извлекать файл сценария, когда я хочу выполнить сценарий. Любые аргументы, передаваемые сценарию, выполняются как env. переменные.

Это кажется обходным путем, но решает мою проблему. Любые лучшие варианты приветствуются.

person user2940063    schedule 10.01.2014