[R] extracting vectors from lists of lists

David Winsemius dwinsemius at comcast.net
Tue Dec 15 14:56:47 CET 2009


On Dec 14, 2009, at 11:55 AM, Jennifer Young wrote:

> This is just the thing.
> The former version I would never have guessed, but the function(x)  
> version
> is much more intuitive.
>
> Does there exist some section of some manual where these sorts of  
> things
> are explained? I find that figuring out how to access parts of  
> output is
> the trickiest thing in R.
> For instance, it took me ages to figure out that to extract the actual
> derivative from the output of x<-deriv() you have to use attr(x,
> "gradient").

The sort of knowledge can often be inferred by examination of the  
object with str(). Sometimes it is also necessary to examine either  
the print object or a summary object to see how to extract the  
particular results you desire.

-- 
David.
>
> Thanks also to David and Benilton, who also replied with the same
> solution; I received all 3 responses within 10 minutes of asking the
> question!
>
>> Jennifer -
>>    Does this do what you want?
>>
>>> v1 = sapply(output,'[[','vec')
>>> v2 = sapply(output,'[[','other')
>>> v1
>>      [,1] [,2]
>> [1,]    1    6
>> [2,]    2    7
>> [3,]    3    8
>> [4,]    4    9
>> [5,]    5   10
>>> v2
>> [1] "stuff" "stuff"
>>
>> (in more readable form:
>>
>> v1 = sapply(output,function(x)x$vec)
>> v2 = sapply(output,function(x)x$other)    )
>>
>>
>> Notice that if the objects returned by sapply are not conformable,
>> it will return its result in a list.
>>
>>
>> 					- Phil Spector
>> 					 Statistical Computing Facility
>> 					 Department of Statistics
>> 					 UC Berkeley
>> 					 spector at stat.berkeley.edu
>>
>>
>>
>> On Fri, 11 Dec 2009, Jennifer Young wrote:
>>
>>> Good evening
>>>
>>> I often have as output from simulations a list of various values,
>>> vectors
>>> and matrices.
>>> Supposing that I then run said simulation several times, I often  
>>> want to
>>> extract a particular result from each simulation for plotting and,
>>> ideally, put it in a matrix.
>>>
>>> A simple example
>>>
>>> v1 <- 1:5
>>> v2 <- 6:10
>>> other1 <- "stuff"
>>> other2 <- "stuff"
>>>
>>> set1 <- list(v1,other1)
>>> names(set1) <- c("vec","other")
>>> set2 <- list(v2,other2)
>>> names(set2) <- c("vec","other")
>>>
>>> output <- list(set1, set2)
>>>
>>>
>>> Is there some form of lapply() that will allow me to extract v1  
>>> and v2
>>> (ie, the $vec elements) from both sets?
>>> Bonus if I can then put it into a matrix tidily.
>>>
>>> many thanks
>>> Jennifer Young
>>>
>>> ______________________________________________
>>> 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.
>>>
>>
>
> ______________________________________________
> 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.

David Winsemius, MD
Heritage Laboratories
West Hartford, CT




More information about the R-help mailing list