Rcpp:通过引用将行附加到数据框

时间:2017-11-07 15:37:55

标签: c++ rcpp

我通过引用传递数据框并尝试向其添加列。我的计划是以这种方式添加行。

我的代码到目前为止在下面给出并编译sourceCpp没有错误 - 但是,我不能执行这样的函数:

lst <- list("a"=c("aone", "atwo"), "b"=c("bone","btwo"))
mainFunc(lst)

这告诉我mainFunc未定义,所以我怀疑代码是不正确的:

#include <Rcpp.h>

using namespace Rcpp;


class C
{
public:
  void test(Rcpp::DataFrame& df, Rcpp::List y)
  {

    int n = y.size();
    for( int i = 0; i<n; ++i)
    {
      List sublist = y[i];
      int m = sublist.size();
      for(int j = 0; j<m; ++j)
      {
        CharacterVector sublist_element = sublist[j];

        df[sublist_element] = sublist_element;
      }
    }

  }
};

// [[Rcpp::export]]
XPtr<C> mainFunc(Rcpp::List y)
{
  XPtr<C> ptr(new C(), true);

  DataFrame df;

  ptr->test(df, y);
  return(ptr);
}

那么可以在mainFunc中创建数据框并在mainFunc中为其添加/附加值吗?

1 个答案:

答案 0 :(得分:1)

之前已经回答过,但我没有参考资料。实质上:

  • 一个data.frame是一个向量列表
  • 在C ++级别,您只是看到一组向量
  • 所以你基本上必须插入每个向量
  • 并根据需要调整大小

调整大小是昂贵的,因为您需要重新分配和复制内容,因此如果您知道有10行要插入,只需执行一次。