【问题标题】:names of leaves of nested list in RR中嵌套列表的叶子名称
【发布时间】:2018-06-18 17:59:14
【问题描述】:

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

如果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...

【问题讨论】:

  • 看起来reshape2::melt(X) 可能是最简单的
  • 可能是d=reshape2::melt(X); apply( unique(d[,-1]), 1, function(row) row[which(!is.na(row))[1]]),但不是很优雅
  • 有人知道简单的基本 R 答案吗?

标签: r list nested names


【解决方案1】:
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"  

【讨论】:

  • 有人知道如何在基础 R 中简洁地做到这一点吗?
猜你喜欢
  • 1970-01-01
  • 2018-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-21
  • 1970-01-01
  • 2022-11-12
相关资源
最近更新 更多