Preallocation of lists does speed things up. The following shows
time quadratic in size when there is no preallocation and linear
growth when there is, for size in the c. 10^4 to 10^6 region:
f <- function(n, preallocate) { v <- if(preallocate)vector("list",n) else list() ;
for(i in seq_len(n)) v[[i]] <- i ; v }
identical(f(17,pre=TRUE), f(17,pre=FALSE))
[1] TRUE
system.time(f(n=1e4, preallocate=FALSE))
user system elapsed
0.324 0.000 0.326
system.time(f(n=2e4, preallocate=FALSE)) # 2x n, 4x time
user system elapsed
1.316 0.012 1.329
system.time(f(n=4e4, preallocate=FALSE)) # ditto
user system elapsed
5.720 0.028 5.754
system.time(f(n=1e4, preallocate=TRUE))
user system elapsed
0.016 0.000 0.017
system.time(f(n=2e4, preallocate=TRUE)) # 2x n, 2x time
user system elapsed
0.032 0.004 0.036
system.time(f(n=4e4, preallocate=TRUE)) # ditto
user system elapsed
0.068 0.000 0.069
system.time(f(n=4e5, preallocate=TRUE)) # 10x n, 10x time
user system elapsed
0.688 0.000 0.688
Above 10^6 there is some superlinearity
system.time(f(n=4e6, preallocate=TRUE)) # 10x n, 20x time
user system elapsed
11.125 0.052 11.181
Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com
-----Original Message-----
From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] On
Behalf Of Bert Gunter
Sent: Thursday, July 19, 2012 9:11 AM
To: Hadley Wickham
Cc: r-help@r-project.org
Subject: Re: [R] complexity of operations in R
Hadley et. al:
Indeed. And using a loop is a poor way to do it anyway.
v <- as.list(rep(FALSE,dotot))
is way faster.
-- Bert
On Thu, Jul 19, 2012 at 8:50 AM, Hadley Wickham <had...@rice.edu> wrote:
On Thu, Jul 19, 2012 at 8:02 AM, Jan van der Laan <rh...@eoos.dds.nl> wrote:
Johan,
Your 'list' and 'array doubling' code can be written much more efficient.
The following function is faster than your g and easier to read:
g2 <- function(dotot) {
v <- list()
for (i in seq_len(dotot)) {
v[[i]] <- FALSE
}
}
Except that you don't need to pre-allocate lists...
Hadley
--
Assistant Professor / Dobelman Family Junior Chair
Department of Statistics / Rice University
http://had.co.nz/
______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
--
Bert Gunter
Genentech Nonclinical Biostatistics
Internal Contact Info:
Phone: 467-7374
Website:
http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-
biostatistics/pdb-ncb-home.htm
______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.