我将此树实现为嵌套列表:
1
/ \
2 3
/ \
4 5
> tree <- list(1, list(2), list(3, list(4), list(5)))
> data.tree::FromListSimple(tree, nodeName = "1")
levelName
1 1
2 ¦--1
3 °--2
4 ¦--1
5 °--2
如何在这个示例中提取树的级别
第1级:[1]第2级:[2,3]第3级:[4,5]
tree[[1]]
是第一级,这很容易。但tree[[2]]
只是2
。
所以第二级将是c(tree[[2]], tree[[3]][1])
如何将此概括为任何表示为嵌套列表的树结构?
使用普通的base
R,您可以使用递归函数执行此操作(只要您的tree
不是太大)。例如:
getElems <- function(tree, depth, level) {
if (depth == level) {
if (is.list(tree))
tree[[1]]
} else {
sapply(tree, getElems, depth = depth + 1, level = level)
}
}
# first level
unlist(getElems(tree, 1, 1))
# second level (always starting the search from depth = 1)
unlist(getElems(tree, 1, 2))
# third level
unlist(getElems(tree, 1, 3))