如果我有一个完全不可预测且似乎毫无意义的嵌套列表,如下所示:
weird_nested_structure <- (list(
Record = "First Record",
Pets = list(Rabbit = "True",
Gerbil = "True"),
Record = "Second Record",
Pets = list(Pets2 = list(Rabbit = "True")),
Record = "Third Record",
Rabbit = list(Rabbit = "True"),
Record = "Fourth Record",
Pets = list(Dog = "True")))
如何仅提取具有名为“兔子”的元素的记录?
这将返回记录1、2和3,但不会返回不是 4,因为记录4中仅有的元素被命名为“宠物”和“狗”
为了清楚起见,我想将此列表筛选为仅包含名称/变量名为“兔子”的记录,而不管此变量恰好位于哪个嵌套级别。因此理想的解决方案将返回一个列表上面的嵌套列表中的记录1、2和3,但不是4。
在R中有可能吗?
答案 0 :(得分:1)
以R为基础的一种方法是编写一个递归函数,该函数将检查列表中的any
名称是否包含名称"Rabbit"
recursive_fun <- function(x) {
if (any(names(x) == "Rabbit"))
return(TRUE)
if (is.list(x))
recursive_fun(unlist(x, recursive = FALSE))
else
return(FALSE)
}
,然后使用sapply
将其传递到每个列表,并将返回TRUE
的列表作为子集
weird_nested_structure[sapply(weird_nested_structure, recursive_fun)]