Re: [R] applying a function recursively

From: Georg Otto <georg.otto_at_tuebingen.mpg.de>
Date: Thu, 12 Jun 2008 13:11:00 +0200

Hi,

thanks a lot for your help. Somehow rapply had escaped my notice. I also have a follow-up question on that. I would like to "flatten" my output list to a list with only one level. Option "unlist" in rapply returns a character vector, in my example:  

> rapply(test.list, rev, how="unlist")

   I.A1 I.A2 I.A3 I.B1 I.B2 I.B3 I.C1 I.C2 I.C3 II.A.a1     "c" "b" "a" "f" "e" "d" "i" "h" "g" "c" II.A.a2 II.A.a3 II.A.b1 II.A.b2 II.A.b3 II.A.c1 II.A.c2 II.A.c3 II.B1 II.B2

    "b" "a" "f" "e" "d" "i" "h" "g" "f" "e"   II.B3 II.C1 II.C2 II.C3
    "d" "i" "h" "g"

What I rather would like to achieve is a list like this:

$I.A
[1] "c" "b" "a"

$I.B
[1] "f" "e" "d"

$I.C
[1] "i" "h" "g"

$II.A.a
[1] "c" "b" "a"

$II.A.b
[1] "f" "e" "d"

$II.A.c
[1] "i" "h" "g"

$II.B
[1] "f" "e" "d"

$II.C
[1] "i" "h" "g"

Any hint will be appreciated.

Best,

Georg

Prof Brian Ripley <ripley_at_stats.ox.ac.uk> writes:

> See ?rapply
>
> On Wed, 11 Jun 2008, Georg Otto wrote:
>
>>
>> Hi,
>>
>> I have a question about applying a function recursively through a
>> list. Suppose I have a list where the different elements have
>> different levels of recursion:
>>
>>
>>> test.list<-list("I"=list("A"=c("a", "b", "c"), "B"=c("d", "e", "f"), "C"=c("g", "h", "i")),
>> + "II"=list("A"=list("a"=c("a", "b", "c"), "b"=c("d", "e", "f"),
>> + "c"=c("g", "h", "i")),
>> + "B"=c("d", "e", "f"), "C"=c("g", "h", "i")))
>>
>>> test.list
>> $I
>> $I$A
>> [1] "a" "b" "c"
>>
>> $I$B
>> [1] "d" "e" "f"
>>
>> $I$C
>> [1] "g" "h" "i"
>>
>>
>> $II
>> $II$A
>> $II$A$a
>> [1] "a" "b" "c"
>>
>> $II$A$b
>> [1] "d" "e" "f"
>>
>> $II$A$c
>> [1] "g" "h" "i"
>>
>>
>> $II$B
>> [1] "d" "e" "f"
>>
>> $II$C
>> [1] "g" "h" "i"
>>
>>
>>
>> I would like to apply a function recursively to that list, in a way
>> that the function does someting with each vector (eg. rev()) and
>> returns a list of modified vectors that has the same structure as the
>> input list, in my example:
>>
>>
>> $I
>> $I$A
>> [1] "c" "b" "a"
>>
>> $I$B
>> [1] "f" "e" "d"
>>
>> $I$C
>> [1] "i" "h" "g"
>>
>>
>> $II
>> $II$A
>> $II$A$a
>> [1] "c" "b" "a"
>>
>> $II$A$b
>> [1] "f" "e" "d"
>>
>> $II$A$c
>> [1] "i" "h" "g"
>>
>>
>> $II$B
>> [1] "f" "e" "d"
>>
>> $II$C
>> [1] "i" "h" "g"
>>
>>
>>
>> I understand that with a fixed number of recursion levels one can use
>> lapply() in a nested way, but what if the numbers of recursion levels
>> is not fixed or is different between the list elements as it is in my
>> example?
>>
>> Any hint will be appreciated.
>>
>> Best,
>>
>> Georg
>>
>> ______________________________________________
>> 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.
>>
>
> --
> Brian D. Ripley, ripley_at_stats.ox.ac.uk
> Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/
> University of Oxford, Tel: +44 1865 272861 (self)
> 1 South Parks Road, +44 1865 272866 (PA)
> Oxford OX1 3TG, UK Fax: +44 1865 272595
>
> ______________________________________________
> 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. Received on Thu 12 Jun 2008 - 11:17:51 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Thu 12 Jun 2008 - 14:30:40 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.

list of date sections of archive