R 从列表中删除重复的子列表

R 从列表中删除重复的子列表,r,R,我有两个相等的子列表,希望消除重复的列表,并以列表格式提供结果。有什么函数可以做到这一点,比如对向量应用intersect或unique。我知道我可以取消列表,然后使用unique,然后在先前的结构上再次重新列表,但我想知道是否有一个函数可以对列表而不是向量执行相同的操作。我也知道我可以使用reduce as来简化列表,然后通过@akrun应用下面的建议。但是,我正在寻找解决方案,以便能够处理具有复杂子列表的列表 TER <- list(list(c(1,2,3),c(1,2,3,4)),

我有两个相等的子列表,希望消除重复的列表,并以列表格式提供结果。有什么函数可以做到这一点,比如对向量应用intersect或unique。我知道我可以取消列表,然后使用unique,然后在先前的结构上再次重新列表,但我想知道是否有一个函数可以对列表而不是向量执行相同的操作。我也知道我可以使用reduce as来简化列表,然后通过@akrun应用下面的建议。但是,我正在寻找解决方案,以便能够处理具有复杂子列表的列表

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

TER一种方法是使用
duplicated
返回逻辑索引,然后使用
Map
Filter
列表子集化

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

你需要它是列表的列表吗?否则,
unique(do.call(c,TER))
@akrun-是,因为上面的函数仅适用于列表。#您正确地编辑了它。一个选项将是
i1
unique
也适用于“列表”
unique(TER)
似乎会给出您的输出,除非我遗漏了什么
TER <- list(list(c(1,2,3),c(1,3,3,4)),list(c(1,2,3),c(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