Skip to content

extraction from a list of vectors

3 messages · Jeff Miller, Peter Dalgaard, Duncan Murdoch

#
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 

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
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 at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
#
Jeff Miller <jmiller at xcaliber.com> writes:
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.)
#
On Sun, 17 Jun 2001 17:10:26 -0500, you wrote:

            
I don't know if this is fast or not, but I think it gives the result
you want:

unlist(sapply(myidx,function(x) mylist[[x]]))

Duncan Murdoch

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
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 at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._