Rcpp:通过引用将行附加到数据框
Rcpp: Append rows to dataframe by reference
我正在通过引用传递数据框并尝试向其中添加列。我的计划是以这种方式向其追加行。
到目前为止,我的代码如下所示,使用 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
中为它创建 add/append 值?
之前也有人回答过这个问题,但我手头没有参考资料。本质上:
- a
data.frame
是向量列表
- 在 C++ 级别,您只是看到一组向量
- 所以你基本上必须插入到每个向量中
- 并根据需要调整大小
调整大小昂贵,因为您需要重新分配和复制内容,因此如果您知道要插入十行,则只需执行一次。
我正在通过引用传递数据框并尝试向其中添加列。我的计划是以这种方式向其追加行。
到目前为止,我的代码如下所示,使用 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
中为它创建 add/append 值?
之前也有人回答过这个问题,但我手头没有参考资料。本质上:
- a
data.frame
是向量列表 - 在 C++ 级别,您只是看到一组向量
- 所以你基本上必须插入到每个向量中
- 并根据需要调整大小
调整大小昂贵,因为您需要重新分配和复制内容,因此如果您知道要插入十行,则只需执行一次。