[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