[R] Too slow to execute!
Gavin Simpson
gavin.simpson at ucl.ac.uk
Sun Apr 29 16:27:58 CEST 2007
On Sun, 2007-04-29 at 06:56 -0700, Usman Shehu wrote:
> Greetings,
> I have the following simple function but what worries me is that it
> takes about 5 or more minutes to execute. My machine runs on windows
> with 1.8GHz and 256 Ram.
> > Re=NULL
> > for(i in 1:100000){
> + x=rnorm(20)
> + Re[i]=(x-2*10)/20
> + Re
> + }
> I would appreciate any help on how to make it faster.
>
> Usman
It is not clear exactly what you want to do, but taking what you wrote
literally, there are 3 problems that I see:
1. You haven't allocated sufficient storage space for 'Re'. As
such, at each loop, R has to copy and enlarge the object which
take a all the time.
2. The result of (x-2*10)/20 is a vector of length 20, which you
are trying to force into the space for a vector of length 1
3. In a loop like this, the last line containing just 'Re' does
nothing. If you want 'Re' printed to the console, then you need
to wrap it in print. Quite why you'd want 'Re' flashing up on
the screen 100 000 times is beyond me...
Fixing each of these gives:
## number of permutations
n.perm <- 100000
## storage space for a 100 000 x 20 matrix
Re <- matrix(ncol = 20, nrow = n.perm)
## set up loop
for(i in seq_len(n.perm)) {
x <- rnorm(20)
## store in a row of Re
Re[i,] <- (x-2*10)/20
}
Timing this shows that it runs in 3.5 seconds on my desktop - which has
similar processor but a lot more RAM:
> system.time({
+ n.perm <- 100000
+ Re <- matrix(ncol = 20, nrow = n.perm)
+ for(i in seq_len(n.perm)) {
+ x <- rnorm(20)
+ Re[i,] <- (x-2*10)/20
+ }
+ })
user system elapsed
3.336 0.056 3.394
HTH
G
--
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
Gavin Simpson [t] +44 (0)20 7679 0522
ECRC [f] +44 (0)20 7679 0565
UCL Department of Geography
Pearson Building [e] gavin.simpsonATNOSPAMucl.ac.uk
Gower Street
London, UK [w] http://www.ucl.ac.uk/~ucfagls/
WC1E 6BT [w] http://www.freshwaters.org.uk/
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
More information about the R-help
mailing list