[R] Extract part of a list based on the value of one of the subsubscript (weird, but with a reproducible example for clarity sake)
Duncan Murdoch
murdoch.duncan at gmail.com
Mon Mar 17 12:55:00 CET 2014
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.
>
More information about the R-help
mailing list