gpt4 book ai didi

r - 识别列表的哪些对象包含在 R 中的另一个列表中(子集)

转载 作者:行者123 更新时间:2023-12-04 11:59:29 26 4
gpt4 key购买 nike

感谢您对我之前的问题的友好回复。我有两个列表: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

这是我的问题:1.) 我如何让 R 检查一个对象是否是列表中另一个对象的子集?例如,我想检查 list2[[3]]={2,3} 是否包含在(子集)list1[[2]]={2}。当我执行 list2[[3]] %in% list1[[2]] 时,我得到 [1] TRUE FALSE。然而,这不是我想要做的吗?!我只想检查 list2[[3]] 是否是 list1[[2]] 的子集,即是 {2,3}\subset of {3}就像在集合论的概念中一样?我不想执行元素检查,因为 R 似乎正在使用 %in% 命令。有什么建议吗?

2.) 是否有某种方法可以有效地进行所有成对子集比较(即 list1[[i]] 子集的 list2[[j]],对于所有 i,j 组合?一旦第 1 个问题得到回答,像 outer(list1,list2, func.subset) 这样的东西会起作用吗?感谢您的反馈!

最佳答案

setdiff 比较 唯一

length(setdiff(5, 1:5)) == 0

或者,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

请注意,expand.grid 在处理大量数据时并不是最快的方法(dwin 的解决方案在这方面更好),但它可以让您快速直观地检查是否这是做你想做的事。

关于r - 识别列表的哪些对象包含在 R 中的另一个列表中(子集),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14410050/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com