[R] Convert list of lists <--> data frame
Marc Schwartz
marc_schwartz at comcast.net
Wed Jul 23 16:49:20 CEST 2008
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
More information about the R-help
mailing list