我有一个嵌套列表,我需要删除所有具有特定名称的节点/元素。例如,在下面定义的R list()中,我想删除所有名为'lol'的节点。我注意到它可以出现在层次结构的不同级别。
扫描树并删除这些节点的最佳方法是什么?
tree <- list(
A = list(
A_1 = list(
A_1_1 = list(), A_1_2 = list()
),
lol = "haha"
),
B = list(
B_1 = list(
B_1_1 = list(), B_1_2 = list(), lol = "rofl"
)
)
)
我想对树对象执行一些操作,以便结果变为:
$A
$A$A_1
$A$A_1$A_1_1
list()
$A$A_1$A_1_2
list()
$B
$B$B_1
$B$B_1$B_1_1
list()
$B$B_1$B_1_2
list()
答案 0 :(得分:2)
您可以创建一个简单的递归函数函数来删除这些元素:
foo <- function(x) {
x <- x[names(x) != "lol"]
if(is.list(x)) lapply(x, foo)
}
foo(tree)
# $A
# $A$A_1
# $A$A_1$A_1_1
# list()
#
# $A$A_1$A_1_2
# list()
#
#
#
# $B
# $B$B_1
# $B$B_1$B_1_1
# list()
#
# $B$B_1$B_1_2
# list()