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.

Foi útil?

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ê.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top