R:集合运算


    R中包含了一些方便的集合运算,主要由:

Ю union(x, y):集合x和y的并集

Ю intersect( x, y ):集合x和y的交集

Ю setdiff(x, y):集合x和y的差集,即所有属于集合x但不属于集合y的元素组成的集合

Ю setequal(x, y):检验集合x和y是否相等

Ю c %in% y:成员,检验c是否为集合y中的元素

Ю choose(x, y):从含有n个元素的集合中选取含有k个元素的子集的数目。

> x <- c( 1, 2, 5 )

> y <- c( 5, 1, 8, 9 )

> union( x, y )

[1] 1 2 5 8 9

> intersect( x, y )

[1] 1 5

> setdiff( x, y )

[1] 2

> setdiff( y, x )

[1] 8 9

> setequal( x, y )

[1] FALSE

> setequal( x, c( 1, 2, 5 ) )

[1] TRUE

> 2 %in% x

[1] TRUE

> 2 %in% y

[1] FALSE

> choose( 5, 2 )

[1] 10

 

    我们可以很方便的使用这些函数的组合,来编写得到自己想要的结果。例如,编程计算两个集合的对称差,也就是只属于这两个集合其中之一的元素组成的集合,我们可以方便地调用setdiff(x, y)和union(x, y)函数来完成,代码如下:

> symdiff <- function( x, y ){

+     sdfxy <- setdiff( x, y )

+     sdfyx <- setdiff( y, x )

+     return ( union( sdfxy, sdfyx ) )

+ }

> x <- c( 1, 2, 5, 8 )

> y <- c( 5, 1, 9, 4 )

> symdiff( x, y )

[1] 2 8 9 4

  

    函数combn()用于产生集合元素的组合。例如,找出集合{1,2,3}中含有2个元素的子集:

> c32 <- combn( 1:3, 2 )

> c32

     [,1] [,2] [,3]

[1,]    1    1    2

[2,]    2    3    3

> class( c32 )

[1] "matrix"

    输出的结果是按列排列的。集合{1,2,3}中含有2个元素的子集为{1,2}、{1,3}、{2,3}。

    combn()函数也允许用户指定一个函数,作用于挑选出的每个组合。

> combn( 1:3, 2, sum )

[1] 3 4 5

 

 

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值