R fast cbind mat, rix с использованием Rcpp

cbind в R относительно много времени при повторных вызовах, но это также мощный для различных типов данных. Я написал код, который в 3 раза быстрее, чемcbind при связывании двух матриц. Ноbind_cols вdplyr пакет просто в 100 раз быстрее, чемcbind, Жаль только, что он не может принимать матрицу в качестве входных данных. Может кто-нибудь сделать код ниже более быстрым. Кроме того, как я могу быстро связать разреженную матрицу? Вот код, который я использовал:

require( Rcpp )

func <- 'NumericMatrix mmult(NumericMatrix a,NumericMatrix b) {
    //the colnumber of first matrix
    int acoln=a.ncol();
    //the colnumber of second matrix
    int bcoln=b.ncol();
    //build a new matrix, the dim is a.nrow() and acoln+bcoln
    NumericMatrix out(a.nrow(),acoln+bcoln) ;
    for (int j = 0; j < acoln + bcoln; j++) {
        if (j < acoln) {
            out(_,j) = a(_,j);
        } else {
            //put the context in the second matrix to the new matrix
            out(_,j) = b(_,j-acoln);
        }
    }
    return out ;
}'

a <- matrix(rep(1,2000*100),2000)
b <- matrix(rep(2,2000*10),2000)

cppFunction(func)

system.time(for (i in seq(1,800)) {mmult(a,b)})
system.time(for (i in seq(1,800)) {cbind(a,b)})
identical(mmult(a,b),cbind(a,b))

Ответы на вопрос(1)

Ваш ответ на вопрос