On 5/23/06, Matthew Dowle <[EMAIL PROTECTED]> wrote: > > Thanks. > > I looked some more and found that L$b[1:10] doesn't seem to copy L$b. If > that's correct why does L[[2]][1:10] copy L[[2]] ?
I forgot, this is probably what I was told in discussion about UseMethod("$") the other day: The "$" operator is very special. Its second argument (the one after the operator) is not evaluated. For "[[" it is. This is probably also why the solution with environment works. I think some with the more knowledge about the R core has to give you the details on this, and especially why "$" is special in the first place (maybe because of the example you're giving). /Henrik > > -----Original Message----- > > From: Prof Brian Ripley [mailto:[EMAIL PROTECTED] > > Sent: 23 May 2006 16:23 > > To: Matthew Dowle > > Cc: 'r-help@stat.math.ethz.ch' > > Subject: Re: [R] Avoiding a memory copy by [[ > > > > > > On Tue, 23 May 2006, Matthew Dowle wrote: > > > > > > > > Hi, > > > > > > n = 10000000 > > > L = list(a=integer(n), b=integer(n)) > > > > > > L[[2]][1:10] gives me the first 10 items of the 2nd vector in the > > > list L. It works fine. However it appears to copy the > > entire L[[2]] > > > vector in memory first, before subsetting it. It seems reasonable > > > that "[[" can't know that all that is to be done is to do [1:10] on > > > the result and therefore a copy in memory of the entire > > vector L[[2]] > > > is not required. Only a new vector length 10 need be > > created. I see > > > why [[ needs to make a copy in general. > > > > > > L[[c(2,1)]] gives me the 1st item of the 2nd vector in the > > list L. > > > It works fine, and does not appear to copy L[[2]] in > > memory first. > > > Its much faster as n grows large. > > > > > > But I need more than 1 element of the vector .... > > L[[c(2,1:10)]] fails > > > with "Error: recursive indexing failed at level 2" > > > > Note that [[ ]] is documented to only ever return one > > element, so this is > > invalid. > > > > > Is there a way I can obtain the first 10 items of L[[2]] without a > > > memory copy of L[[2]] ? > > > > Use .Call > > > > -- > > 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@stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html > > ______________________________________________ R-help@stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html