[R] efficient code. how to reduce running time?

Charilaos Skiadas skiadas at hanover.edu
Mon Jan 22 15:59:33 CET 2007


On Jan 21, 2007, at 8:11 PM, John Fox wrote:

> Dear Haris,
>
> Using lapply() et al. may produce cleaner code, but it won't  
> necessarily
> speed up a computation. For example:
>
>> X <- data.frame(matrix(rnorm(1000*1000), 1000, 1000))
>> y <- rnorm(1000)
>>
>> mods <- as.list(1:1000)
>> system.time(for (i in 1:1000) mods[[i]] <- lm(y ~ X[,i]))
> [1] 40.53  0.05 40.61    NA    NA
>>
>> system.time(mods <- lapply(as.list(X), function(x) lm(y ~ x)))
> [1] 53.29  0.37 53.94    NA    NA
>
Interesting, in my system the results are quite different:

 > system.time(for (i in 1:1000) mods[[i]] <- lm(y ~ X[,i]))
[1] 192.035  12.601 797.094   0.000   0.000
 > system.time(mods <- lapply(as.list(X), function(x) lm(y ~ x)))
[1]  59.913   9.918 289.030   0.000   0.000

Regular MacOSX install with ~760MB memory.

> In cases such as this, I don't even find the code using *apply()  
> easier to
> read.
>
> Regards,
>  John

Haris



More information about the R-help mailing list