Начальный вопрос, когда я изучаю классы/структуры данных Rcpp: существует ли функция-член для стирания строки/столбца для объекта класса Rcpp::NumericMatrix
? (Или другие типы type **Matrix
- Я предполагаю, что это класс шаблонов)?Rcpp NumericMatrix - как удалить строку/столбец?
library(Rcpp)
cppFunction('
NumericMatrix sub1 {NumericMatrix x, int& rowID, int& colID) {
// let's 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;
}')
Если этого типа функции-члена не существует, как насчет этого?
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;
}')
Или, возможно, мы хотим, чтобы удалить набор строк/столбцов:
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;
}')
Я отвечал на подобный вопрос [здесь] (http://stackoverflow.com/questions/33119163/rcpp-eliminating -a-column-and-a-row-from-a-matrix), который (я думаю) объединяет обе ваши цели в одну функцию. Если это так, вы можете легко адаптировать его к двум отдельным функциям для устранения строк и столбцов, соответственно. – nrussell
@nrussell - спасибо, я посмотрю –