From: Peter Dalgaard BSA (p.dalgaard@biostat.ku.dk)
Date: Mon 18 Jun 2001 - 09:50:05 EST
Message-ID: <x2hexebr9u.fsf@blueberry.kubism.ku.dk>
Jeff Miller <jmiller@xcaliber.com> writes:
> Hi ,
> I know this should be easy, but I haven't figured out a fast way to
> do it.
> I have a list of vectors: mylist <- list(vector1, vector2, ...,
> vectorN).
> (The vectors are made of integers. They vary in length from about 1
> to 10).
> I also have a vector of indices: myidx <- c( i1, i2, ..., iN).
> From these I'd like to make this: newvector <- c(vector1[i1],
> vector2[i2], ..., vectorN[iN]).
> It's easy to do this using a for loop, but I need something that
> will be fast for lists
> with lengths of about 100,000. I've thought about using lapply, but
> don't see how I can use it with "myidx".
> Thanks in advance,
> Jeff Miller
I don't think it *is* easy. Generally, one gets stalled on these
problems involving two or more parallel vectors. Occasionally the idea
of having a "multiapply" function pops up, but nothing has transpired
yet. The canonical way would be to use
sapply(1:N,function(i)mylist[i][myidx[i]])
but that is not likely to be much faster than a for loop. If all the
vectors were the same length, mylist could have been a matrix and
matrix indexing (myarray[cbind(1:N,myidx)]) would work, but there's
nothing similar for a list of vectors of unequal length. So if you
need the speed badly, I think you have to go to the C level. (A rather
nicely sized little exercise for learning the .External interface, I
would expect.)
-- O__ ---- Peter Dalgaard Blegdamsvej 3 c/ /'_ --- Dept. of Biostatistics 2200 Cph. N (*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918 ~~~~~~~~~~ - (p.dalgaard@biostat.ku.dk) FAX: (+45) 35327907 -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-help-request@stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
This archive was generated by hypermail 2b30 : Fri 22 Jun 2001 - 18:58:45 EST