Как поместить функции в рабочее пространство Rserve?

Я пытаюсь использовать Rserve от Tableau. Я могу выполнить следующий код:

SCRIPT_REAL(".arg1*.arg2", MAX([Price]), [TestParam])

По сути, я пишу код R в Tableau (в моем случае ".arg1*.arg2") и отправляю его в Rserve. Rserve, в свою очередь, берет код, выполняет его и отправляет результат обратно в Tableau.

Теперь я пытаюсь сделать то же самое, но определяя функцию в среде R и получая к ней доступ из Tableau через Rserve. Итак, я выполняю следующее в R:

> myfunc <- function(x, y) {x*y}
> library(Rserve)
> Rserve()

Это означает, что я определяю функцию в среде R, а затем запускаю Rserve в той же среде с надеждой, что Rserve увидит функцию, которую я определил ранее.

Затем в Tableau я определяю новый столбец, используя этот код:

SCRIPT_REAL("myfunc(.arg1,.arg2)", MAX([Price]), [TestParam])

Как видите, я пытаюсь вызвать функцию (myfunc), которую определил в R.

В результате я получаю сообщение об ошибке, в котором говорится, что myfunc не найден.

Немного изучив сеть, я обнаружил, что этого следует ожидать, поскольку функции, определенные в рабочей области R, не находятся в рабочей области Rserve. Итак, мой вопрос: Можно ли определить функцию в R, а затем сделать ее видимой для Rserver, чтобы Rserve мог выполнять эти функции?


person Roman    schedule 10.08.2016    source источник
comment
Я не гуру Rserve, но я предполагаю, что вам нужно будет превратить его в пакет и установить в системную библиотеку (не под $HOME).   -  person r2evans    schedule 10.08.2016


Ответы (1)


Можно ли определить функцию в R, а затем сделать ее видимой для Rserver, чтобы Rserve мог выполнять эти функции?

Конечно, это. Вы «просто» говорите Rserve

  • source файл с функциями (не рекомендуется, читайте дальше)
  • загрузить одну или несколько библиотек по мере необходимости (рекомендуется также для локального кода)

точно так же, как с любым другим сеансом R, потому что это то, что предлагает Rserver: безголовые сеансы R.

person Dirk Eddelbuettel    schedule 12.08.2016
comment
Спасибо за ответ. Я должен признать, что я очень новичок в R. Поэтому я не знаю, как связаться с Rserve. В частности, как получить файл с функцией или как поместить мою функцию в мою библиотеку. Сложно ли создать свою собственную (локальную) библиотеку? - person Roman; 12.08.2016
comment
Это не так, но спрашивать в комментариях — не лучший способ узнать. Я только что погуглил «как создать пакет R», получил 140 миллионов просмотров, включая ключевые пункты популярного учебника. Этому стоит научиться. Здесь также есть сотни связанных вопросов (и ответов!). - person Dirk Eddelbuettel; 12.08.2016
comment
Прежде чем написать свой комментарий, я тоже погуглил и нашел pdf с 19 страницами. Причина, по которой я написал комментарий, заключается в том, что я предполагаю (надеюсь), что есть только одна волшебная команда (одна строка кода), с помощью которой я могу получить свой файл (или создать библиотеку), и все будет работать. И если это так, я думаю, имеет смысл спросить об этом здесь. Особенно с учетом того, что я в цейтноте и не успеваю прочитать 20-страничный документ (к сожалению). - person Roman; 12.08.2016
comment
Да. волшебная единственная команда library(mypackage). И да, он ожидает, что вы научитесь писать библиотеку так, чтобы все работало волшебно и надежно. Это то, что вам нужно, нет? - person Dirk Eddelbuettel; 12.08.2016
comment
На самом деле я выбрал первый вариант (получение файла с функцией), так как он выглядит проще в реализации. Я пытался найти источник перед импортом и запуском Rserve. Я также поместил source C:\Users\myname\Documents\test.R в файл C:\Program Files\R\R-3.2.2\library\Rserve\libs\x64\Rserve.cfg. Это тоже не работает. - person Roman; 12.08.2016
comment
Выглядит проще, но не работает (настолько же надежно). Есть причина, по которой мы рекомендуем вместо этого пакеты. В любом случае, у меня нет времени лично обучать вас, здесь не место. Пожалуйста, прочитайте документацию, а затем, возможно, задайте новый вопрос. - person Dirk Eddelbuettel; 12.08.2016