Re: [R] Convert list of lists <--> data frame

From: Marc Schwartz <marc_schwartz_at_comcast.net>
Date: Wed, 23 Jul 2008 09:49:20 -0500

on 07/23/2008 08:23 AM Michael Friendly wrote:

> For a function that takes an argument as a list of lists of parameters, 
> I'd like to be able to convert that
> to a data.frame and vice versa, but can't quite figure out how.
> 
> pats <- list(structure(list(shape = 0, shape.col = "black", shape.lty = 1,
>    cell.fill = "white", back.fill = "white", label = 1, label.size = 1,
>    ref.col = "gray80", ref.grid = "yes", scale.max = 100), .Names = 
> c("shape",
> "shape.col", "shape.lty", "cell.fill", "back.fill", "label",
> "label.size", "ref.col", "ref.grid", "scale.max")), structure(list(
>    shape = 0, shape.col = "black", shape.lty = 1, cell.fill = "pink",
>    back.fill = "white", label = 1, label.size = 1, ref.col = "gray80",
>    ref.grid = "yes", scale.max = 100), .Names = c("shape", "shape.col",
> "shape.lty", "cell.fill", "back.fill", "label", "label.size",
> "ref.col", "ref.grid", "scale.max")), structure(list(shape = 0,
>    shape.col = "black", shape.lty = 1, cell.fill = "red", back.fill = 
> "white",
>    label = 1, label.size = 1, ref.col = "gray80", ref.grid = "yes",
>    scale.max = 100), .Names = c("shape", "shape.col", "shape.lty",
> "cell.fill", "back.fill", "label", "label.size", "ref.col", "ref.grid",
> "scale.max")))
> 
> So, I want pats.df to have 10 columns,
> c("shape",  "shape.col", "shape.lty", "cell.fill", "back.fill", "label",
> "label.size", "ref.col", "ref.grid", "scale.max"), and 3 rows for this 
> example.
> 
> Given pats.df, I'd want to turn that back to pats.
> 
> thanks for any help,
> -Michael

Michael,

One approach for the first issue:

 > do.call(rbind, lapply(pats, data.frame))    shape shape.col shape.lty cell.fill back.fill label label.size

1     0     black         1     white     white     1          1
2     0     black         1      pink     white     1          1
3     0     black         1       red     white     1          1
   ref.col ref.grid scale.max
1  gray80      yes       100
2  gray80      yes       100
3  gray80      yes       100


Given that:

 > lapply(seq(along = rownames(pats.df)),

          function(i) as.list(pats.df[i, ]))
[[1]]
[[1]]$shape
[1] 0

[[1]]$shape.col
[1] black

Levels: black

[[1]]$shape.lty
[1] 1

[[1]]$cell.fill
[1] white
Levels: white pink red

[[1]]$back.fill
[1] white

Levels: white

[[1]]$label
[1] 1

[[1]]$label.size
[1] 1

[[1]]$ref.col
[1] gray80
Levels: gray80

[[1]]$ref.grid
[1] yes

Levels: yes

[[1]]$scale.max
[1] 100

[[2]]
[[2]]$shape
[1] 0

[[2]]$shape.col
[1] black

Levels: black

[[2]]$shape.lty
[1] 1

[[2]]$cell.fill
[1] pink

Levels: white pink red

[[2]]$back.fill
[1] white

Levels: white

[[2]]$label
[1] 1

[[2]]$label.size
[1] 1

[[2]]$ref.col
[1] gray80

Levels: gray80

[[2]]$ref.grid
[1] yes

Levels: yes

[[2]]$scale.max
[1] 100

[[3]]
[[3]]$shape
[1] 0

[[3]]$shape.col
[1] black

Levels: black

[[3]]$shape.lty
[1] 1

[[3]]$cell.fill
[1] red

Levels: white pink red

[[3]]$back.fill
[1] white

Levels: white

[[3]]$label
[1] 1

[[3]]$label.size
[1] 1

[[3]]$ref.col
[1] gray80

Levels: gray80

[[3]]$ref.grid
[1] yes

Levels: yes

[[3]]$scale.max
[1] 100

HTH, Marc Schwartz



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 Wed 23 Jul 2008 - 16:15:39 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 Wed 23 Jul 2008 - 16:32:10 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