首页 > 解决方案 > 根据对应元素输出嵌套列表的名称

问题描述

如何输出与其元素对应的嵌套列表的名称?在这个例子中,我想输出 if ("cat") then "foo" , if("dog") then "bar".. etc. 我想避免使用多个 if else 语句,因为可能有 100变量

parms <- list(
  "foo"    = list( id = "cat",    range = c(1,10)),
  "bar"    = list( id = "dog",    range = c(20,30)),
  "var"    = list( id = "mouse",  range = c(40,50))
)
                   

标签: rlistnested-lists

解决方案


根据@A5C1D2H2I1M1N2O1R2T1 评论中的建议:

names(grep("cat", sapply(parms, "[[", "id"), value = TRUE))
[1] "foo"

里面有什么:

  • 该部分使用每个(cat, dog, ...) 和每个嵌套列表的名称 (foo, bar, ...)sapply(parms, "[[", "id")创建一个命名向量id
  • 返回一个名为 vector的grep元素,其中包含重合元素及其名称。
  • names部分从命名向量中提取名称(在我们的例子中为 foo)。

推荐阅读