如果元素存在于列表的所有子元素中,则删除该元素

我遇到了在强制进入数据框之前要解析的列表.有时我的列表中包含我不期望的元素.我希望能够在出现时按名称删除所有这些意外元素.下面是一个带有元素wackything的列表示例,我想要删除它而不必调用元素索引或使用for循环遍历每个子元素.

my_list <- list(person = list(name = "mike", phone = "111-1111"), 
 person = list(name = "lisa", phone = "222-2222", wackything = "PLEASE REMOVE ME"),
 person = list(name = "kimo", phone = "333-3333"))

我希望我的最终列表看起来像这样:

final_list <- list(person = list(name = "mike", phone = "111-1111"), 
            person = list(name = "lisa", phone = "222-2222"),
            person = list(name = "kimo", phone = "333-3333"))

这样我就可以使用它将其核心化为数据帧

do.call(rbind, lapply(final_list, rbind))
最佳答案
我认为你的预期使用中有太多的rbinds.看看这是否令人满意:

> rmwac <- function(x) x[ !names(x) %in% "wackything"]
> do.call(rbind, lapply(my_list, rmwac))
       name   phone     
person "mike" "111-1111"
person "lisa" "222-2222"
person "kimo" "333-3333"

请注意,epi10的完美答案使用负号,这是可能的,因为grep返回数值,并且可以使用数值索引列表.但是,不能使用带有字符和逻辑值的负号.

转载注明原文:如果元素存在于列表的所有子元素中,则删除该元素 - 代码日志