[R] a question on list manipulation

zhenjiang xu zhenjiang.xu at gmail.com
Fri Aug 5 19:04:23 CEST 2011


Exactly! Sorry I get others misunderstood. The uppercase/lowercase is
only a toy example (and a bad one; yours is better than mine). My
question is a more general one: a list is basically a one-to-many
matching, from the names of a list to the elements belonging to each
name. I'd like to reverse the matching, from all the elements to the
names of the list.

On Fri, Aug 5, 2011 at 12:53 PM, Duncan Murdoch
<murdoch.duncan at gmail.com> wrote:
> On 05/08/2011 12:05 PM, zhenjiang xu wrote:
>>
>> Hi R users,
>>
>> I have a list:
>> >  x
>> $A
>> [1] "a"  "b"  "c"
>> $B
>> [1] "b"  "c"
>> $C
>> [1] "c"
>>
>> I want to convert it to a lowercase-to-uppercase list like this:
>> >  y
>> $a
>> [1] "A"
>> $b
>> [1] "A"  "B"
>> $c
>> [1] "A"  "B"  "C"
>>
>> In a word, I want to reverse the list names and the elements under
>> each list name. Is there any quick way to do that? Thanks
>
> I interpreted this question differently from the others, and your example is
> ambiguous as to which is the right interpretation.  I thought you wanted to
> swap names and elements,  so
>
>> x <- list(A=c("d", "e", "f"), B=c("d", "e"), C=c("d"))
>> x
> $A
> [1] "d" "e" "f"
>
> $B
> [1] "d" "e"
>
> $C
> [1] "d"
>
> would become
>
>> list(d=c("A", "B", "C"), e=c("A", "B"), f="A")
> $d
> [1] "A" "B" "C"
>
> $e
> [1] "A" "B"
>
> $f
> [1] "A"
>
> I don't know a slick way to do this; I'd just do it by brute force, looping
> over the names of x.
>
> Duncan Murdoch
>



-- 
Best,
Zhenjiang



More information about the R-help mailing list