我有一个如下所示的列表:
a <- c(1, 3, 4)
b <- c(0, 2, 6)
c <- c(3, 4)
d <- c(0, 2, 6)
list(a, b, c, d)
从这个列表中我想删除所有子集,使列表如下所示:
[[1]]
[1] 1 3 4
[[2]]
[1] 0 2 6
我该怎么做?在我的实际数据中,我正在处理一个非常长的列表(&gt; 500k元素),因此欢迎任何有效实施的建议。
答案 0 :(得分:2)
这是一种方法。
tf1.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
tf1.setText("");
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
if(tf1.getText().equals("KG here") || tf1.getText().isEmpty())
tf1.setText("KG here");
}
});
首先,删除所有重复项。
lst <- list(a, b, c, d) # The list
如果列表仍包含多个元素,我们按其元素的长度(减少)对列表进行排序。
lstu <- unique(lst)
然后可以使用以下命令过滤子集:
lstuo <- lstu[order(-lengths(lstu))]
结果:
lstuo[c(TRUE, !sapply(2:length(lstuo),
function(x) any(sapply(seq_along(lstuo)[-x],
function(y) all(lstuo[[x]] %in% lstu[[y]])))))]
答案 1 :(得分:1)
您的数据
lst <- list(a, b, c, d) # The list
lstu <- unique(lst) # remove duplicates, piggyback Sven's approach
制作数值矩阵和索引
m <- combn(lstu, 2) # 2-row matrix of non-self pairwise combinations of values
n <- combn(length(lstu), 2) # 2-row matrix of non-self pairwise combination of index
确定子集
issubset <- t(sapply(list(c(1,2),c(2,1)), function(z) mapply(function(x,y) all(x %in% y), m[z[1],], m[z[2],])))
放弃列表中的子集向量
discard <- c(n*issubset)[c(n*issubset)>0]
ans <- lstu[-discard]
<强>输出强>
[[1]]
[1] 1 3 4
[[2]]
[1] 0 2 6