删除具有特定名称的列表元素

标签 r nested-lists

我有一个嵌套列表,我需要删除所有具有特定名称的节点/元素。例如,在下面定义的 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()

最佳答案

您可以创建一个简单的递归函数来删除这些元素:

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()

关于删除具有特定名称的列表元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47279686/

相关文章:

R用ggmap对象叠加geom_polygon,空间文件转换

php - json_decode 无法读取以 json 格式存储数据的文本文件

python - 在 Python 中打印具有最高值的嵌套列表的正确方法是什么

python - For循环和嵌套列表问题

amazon-web-services - 如何在 terraform 资源中的 zipmap 和列表上创建嵌套 for 循环

haskell - 在输出 L 形矩阵时避免双重遍历

css - 在 R 中有什么方法可以将 RMarkdown v2 html 文件作为电子邮件的正文发送

r - 延迟表达式评估而不使用 `quote`

r - 在 R-Markdown 输出中换行没有空格

html - 具有父值的有序列表