Embed new cells in an already existing space
I have implemented an RcppParalle and Rcpp version of Mann–Whitney U test with continuity correction, that using 6 threads was about 100X faster then native R function and 5X faster then corresponding serial C++ function. Test were performed using i7 with 6 cores.
The implemented C++ Mann–Whitney U test correspond to the R command wilcox.test(x,y,alternative = “two.sided”, paired = F,exact = F,correct = T).
Below the code used to generate the above table.
set.seed(0) ngenes = 3000; ncells = 5000; expr = matrix( rnorm(ngenes*ncells,mean=0,sd=1), ngenes, ncells) # Benchmarks RcppParallel::setThreadOptions(numThreads = 6) ix1 = 1:round(ncells/2) ix2 = (round(ncells/2)+1):ncells res <- benchmark(apply(X = expr, MARGIN = 1, FUN = function(x,i1=ix1,i2=ix2) wilcox.test(x = x[i1],y = x[i2],alternative = "two.sided", paired = F,exact = F,correct = T)), gficf:::rcpp_WMU_test(M = expr,idx1 = ix1,idx2 = ix2), gficf:::rcpp_parallel_WMU_test(matX = expr[,ix1],matY = expr[,ix2],printOutput = F), replications=3, order="elapsed" ) print(res[,c("test","elapsed","relative")])