检查R中嵌套命名列表中的名称

时间:2016-09-06 09:48:11

标签: r nested-lists

我在R中有一个嵌套的命名列表并给出一个名称,我想检查该嵌套列表的名称中是否存在该列表。

对于1级深度,given_name %in% names(list)工作正常。但是如何在不同级别搜索名称。

对于前: 列表(a:1, b:1, c:( c_a:2,c_b:3 ))。如何检查列表中是否有c$c_a

1 个答案:

答案 0 :(得分:1)

予。创建嵌套列表

  Your_list <- list(a=list(x=c(4,5)),b=list(c=list(y=c(8,99)),d=c("a","b")))

  names(Your_list)
  # [1] "a" "b"

  names(.Internal(unlist(Your_list, TRUE, TRUE)))
  # [1] "a.x1"   "a.x2"   "b.c.y1" "b.c.y2" "b.d1"   "b.d2" 

  str(Your_list)
  # List of 2
  #  $ a:List of 1
  #   ..$ x: num [1:2] 4 5
  #  $ b:List of 2
  #   ..$ c:List of 1
  #   .. ..$ y: num [1:2] 8 99
  #   ..$ d: chr [1:2] "a" "b"

II。从列表中删除嵌套

  New_list <- unlist(Your_list)
  New_list
  #   a.x1   a.x2 b.c.y1 b.c.y2   b.d1   b.d2 
  #    "4"    "5"    "8"   "99"    "a"    "b" 

  class(New_list)
  # [1] "character"

  str(New_list)
  #  Named chr [1:6] "4" "5" "8" "99" "a" "b"
  #  - attr(*, "names")= chr [1:6] "a.x1" "a.x2" "b.c.y1" "b.c.y2" ...

III。将其转换为列表而不嵌套

  New_list <- as.list(New_list)
  New_list
  # $a.x1
  # [1] "4"

  # $a.x2
  # [1] "5"

  # $b.c.y1
  # [1] "8"

  # $b.c.y2
  # [1] "99"

  # $b.d1
  # [1] "a"

  # $b.d2
  # [1] "b"

  class(New_list)
  # [1] "list"

  str(New_list)
  # List of 6
  #  $ a.x1  : chr "4"
  #  $ a.x2  : chr "5"
  #  $ b.c.y1: chr "8"
  #  $ b.c.y2: chr "99"
  #  $ b.d1  : chr "a"
  #  $ b.d2  : chr "b"

IV。通过名称

访问平面列表New_list中的元素
  New_list$a.x1
  # [1] "4"
  New_list$a.x2
  # [1] "5"
  New_list$b.d2
  # [1] "b"
  New_list$b.c.y2
  # [1] "99"

注意:此处,不会为展平列表的元素保留类。取消列出列表时,您需要保留该类。

正如你所看到的那样,所有人都是最后的角色。