2016-06-05 21 views
2

Ich habe zwei gleiche Unterlisten und möchte diese Listen, die wiederholt werden, zu beseitigen und das Ergebnis in einem Listenformat bereitstellen. Gibt es irgendeine Funktion, die dies tun könnte, wie zum Beispiel intersect oder unique wird auf Vektoren angewendet. Ich weiß, dass ich unlist und dann unique verwenden und dann wieder auf die vorherige Struktur relistieren kann, möchte aber wissen, ob es eine Funktion gibt, die das gleiche für Listen als für Vektoren tun kann. Ich weiß auch, dass ich reduzieren könnte, um die Liste zu vereinfachen und dann die Suggestion unten von @akrun anzuwenden. Ich suche jedoch nach Lösungen, um mit Listen mit komplexen Unterlisten arbeiten zu können.eliminieren wiederholte Unterlisten aus der Liste

TER <- list(list(c(1,2,3),c(1,2,3,4)),list(c(1,2,3),c(1,2,3,4))) 

TER 
#[[1]] 
#[[1]][[1]] 
#[1] 1 2 3 
#[[1]][[2]] 
#[1] 1 2 3 4 

#[[2]] 
#[[2]][[1]] 
#[1] 1 2 3 
#[[2]][[2]] 
#[1] 1 2 3 4 

# Desired Output. 

TER 

#[[1]] 
#[[1]][[1]] 
#[1] 1 2 3 
#[[1]][[2]] 
#[1] 1 2 3 4 
+0

Benötigen Sie eine Listenliste? Sonst 'unique (do.call (c, TER))' – akrun

+0

@ akrun - Ja, da die obige Funktion nur für Listen funktioniert. – Barnaby

+0

# Sie haben Recht Bearbeiten Sie die Appologien – Barnaby

Antwort

0

Eine Möglichkeit wäre duplicated zu verwenden, um den logischen Index zurück, dann mit Map und die Filter Teilmenge wir die list

l1 <- do.call(c, TER) 
i1 <- duplicated(l1, fromLast=TRUE)|!duplicated(l1) 
Filter(length, Map('[', TER, split(i1, rep(seq_along(TER), lengths(TER))))) 
#[[1]] 
#[[1]][[1]] 
#[1] 1 2 3 

#[[1]][[2]] 
#[1] 1 2 3 4 

Angenommen, wenn die TER

ist
TER <- list(list(c(1,2,3),c(1,3,3,4)),list(c(1,2,3),c(1,2,3,4))) 

Es gibt den Ausgang

#[[1]] 
#[[1]][[1]] 
#[1] 1 2 3 

#[[1]][[2]] 
#[1] 1 3 3 4 


#[[2]] 
#[[2]][[1]] 
#[1] 1 2 3 4 
Verwandte Themen