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

Reply via email to