【问题标题】:Passing RInside's 'R' instance as a parameter between classes/methods将 RInside 的“R”实例作为类/方法之间的参数传递
【发布时间】:2011-07-18 11:36:49
【问题描述】:

我一直在使用 Rcpp 和 RInside 来集成 RC++。我们有一个复杂但设计良好的 C++ 架构,我发现很难从一个函数中访问 R。是否可以将 R 实例传递给不同的类/函数,以获得更多的 OOP 设计?如果是,有没有例子?

要详细说明查询, 我想说这样的话,

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 实例。

谢谢你 - 埃贡

【问题讨论】:

  • 不,它不会创建新实例。你在做正确的事 (TM),你可以告诉我的样子,例如在tophtop 查看生成了多少 R 进程(一个)以及您是否看到新的进程 ID(不,您没有)。

标签: oop r rcpp rinside


【解决方案1】:

是的,正如我之前写给 rcpp-devel list(如果你关心 Rcpp 和 RInside,你应该关注它)我刚刚向 RInside 添加了一个示例,它将它嵌入到 Qt 中。

我在main() 中实例化 R,然后将对该对象的引用传递给使用它的类。这似乎是一个合适的模型,因为我们需要确保只有一个 R 实例正在运行(R 不是多线程等——如果您需要更多实例,请考虑 Rserve

这个例子是now in SVN,在我的盒子上看起来像这样:

我非常喜欢它,因为它可以让您玩弄混合,分散两个抽签的中心位置等,并查看您不再区分估计密度的两个驼峰的带宽。

【讨论】:

    猜你喜欢
    • 2022-01-05
    • 2019-03-26
    • 2020-01-26
    • 1970-01-01
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-12
    相关资源
    最近更新 更多