# [R] Decomposing a List

Bert Gunter gunter.berton at gene.com
Fri Apr 26 06:13:55 CEST 2013

```Well...

WIth the same list,l,as before:

> system.time(x3 <- simplify2array(l))
user  system elapsed
2.11    0.05    2.20
> system.time(x2 <- f2(l)) ## the matrix(unlist(...))  one
user  system elapsed
0.11    0.00    0.11
> identical(x2,x3)
[1] TRUE

So kind of a big difference if you care about efficiency...
(and I can't remember all those specialized functions, anyway!)

-- Bert

On Thu, Apr 25, 2013 at 8:53 PM, David Winsemius <dwinsemius at comcast.net> wrote:
>
> On Apr 25, 2013, at 7:53 AM, Bert Gunter wrote:
>
>> Well, what you really want to do is convert the list to a matrix, and
>> it can be done directly and considerably faster than with the
>> (implicit) looping of sapply:
>>
>> f1 <- function(l)sapply(l,"[",1)
>> f2 <- function(l)matrix(unlist(l),nr=2)
>> l <- strsplit(paste(sample(LETTERS,1e6,rep=TRUE),sample(1:10,1e6,rep=TRUE),sep="+"),"+",fix=TRUE)
>
> Consider this alternative:
>
> L = list( c("A1","B1"), c("A2","B2"), c("A3","B3") )
> simplify2array(L)
>      [,1] [,2] [,3]
> [1,] "A1" "A2" "A3"
> [2,] "B1" "B2" "B3"
>
> --
> David.
>
>>
>
>> ## Then you get these results:
>>
>>> system.time(x1 <- f1(l))
>>   user  system elapsed
>>   1.92    0.01    1.95
>>> system.time(x2 <- f2(l))
>>   user  system elapsed
>>   0.06    0.02    0.08
>>> system.time(x2 <- f2(l)[1,])
>>   user  system elapsed
>>    0.1     0.0     0.1
>>> identical(x1,x2)
>> [1] TRUE
>>
>>
>> Cheers,
>> Bert
>>
>>
>>
>>
>>
>>
>> On Thu, Apr 25, 2013 at 3:32 AM, Ted Harding <Ted.Harding at wlandres.net> wrote:
>>> Thanks, Jorge, that seems to work beautifully!
>>> (Now to try to understand why ... but that's for later).
>>> Ted.
>>>
>>> On 25-Apr-2013 10:21:29 Jorge I Velez wrote:
>>>> Dear Dr. Harding,
>>>>
>>>> Try
>>>>
>>>> sapply(L, "[", 1)
>>>> sapply(L, "[", 2)
>>>>
>>>> HTH,
>>>> Jorge.-
>>>>
>>>>
>>>>
>>>> On Thu, Apr 25, 2013 at 8:16 PM, Ted Harding <Ted.Harding at wlandres.net>wrote:
>>>>
>>>>> Greetings!
>>>>> For some reason I am not managing to work out how to do this
>>>>>
>>>>> As a result of applying strsplit() to a vector of character strings,
>>>>> I have a long list L (N elements), where each element is a vector
>>>>> of two character strings, like:
>>>>>
>>>>>  L[1] = c("A1","B1")
>>>>>  L[2] = c("A2","B2")
>>>>>  L[3] = c("A3","B3")
>>>>>  [etc.]
>>>>>
>>>>>> From L, I wish to obtain (as directly as possible, e.g. avoiding
>>>>> a loop) two vectors each of length N where one contains the strings
>>>>> that are first in the pair, and the other contains the strings
>>>>> which are second, i.e. from L (as above) I would want to extract:
>>>>>
>>>>>  V1 = c("A1","A2","A3",...)
>>>>>  V2 = c("B1","B2","B3",...)
>>>>>
>>>>> Suggestions?
>>>>>
>>>>> With thanks,
>>>>> Ted.
>>>>>
>>>>> -------------------------------------------------
>>>>> E-Mail: (Ted Harding) <Ted.Harding at wlandres.net>
>>>>> Date: 25-Apr-2013  Time: 11:16:46
>>>>> This message was sent by XFMail
>>>>>
>>>>> ______________________________________________
>>>>> R-help at r-project.org mailing list
>>>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>>>> http://www.R-project.org/posting-guide.html
>>>>> and provide commented, minimal, self-contained, reproducible code.
>>>>>
>>>
>>> -------------------------------------------------
>>> E-Mail: (Ted Harding) <Ted.Harding at wlandres.net>
>>> Date: 25-Apr-2013  Time: 11:31:57
>>> This message was sent by XFMail
>>>
>>> ______________________________________________
>>> R-help at r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> and provide commented, minimal, self-contained, reproducible code.
>>
>>
>>
>> --
>>
>> Bert Gunter
>> Genentech Nonclinical Biostatistics
>>
>> Internal Contact Info:
>> Phone: 467-7374
>> Website:
>>
>> ______________________________________________
>> R-help at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> and provide commented, minimal, self-contained, reproducible code.
>
> David Winsemius
> Alameda, CA, USA
>

--

Bert Gunter
Genentech Nonclinical Biostatistics

Internal Contact Info:
Phone: 467-7374
Website: