[R] transposing a list of vectors
Michael Friendly
friendly at yorku.ca
Fri Jan 15 15:15:35 CET 2010
Thanks, Henrique
I *do* need to preserve the type of each list element (num or chr).
Thus, a first step might be
> as.data.frame(testlist, stringsAsFactors=FALSE)
shape cell.fill back.fill scale.max
1 0 red white 100
2 0 blue white 100
3 2 green white 100
> str(as.data.frame(testlist, stringsAsFactors=FALSE))
'data.frame': 3 obs. of 4 variables:
$ shape : num 0 0 2
$ cell.fill: chr "red" "blue" "green"
$ back.fill: chr "white" "white" "white"
$ scale.max: num 100 100 100
I think, with this mod, your #2 gives me what I want:
wanted.henrique <- lapply(split(x <- as.data.frame(testlist,
stringsAsFactors=FALSE), 1:nrow(x)), as.list)
> str(wanted.henrique)
List of 3
$ 1:List of 4
..$ shape : num 0
..$ cell.fill: chr "red"
..$ back.fill: chr "white"
..$ scale.max: num 100
$ 2:List of 4
..$ shape : num 0
..$ cell.fill: chr "blue"
..$ back.fill: chr "white"
..$ scale.max: num 100
$ 3:List of 4
..$ shape : num 2
..$ cell.fill: chr "green"
..$ back.fill: chr "white"
..$ scale.max: num 100
Henrique Dallazuanna wrote:
> Try this:
>
> #'1) But apply converts all to 'character'
> apply(as.data.frame(testlist), 1, as.list)
>
> #2)
> lapply(split(x <- as.data.frame(testlist), 1:nrow(x)), as.list)
>
> On Fri, Jan 15, 2010 at 11:09 AM, Michael Friendly <friendly at yorku.ca> wrote:
>
>> I have a list of vectors, all forced to be the same length:
>>
>> testlist <- list(
>> shape=c(0, 0, 2),
>> cell.fill=c("red","blue","green"),
>> back.fill=rep("white",3),
>> scale.max=rep(100,3)
>> )
>>
>>> str(testlist)
>>>
>> List of 4
>> $ shape : num [1:3] 0 0 2
>> $ cell.fill: chr [1:3] "red" "blue" "green"
>> $ back.fill: chr [1:3] "white" "white" "white"
>> $ scale.max: num [1:3] 100 100 100
>>
>> I need to 'transpose' them into a list of lists with named values like so:
>>
>> wanted <- list(
>> list(shape=0, cell.fill="red", back.fill="white", scale.max=100),
>> list(shape=0, cell.fill="blue", back.fill="white", scale.max=100),
>> list(shape=2, cell.fill="green", back.fill="white", scale.max=100)
>> )
>>
>>> str(wanted)
>>>
>> List of 3
>> $ :List of 4
>> ..$ shape : num 0
>> ..$ cell.fill: chr "red"
>> ..$ back.fill: chr "white"
>> ..$ scale.max: num 3
>> $ :List of 4
>> ..$ shape : num 0
>> ..$ cell.fill: chr "blue"
>> ..$ back.fill: chr "white"
>> ..$ scale.max: num 3
>> $ :List of 4
>> ..$ shape : num 2
>> ..$ cell.fill: chr "green"
>> ..$ back.fill: chr "white"
>> ..$ scale.max: num 3
>>
>> How can I do this in general?
>>
>> --
>> Michael Friendly Email: friendly AT yorku DOT ca Professor, Psychology
>> Dept.
>> York University Voice: 416 736-5115 x66249 Fax: 416 736-5814
>> 4700 Keele Street http://www.math.yorku.ca/SCS/friendly.html
>> Toronto, ONT M3J 1P3 CANADA
>>
>> ______________________________________________
>> 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.
>>
>>
>
>
>
>
--
Michael Friendly Email: friendly AT yorku DOT ca
Professor, Psychology Dept.
York University Voice: 416 736-5115 x66249 Fax: 416 736-5814
4700 Keele Street http://www.math.yorku.ca/SCS/friendly.html
Toronto, ONT M3J 1P3 CANADA
More information about the R-help
mailing list