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