我一直在尝试实现一些基本的R函数,比如在数据帧和矩阵的Rcpp中拆分。为此,我需要知道最有效的来回转换数据帧和矩阵的方法。到目前为止,我使用DataFrame构造函数将矩阵转换为DataFrame。如何将DataFrame转换回Matrix.Lets假设所有数据都是double类型。
目前的做法是
矩阵到DataFrame
NumericMatrix x;
DataFrame y= DataFrame(x);
y.attr("names")=x.attr("names");
DataFrame to Matrix
DataFrame x;
int xsize=x.size();
NumericVector col=x(0);
NumericMatrix y(col.size(),xsize);
for(int i=0;i<xsize;i++){
y(_,i)=col;
if(i<xsize-1){
col=x(i+1);
}
}
y.attr("names")=x.attr("names");
是否有更有效的方式进行此转换?
我也是Rcpp的新手。任何人都可以解释如何找到特定类实现的源代码,例如NumericMatrix?
也是最后一行
y.attr("names")=x.attr("names")
不会将x的列名设置为y的列名。任何人都可以解释如何将列名设置为数据框的列名。
答案 0 :(得分:2)
您缺少nrow
的{{1}}方法。这可以简化您的代码。你不需要第一列的特殊外壳等......
DataFrame
至于设置列名,您可以浏览int xsize=x.size();
NumericMatrix y(x.nrows(),xsize);
for(int i=0;i<xsize;i++){
y(_,i) = NumericVector(x[i]);
}
属性:
dimnames
y.attr("dimnames") = List::create( R_NilValue, x.attr("names") ) ;
的源代码是here,但我不确定这会对您有所帮助。