[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