【发布时间】:2012-09-27 21:36:29
【问题描述】:
我想将列表层次结构(类似于 JSON)展平为矩阵或数据框。假设我创建了以下列表:
a <- list(
b1 = list(
c1 = list(
d1 = data.frame()
),
c2 = data.frame()
),
b2 = data.frame()
)
每个字母是另一个级别或降低层次结构。然后我想要一个功能,例如listToMatrix(mylist = a, steps = 2),生成以下内容:
[,1] [,2]
[1,] "b1" "c1"
[2,] "b1" "c2"
[3,] "b2" "b2"
请注意,函数的参数steps = 2 暗示它应该只在层次结构中下降 2 步。此外,如果在一个方向上没有足够的级别可用,请参阅b2,那么它应该在矩阵中保留前一个列表名称。
有什么建议吗? :)
【问题讨论】:
-
有趣。某种递归应用可能会做到这一点。
-
只是为了确定:输出矩阵包含列表名称,而不是数据本身?我们可以假设嵌套列表都有名字吗?
-
@flodel:确切地说,矩阵包含列表名称。在我的示例中,它们都将具有名称。在我将应用它的地方,底层(d1、c2、b2、...)实际上将以
data.frame的形式存储数据,而不是空的list()。 -
@AriB.Friedman:我认为你是对的,在我发现类似问题之前:http://r.789695.n4.nabble.com/How-to-flatten-a-tree-based-on-list-to-a-certain-depth-td1461535.html,但是我无法在我的示例中应用相同的解决方案。我在递归中有点迷失了......