Ho un codice RCpp, dove in una parte del codice sto provando a convertire un DataFrame in una Matrix. DataFrame ha solo numeri (senza stringhe o date).il modo migliore per convertire DataFrame in Matrix in RCpp
Il seguente codice funziona:
//[[Rcpp::export]]
NumericMatrix testDFtoNM1(DataFrame x) {
int nRows=x.nrows();
NumericMatrix y(nRows,x.size());
for (int i=0; i<x.size();i++) {
y(_,i)=NumericVector(x[i]);
}
return y;
}
mi chiedevo se c'è modo alternativo (cioè equivalente di as.matrix
in R), in RCpp a fare lo stesso, qualcosa di simile al seguente codice qui sotto (che non lavoro):
//[[Rcpp::export]]
NumericMatrix testDFtoNM(DataFrame x) {
NumericMatrix y(x);
return y;
}
* EDIT *
Grazie per le risposte. Come suggerito da Dirk, il codice C++ è circa 24 volte più veloce di una delle due risposte e la versione Function
è del 2% più veloce della versione internal::convert_using_rfunction
.
Inizialmente cercavo una risposta all'interno di RCpp senza chiamare R. Dovrei averlo chiarito quando ho postato la mia domanda.
mi piacerebbe andare con la soluzione che avete nella vostra domanda. Potremmo avere bisogno di un modo migliore per ottenere 'n' e anche' k' da data.frame (cioè come lunghezza del vettore dei nomi). Altrimenti è una buona soluzione nella mia mente che mi piace così come alcune delle risposte suggerite. –
E ovviamente avevo sbagliato su n e k retrievers dato che abbiamo '.size()', principalmente pensavo a funzioni con nomi simili a quelli per le matrici. Potrebbe aggiungere che ad un certo punto ... –