簡體   English   中英

如何輕松地在嵌套列表的葉子上進行迭代

[英]How to iterate easily over leafs of a nested list

假設我有以下列表:

a <- list(a = 1, b = list(a = list(b = 1, c = 2), c = 1), c = 1)

我想刪除所有名稱為c的葉子。 我該怎么習慣? 看來這是一項適合rapply的工作,但是使用rapply時,我無法找到一種方法來訪問當前正在迭代的列表元素的名稱。

那這個呢?

a <- list(a = 1, b = list(a = list(b = 1, c = 2), c = 1), c = 1)

aunls <- unlist(a)
aunls[!grepl('c', names(aunls))]

之后,您可以使用名稱結構再次嵌套或套用。

您可以使用遞歸的lapply函數來執行此操作,例如:

foo <- function(x, name) {
  if(any(idx <- names(x) == name)) x <- x[!idx]
  if(is.list(x)) lapply(x, foo, name) else x
}

foo(a, "c")
# $a
# [1] 1
# 
# $b
# $b$a
# $b$a$b
# [1] 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM