У меня есть следующий код R:Реализация R в C++ Rcpp
CutMatrix <- FullMatrix[, colSums(FullMatrix[-1,] != FullMatrix[-nrow(FullMatrix), ]) > 0]
Который берет матрицу - FullMatrix и делает CutMatrix, находя какие столбцы в FullMatrix имеют столбцы с более чем 1 уникальным значением - так все столбцы с одинаковым значением исключаются. Мне интересно, могу ли я использовать Rcpp для ускорения этого для больших матриц, но я не уверен в том, что это лучший способ сделать это - есть ли простой способ сделать это с помощью сахара (скажем, перейдя через столбцы и подсчитывая количество уникальных значений), или если мне придется использовать что-то более сложное из STL.
Я думал, может быть, что-то вроде следующего было началом (мне не удалось полностью пройти) - попытка выполнить операцию между скобками colSums в функции R, но я не думаю, m правильно устанавливает матрицу, так как она не работает.
src <- '
//Convert the inputted character matrix of DNA sequences an Rcpp class.
Rcpp::CharacterMatrix mymatrix(inmatrix);
//Get the number of columns and rows in the matrix
int ncolumns = mymatrix.ncol();
int numrows = mymatrix.nrow();
//Get the dimension names
Rcpp::List dimnames = mymatrix.attr("dimnames");
Rcpp::CharacterMatrix vec1 = mymatrix(Range(1,numrows),_);
Rcpp::CharacterMatrix vec2 = mymatrix(Range(0,numrows-1),_);
'
uniqueMatrix <- cxxfunction(signature(inmatrix="character"), src, plugin="Rcpp")
Thanks, Ben.
Посмотрите на эти две должности Rcpp Галерея на Armadillo индексации. С другой стороны, если у вас есть типы символов, возможно, вам просто нужен простой цикл (быстрый в C++) для сравнения строк с предыдущими строками. Вам не нужно кодировать это как векторное решение ... –
Бен - любой товар? –