Dear Brian and Bill, Here's an interesting contrasting example (taken from this month's Help Desk column in R News, which Bill has already seen), first verifying the relative timings for Brian's example:
> system.time({ + a <- vector("list", 10001) + for(i in 0:10000) a[[i+1]] <- i + }) user system elapsed 0.03 0.00 0.03 > system.time({ + a <- list() + for(i in 0:10000) a[[i+1]] <- i + }) user system elapsed 0.47 0.02 0.49 > system.time({ + matrices <- vector(mode="list", length=1000) + for (i in 1:1000) + matrices[[i]] <- matrix(rnorm(10000), 100, 100) + }) user system elapsed 2.59 0.00 2.61 > system.time({ + matrices <- list() + for (i in 1:1000) + matrices[[i]] <- matrix(rnorm(10000), 100, 100) + }) user system elapsed 2.61 0.00 2.60 Brian will, I'm sure, have the proper explanation, but I suppose that the NULL elements in the initialized list in the first example provide sufficient space for the integers that eventually get stored there, while that's not the case for the matrices in the second example. I believe that the second example is more typical of what one would actually put in a list. Regards, John ------------------------------ John Fox, Professor Department of Sociology McMaster University Hamilton, Ontario, Canada web: socserv.mcmaster.ca/jfox > -----Original Message----- > From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On > Behalf Of Prof Brian Ripley > Sent: May-28-08 2:04 AM > To: [EMAIL PROTECTED] > Cc: r-help@r-project.org > Subject: Re: [R] how to bind lists recursively > > But pre-allocation still helps > > a <- vector("list", 10001) > for(i in 0:10000) a[[i+1]] <- i > > gives > user system elapsed > 0.042 0.001 0.057 > > on my system, against > user system elapsed > 0.743 0.000 1.907 > > for Bill's 'best' solution. > > On Wed, 28 May 2008, [EMAIL PROTECTED] wrote: > > > This is somewhat subtle. > > > > Rolf's solution (here corrected to...) > > > > a <- list() > > for(i in 0:10000) a[[i+1]] <- i > > > > is the best of the loop solutions (or at least the best I know of). The > > apparently similar > > > > a <- list(0) > > for(i in 1:10000) a <- c(a, list(i)) > > > > will take a lot longer, although the result is the same. For example: > > > >> system.time({ > > a <- list() > > for(i in 0:10000) a[[i+1]] <- i > > }) > > user system elapsed > > 0.59 0.00 0.59 > >> system.time({ > > a <- list(0) > > for(i in 1:10000) a <- c(a, list(i)) > > }) > > user system elapsed > > 6.87 0.00 6.89 > >> > > > > That's a factor of about 11 times as long. The best of the lot is > > > > a <- as.list(0:10000) > > > > of course, but this has problems with generalisation, (which everyone > > suspects is going to be needed here...). > > > > Bill Venables. > > > > > > > > -----Original Message----- > > From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] > > On Behalf Of Rolf Turner > > Sent: Wednesday, 28 May 2008 1:02 PM > > To: Daniel Yang > > Cc: r-help@r-project.org > > Subject: Re: [R] how to bind lists recursively > > > > > > On 28/05/2008, at 2:43 PM, Daniel Yang wrote: > > > >> Dear all, > >> > >> I want to create a list that contains 0,1,2,3, ..., 10000 as its > >> elements. I used the following code, which apparently doesn't work > >> very well. > >> > >> a <- 0 > >> for(i in 1:10000) { > >> a <- list(a, i) > >> } > >> > >> The result is not what I wanted. So how to create the bind lists > >> recursively so that the last element would be the newly added one > >> while the previous elements all remain the same? > > > > a <- list() > > for(i in 1:10000) a[[i]] <- i > > > > (The word ``bind'' is inappropriate.) > > > > cheers, > > > > Rolf Turner > > -- > Brian D. Ripley, [EMAIL PROTECTED] > Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ > University of Oxford, Tel: +44 1865 272861 (self) > 1 South Parks Road, +44 1865 272866 (PA) > Oxford OX1 3TG, UK Fax: +44 1865 272595 > > ______________________________________________ > 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.