cbind in R is time consuming for repeated calls, but also for different data types. I wrote code that is 3 times faster than cbind when linking two matrices. But the bind_cols in the dplyr package is just 100X faster than cbind . It is a pity that he can not accept the matrix as input. Can someone make the code below faster. Also, how to quickly snap a sparse matrix? Here is the code I used:
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))
source share