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 <frien...@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@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

______________________________________________
R-help@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.

Reply via email to