It works like a charm, Plus, this method (logical vector for list extraction) opens a wide range a possibilities for me, thanks a million Duncan
2014-03-17 12:55 GMT+01:00 Duncan Murdoch <murdoch.dun...@gmail.com>: > On 14-03-17 7:27 AM, sylvain willart wrote: > >> Dear R (list)-users >> >> I'm trying to extract part of a list based on the value of one of the >> subsubscript element >> >> As those things are usually quite complicated to explain, let me provide a >> simple reproducible example that closely matches my problem (although my >> actual list has a few thousands elements): >> >> ###### EXAMPLE >> MyFullList<-list() >> v1<-rep(c("A","B","C","D","E"),2) >> v2<-c(rep(1,5),rep(2,5)) >> for (i in 1:10){ >> MyFullList[[i]]<-density(runif(10,0,1)) >> MyFullList[[i]][8]<-i >> MyFullList[[i]][9]<-v1[i] >> MyFullList[[i]][10]<-v2[i] >> } >> ###### end example >> >> Now, my problem is that I would like to extract, in a new list, a part of >> the full list based on the value of it's 9th subscript, let say, "B". This >> new list has to include S3-densities objects (stored in the first 7 >> sub-elements) >> > > You'll need to do this in two steps, you can't do it using only indexing. > The problem is that logical indexing requires a logical vector, and it's > not easy to get one of those when you are starting with a list. So here's > how to do it: > > First create a new character vector containing the 9th subscript of each > element, e.g. > > ninths <- sapply(MyFullList, function(x) x[[9]]) > > You use sapply so that the result is coerced to a character vector, and > x[[9]] rather than x[9] so that each result is a scalar character. > > Do your test on that, and use the result to index the full list: > > MyFullList[ninths == "B"] > > This returns a list containing the cases where the test evaluates to TRUE. > > Duncan Murdoch > > >> Here's what I tried (and the errors I got) >> >> ####### TRIALS >> MyList_v1_B<-MyFullList[MyFullList[[]][9]=="B"] >> # error invalid subscript type 'symbol' >> MyList_v1_B<-MyFullList[MyFullList[][9]=="B"] >> # no errors, but returns an empty list ??? >> MyList_v1_B<-MyFullList[MyFullList[,9]=="B"] >> # error incorrect number of dimensions >> ######## end trials (for now) >> >> Obviously, I'm missing something, >> And I would appreciate any clue to help me perform this task >> >> # Here is my R.version info, although I'm not sure it's relevant here >> >>> R.version >>> >> platform x86_64-unknown-linux-gnu >> arch x86_64 >> os linux-gnu >> system x86_64, linux-gnu >> status >> major 2 >> minor 15.2 >> year 2012 >> month 10 >> day 26 >> svn rev 61015 >> language R >> version.string R version 2.15.2 (2012-10-26) >> nickname Trick or Treat >> >> thanks >> Sylvain Willart >> >> [[alternative HTML version deleted]] >> >> ______________________________________________ >> R-help@r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-help >> PLEASE do read the posting guide http://www.R-project.org/ >> posting-guide.html >> and provide commented, minimal, self-contained, reproducible code. >> >> > [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.