[BioC] Random Matrices
Sean Davis
sdavis2 at mail.nih.gov
Thu Apr 3 21:57:17 CEST 2008
On Thu, Apr 3, 2008 at 3:41 PM, Matthew R. Helmus <mrhelmus at wisc.edu> wrote:
> Hi Sean,
> Thanks for your reply. I have a large data matrix (500x50) of values and I
> need to:
> 1) randomize
> 2) for each row apply a function
> 3) calculate the mean of the outputs of the function across the rows
> 4) store this mean
> 5) then repeat the loop 10,000 times to produce a vector of 10,000 random
> means.
>
> I have used the following code, apply(X, 1, sample), to make a randomized
> matrix maintaining row sums, but the for loop runs a bit slow that creates
> each random matrix. I have not developed or found code that maintains both
> row and sum totals while randomizing.
> a <- matrix(rnorm(500*50),nc=50,nr=500)
> for(i in 1:100) {b <- apply(a,1,sample)}
> system.time(for(i in 1:100) {b <- apply(a,1,sample)})
user system elapsed
1.164 0.008 1.170
> system.time(for(i in 1:100) {b <- a[,sample(ncol(a),replace=FALSE)]})
user system elapsed
0.024 0.000 0.022
So, at least the randomization code can be quite a bit more efficient
than your "apply(X,1,sample)". For 10000 replicates, it runs is just
over 2 seconds. Give this a try and then you may want to let us know
more details if you are still having problems.
Sean
More information about the Bioconductor
mailing list