Передача экземпляра RInside 'R' в качестве параметра между классами / методами - PullRequest
3 голосов
/ 18 марта 2011

Я использовал Rcpp и RInside для интеграции R и C ++ .У нас есть сложная, но хорошо спроектированная архитектура C ++, и мне трудно получить доступ к R из одной функции.Можно ли передать экземпляр R различным классам / функциям, чтобы получить более ООП дизайн?Если да, есть ли примеры?

Чтобы разработать запрос, я хочу сказать, что что-то вроде этого:

void foo(RInside& R0, int& x0)
{
 R0.assign(x0,"totalSum");
}
void foo2(RInside& R0, int& y0)
{
  R0.assign(y0,"temp");
   R0.parseEvalQ("totalSum = totalSum + temp"); 
 }
int main(int argc, char *argv[])
{   
  RInside R(int argc, char *argv[]);
  int x=10, y = 11;
  foo(R,x);
  foo2(R,y);
  return 0;
}

В настоящее время я замечаю, что каждый вызов foo, вероятно, создает новый экземплярRInside.

Спасибо - Эгон

1 Ответ

5 голосов
/ 19 марта 2011

Да, и, как я уже писал ранее, в список rcpp-devel (которому вы должны следовать, если вам небезразличны Rcpp и RInside), я просто добавил пример к RInside , который встраиваетэто внутри Qt .

Я инстанцирую R в main() и затем передаю ссылку на этот объект классу, использующему его.Это похоже на правильную модель, так как нам нужно убедиться, что работает только один экземпляр R (с многопоточным R и т. Д. - если вам нужно больше экземпляров, рассмотрите Rserve .

Этот пример теперь в SVN и выглядит на моем боксе так:

enter image description here

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

...