Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Rcpp:通过引用将行追加到dataframe_C++_Rcpp - Fatal编程技术网

C++ Rcpp:通过引用将行追加到dataframe

C++ Rcpp:通过引用将行追加到dataframe,c++,rcpp,C++,Rcpp,我正在通过引用传递一个数据帧,并尝试向其中添加列。我的计划是以这种方式向其追加行 到目前为止,我的代码如下所示,使用sourceCpp编译时没有错误-但是,我无法执行如下函数: lst <- list("a"=c("aone", "atwo"), "b"=c("bone","btwo")) mainFunc(lst) 因此,是否可以在mainFunc中创建一个数据帧,并在mainFunc中向其添加/附加值?这一点以前也已经得到了回答,但我手头没有参考资料。实质上: adata.fram

我正在通过引用传递一个数据帧,并尝试向其中添加列。我的计划是以这种方式向其追加行

到目前为止,我的代码如下所示,使用
sourceCpp
编译时没有错误-但是,我无法执行如下函数:

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

因此,是否可以在
mainFunc
中创建一个数据帧,并在
mainFunc
中向其添加/附加值?

这一点以前也已经得到了回答,但我手头没有参考资料。实质上:

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

调整大小是昂贵的,因为您需要重新分配和复制内容,所以如果您知道要插入(比如)十行,请只执行一次。

谢谢Dirk。使用
列表
而不是
数据帧
是否更有效?还是我转换的C++的一些本地结构?我事先不知道最终尺寸:-(当我们这样做时(参见Rblpapi中的示例)我们经常逐行增长
std::vector
,最后转换并创建一个
data.frame
。我现在正在查看Rblpapi的源文件,但是有很多-你能给我指出一个发生这种转换的地方吗?提前谢谢。你的例子没有太多意义。你为什么需要
XPtr
?有吗你看了吗?你介意把这个例子举出来吗?我想很多人最终都是在RCPP的背景下努力学习C++的R用户。e如何将多个向量视为一行。
#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);
}