Chris Knight wrote:
I am tying myself in knots over subscripts when applied to lists
I have a list along the lines of:
lis<-list(c("a","b","next","want1","c"),c("d", "next", "want2", "a"))
From which I want to extract the values following "next" in each
member of the list, i.e. something along the lines of answer<-c(
"want1", "want2"). Is this possible without using loops? The elements of
lis are of different lengths and "next" occurs once per element
somewhere in the middle.
The thought process behind this is:
It's easy enough to do it for an individual element of the list:
lis[[1]][match("next",lis[[1]])+1]
but how to do that to all elements of the list? I can get their indices
e.g. as a list using lapply:
lapply(lapply(lis,match,x="next"),"+",y=1)
or return a particular subscript using:
lapply(lis,"[", i=3)
but don't see how one could combine the two to get answer<-c("want1",
"want2") without resorting to:
answer<-character
for(s in 1:length(lis)){
answer<-c(answer,lis[[s]][match("next",lis[[s]])+1])
}
Am I missing something obvious (or non-obvious)? I suppose the secondary
question is 'should I care?'. I am intending to use this on hundreds of
lists sometimes with tens of thousands of elements, with more than one
version of "next" in each, so felt that the lower efficiency of looping
was likely to matter.
Any help much appreciated,
Chris
> unlist(lis)[which(unlist(lis)=="next")+1]
[1] "want1" "want2"
______________________________________________
[EMAIL PROTECTED] mailing list
https://www.stat.math.ethz.ch/mailman/listinfo/r-help