The initial question is when I study Rcpp data classes / structures: is there a member function to erase a row / column for an object of the Rcpp::NumericMatrix ? (Or other types of type **Matrix types - I assume this is a template class)?
library(Rcpp) cppFunction(' NumericMatrix sub1 {NumericMatrix x, int& rowID, int& colID) { // let assume separate functions for rowID or colID // but for the example case here x.row(rowID).erase(); // ??? does this type of member function exist? x.col(colID).erase(); // ??? return x; }')
If this type of member function does not exist, how about this?
cppFunction('NumericMatrix row_erase (NumericMatrix& x, int& rowID) { // a similar function would exist for removing a column. NumericMatrix x2(Dimension(x.nrow()-1, x.ncol()); int iter = 0; // possibly make this a pointer? for (int i = 0; i < x.nrow(); i++) { if (i != rowID) { x2.row(iter) = x.row(i); iter++; } } return x2; }')
Or perhaps we want to remove a row / column set:
cppFunction('NumericMatrix row_erase (NumericMatrix& x, IntegerVector& rowID) { // a similar function would exist for removing a column. rowID = rowID.sort(); NumericMatrix x2(Dimension(x.nrow()- rowID.size(), x.ncol()); int iter = 0; // possibly make this a pointer? int del = 1; // to count deleted elements for (int i = 0; i < x.nrow(); i++) { if (i != rowID[del - 1]) x2.row(iter) = x.row(i); iter++; } else { del++; } } return x2; }')
c ++ rcpp
Alex w
source share