确定R中另一个列表中包含哪些列表对象(子集)

r.s*_*ent 3 comparison r list

感谢您对我以前的问题的回复.我有两个列表:list1和list2.我想知道list1的每个对象是否包含在list2的每个对象中.例如:

> list1
[[1]]
[1] 1

[[2]]
[1] 2

[[3]]
[1] 3

> list2
[[1]]
[1] 1 2 3

[[2]]
[1] 2 3

[[3]]
[1] 2 3
Run Code Online (Sandbox Code Playgroud)

以下是我的问题:1.)我如何要求R检查对象是否是列表中另一个对象的子集?例如,我想检查是否list2[[3]]={2,3}包含在(子集)中list1[[2]]={2}.当我这样做时list2[[3]] %in% list1[[2]],我明白了[1] TRUE FALSE.但是,这不是我想做的事情?!我只想检查是否list2[[3]]list1[[2]]集合理论概念中的{3}的{2,3} \子集?我不想执行元素检查,因为R似乎正在使用%in%命令.有什么建议?

2.)是否有某种方法可以有效地进行所有成对子集比较(即,对于所有组合的list1[[i]]子集?一旦问题1的问题可以解决吗?感谢您的反馈!list2[[j]]i,jouter(list1,list2, func.subset)

Mic*_*ael 5

setdiff比较唯一

length(setdiff(5, 1:5)) == 0
Run Code Online (Sandbox Code Playgroud)

或者,all(x %in% y)将很好地工作.

要进行所有比较,这样的事情会起作用:

dt <- expand.grid(list1,list2)
dt$subset <- apply(dt,1, function(.v) all(.v[[1]] %in% .v[[2]]) )


  Var1    Var2 subset
1    1 1, 2, 3   TRUE
2    2 1, 2, 3   TRUE
3    3 1, 2, 3   TRUE
4    1    2, 3  FALSE
5    2    2, 3   TRUE
6    3    2, 3   TRUE
7    1    2, 3  FALSE
8    2    2, 3   TRUE
9    3    2, 3   TRUE
Run Code Online (Sandbox Code Playgroud)

请注意,expand.grid在处理大量数据时,这不是最快的方法(dwin的解决方案在这方面更好),但它允许您在视觉上快速检查这是否正在执行您想要的操作.