Skip to content

how to search a list that contains multiple dissimilar vectors?

4 messages · Eric Rupley, Eik Vettorazzi, Gerrit Eichner

#
Dear All,

This is a simple question, but I'm stumped about the simplest way to search a list object such as the following:

This randomish snippet:

n <- c(round(runif(round(runif(1,1,10),0),1,10),0))
alist <- new("list")
for (i in seq_along(n)) {
	alist[[i]] <- c(round(runif(round(runif(1,1,10),0),1,10),0))
}
names(alist) <- sample(letters[1:length(n)])
rm(n);c(alist)


...produces something like this:

$d
[1] 4

$b
[1] 3 5 3

$a
[1]  2  5  7  3 10  3  4  9  9

$c
[1]  6  3  7  4  5 10  8 10  3

My question is how does one search the list for a given value, in a most compressed set of commands, in order two return two separate indices: a) the index of the list element(s) containing the value, and b) the index of the matching value(s) within the vector.

Right now, I'm writing cumbersome loops to iterate though the elements, but there must be a simple, effective method to which I have not found a reference.

Many thanks in advance, and apologies if I have overlooked a reference passage.  
Best,
Eric

--
 Eric Rupley
 University of Michigan, Museum of Anthropology
 1109 Geddes Ave, Rm. 4013
 Ann Arbor, MI 48109-1079
#
Hi Eric,
something like the following might me a starter

(index<-lapply(alist,function(x)which(x==x.search)))

cheers.

Am 28.03.2013 08:40, schrieb Eric Rupley:

  
    
#
Hi, Eric,

as a quick hack, does

spots <- sapply( alist,
                  function( listcomp)
                   which( listcomp == value.to.look.for) )

spots[ sapply( spots, length) == 0] <- NULL

do what you want?


Regards  --  Gerrit
On Thu, 28 Mar 2013, Eric Rupley wrote:

            
#
Gerrit, Eik -- 

Thanks very much for your replies!  This answers my primary question -- was I missing some simple command that did not resort to function() in some manner.  Both are much more streamlined than my 7 line laughable beast of solution.

Best,
Eric
On Mar 28, 2013, at 2:29 AM, Gerrit Eichner wrote:

            

        
On Mar 28, 2013, at 2:21 AM, Eik Vettorazzi wrote: