集合对的交集(任何可能的组合)
Intersection of pairs of sets (any possible combination)
我有不止三套,但是这里我写了下面的例子
S1<-c("Frizzy","Jack","Amy")
S2<-c("Alice","Samy","Anna","Jack")
S3<-c("Frizzy","Anna","Fred","Jack")
我想得到以下结果
length(intersect(S1,S2))+length(intersect(S1,S3))+length(intersect(S2,S3))
无需手动编写所有可能的组合。
我们可以使用combn
来获取元素之间的成对intersect
,获取list
元素的lengths
并找到sum
sum(lengths(combn(list(S1, S2, S3), 2,
FUN = function(x) Reduce(intersect, x), simplify = FALSE)))
#[1] 5
如果有许多相同模式的对象 'S' 后跟一些数字,使用 mget
将它们全部放入 list
而不是手动写入它们
lst1 <- mget(ls(pattern = '^S\d+$'))
sum(lengths(combn(lst1, 2,
FUN = function(x) Reduce(intersect, x), simplify = FALSE)))
#[1] 5
我有不止三套,但是这里我写了下面的例子
S1<-c("Frizzy","Jack","Amy")
S2<-c("Alice","Samy","Anna","Jack")
S3<-c("Frizzy","Anna","Fred","Jack")
我想得到以下结果
length(intersect(S1,S2))+length(intersect(S1,S3))+length(intersect(S2,S3))
无需手动编写所有可能的组合。
我们可以使用combn
来获取元素之间的成对intersect
,获取list
元素的lengths
并找到sum
sum(lengths(combn(list(S1, S2, S3), 2,
FUN = function(x) Reduce(intersect, x), simplify = FALSE)))
#[1] 5
如果有许多相同模式的对象 'S' 后跟一些数字,使用 mget
将它们全部放入 list
而不是手动写入它们
lst1 <- mget(ls(pattern = '^S\d+$'))
sum(lengths(combn(lst1, 2,
FUN = function(x) Reduce(intersect, x), simplify = FALSE)))
#[1] 5