"svdfcP" <- function(data, U, nperm=100, verbose=TRUE, global=TRUE, ...) { # Calculate original svdfc statistic t <- abs(svdfc(data=data, U=U, ...)) # Generate random svdfc statistics t.rand <- matrix(nrow=nrow(data), ncol=nperm) for(i in 1:nperm) { data.rand <- data[,sample(ncol(data))] t.rand[,i] <- abs(svdfc(data=data.rand, U=U, ...)) if(verbose && !(i %% 10)) cat(paste(i, " ", sep="")) } if(verbose) cat("\n") # Compute p-values t.pvalues <- rep(NA,nrow(data)) for(j in 1:nrow(data)) { if(global) t.pvalues[j] <- min(1, sum(t.rand >= t[j])/nperm) else t.pvalues[j] <- sum(t.rand[j,] >= t[j])/nperm if(verbose && !(j %% 100)) cat(paste(j, " ", sep="")) } if(verbose) cat("\n") return(t.pvalues) }