Mais effecient forma de converter o DataFrame para a Matriz e vice-versa
Pergunta
Estou tentando implementar algumas das básico de R funções como dividir em Rcpp para quadros de Dados e matrizes.Para que eu preciso saber o método mais eficiente de conversão de Quadro de Dados e a Matriz e para trás.até agora eu uso o DataFrame construtor para converter a matriz a DataFrame.Como posso converter o DataFrame de Volta à Matrix.Vamos supor que todos os dados são do tipo double.
A abordagem atual é
matriz para DataFrame
NumericMatrix x;
DataFrame y= DataFrame(x);
y.attr("names")=x.attr("names");
DataFrame a Matriz
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");
Existe uma maneira mais eficiente de fazer essa conversão?
Também eu sou um novato para Rcpp.Alguém pode explicar como encontrar o código-fonte de uma determinada classe de implementação, por exemplo NumericMatrix?
Também a última linha
y.attr("names")=x.attr("names")
não define os nomes de coluna de x como nomes de coluna de y.Alguém pode explicar como definir a coluna de nomes como os nomes de coluna do quadro de dados.
Solução
Você está ausente o nrow
método para DataFrame
.Isto pode simplificar o código.Você não precisa da carcaça para a primeira coluna, etc ...
int xsize=x.size();
NumericMatrix y(x.nrows(),xsize);
for(int i=0;i<xsize;i++){
y(_,i) = NumericVector(x[i]);
}
Como para definir os nomes de coluna, você pode ir até o dimnames
atributos:
y.attr("dimnames") = List::create( R_NilValue, x.attr("names") ) ;
O código de origem para Matrix
é aqui mas não tenho certeza se isso vai ajudar você.