R中嵌套列表的叶子名称

names of leaves of nested list in R

我想检查两个嵌套列表在最后一层是否具有相同的名称。

如果 unlist 提供了不连接名称的选项,这将是微不足道的。但是,看起来我需要一些功能 leaf.names():

X <- list(list(a = pi, b = list(alpha.c = 1:5, 7.12)), d = "a test")

leaf.names(X)
[1] "a" "alpha.c" "NA" "d"

我想尽可能避免任何不雅的 grepping。我觉得应该有一些简单的方法可以使用 rapplyunlist...

leaf.names <- function(X) names(rlang::squash(X))

leaf.names <- function(X){
  while(any(sapply(X, is.list))) X <- purrr::flatten(X) 
  names(X)
}

给予

leaf.names(X)
# [1] "a"       "alpha.c" ""        "d"