2016-06-05 3 views
2

두 개의 동일한 하위 목록이 있으며 반복되는 목록을 제거하고 그 결과를 목록 형식으로 제공하고자합니다. intersect 나 unique 같이 벡터를 적용 할 수있는 함수가 있나요? 나는 unlist 할 수 있고 그 후에 유일하게 사용하고 이전 구조에 relist 다시, 그러나 벡터를 위해 명부를 위해 동일을 할 수있는 기능이 있는지 알고 싶으면. 또한 목록을 단순화하고 @akrun에 의해 아래 sugestion을 적용하기 위해 reduce를 사용할 수 있음을 알고 있습니다. 그러나 나는 복잡한 하위 목록과 함께 작업 할 수있는 솔루션을 찾고 있습니다. TER가목록에서 반복 된 하위 목록을 제거합니다.

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

경우 가정

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

목록 목록이 필요합니까? 그렇지 않으면'unique (do.call (c, TER)) ' – akrun

+0

@ akrun - 위의 함수는 목록에만 적용됩니다. – Barnaby

+0

# 당신이 맞아요. 사과를 편집하는 것 – Barnaby

답변

0

한 가지 방법은 Map와 다음, 논리적 인덱스를 반환 duplicated을 사용하는 것과 Filter 우리는 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 

부분 집합이 출력을 제공합니다

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

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


#[[2]] 
#[[2]][[1]] 
#[1] 1 2 3 4 
관련 문제