作为嵌套列表实现的树的访问级别

access levels of a tree implemented as nested list

我将这棵树实现为嵌套列表:

 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,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))