2017-11-14 1 views
2

Ich habe eine verschachtelte Liste und ich muss alle Knoten/Elemente entfernen, die einen bestimmten Namen haben. Zum Beispiel möchte ich in der folgenden definierten R list() alle Knoten entfernen, die den Namen 'lol' haben. Ich stelle fest, dass es auf verschiedenen Ebenen der Hierarchie erscheinen kann.Entfernen von Listenelementen mit einem bestimmten Namen

Was ist der beste Weg, um durch den Baum zu scannen und diese Knoten zu entfernen?

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

Ich möchte eine Aktion auf dem Baum Objekt auszuführen, so dass Ergebnis wird:

$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() 
+1

Danke, sollte jetzt behoben werden. – dcl

+0

Sieht so aus, als hätten Sie den Post aktualisiert. Haben Sie andere Muster wie andere verschachtelte Fälle, d. H. Tief verschachtelt? – akrun

Antwort

2

Sie können eine einfache rekursive Funktion Funktion erstellen, um diese Elemente zu entfernen:

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

Danke. Rekursive Funktionen waren nie meine Stärke. – dcl

Verwandte Themen