[R] Extract part of a list based on the value of one of the subsubscript (weird, but with a reproducible example for clarity sake)

William Dunlap wdunlap at tibco.com
Mon Mar 17 17:10:50 CET 2014


> > 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.

Using vapply instead of sapply will make the code a little more robust
to errors, since it forces you to declare what type of thing you expect
the function to return and stops if it doesn't return what you expect.

  >  vapply(MyFullList, function(x) x[[9]], FUN.VALUE="")
   [1] "A" "B" "C" "D" "E" "A" "B" "C" "D" "E"
  >  vapply(MyFullList, function(x) x[9], FUN.VALUE="")
  Error in vapply(MyFullList, function(x) x[9], FUN.VALUE = "") :
    values must be type 'character',
   but FUN(X[[1]]) result is type 'list'

Bill Dunlap
TIBCO Software
wdunlap tibco.com


> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf
> Of sylvain willart
> Sent: Monday, March 17, 2014 5:16 AM
> To: Duncan Murdoch
> Cc: r-help
> Subject: Re: [R] Extract part of a list based on the value of one of the subsubscript (weird,
> but with a reproducible example for clarity sake)
> 
> 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.duncan at 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 at 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 at 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.




More information about the R-help mailing list