Operator | Usage | Definition |
union | union(x, y) | Union of sets x and y |
intersect | intersect(x, y) | Intersection of sets x and y |
setdiff | setdiff(x, y) | Asymmetric difference between sets x and y (Elements in x but not in y) |
setequal | setequal(x, y) | If sets x and y have the same elements |
is.element | is.element(el, set) | If el is an element of set |
Examples:
> x <- c(sort(sample(1:20, 9)),NA)
> y <- c(sort(sample(3:23, 7)),NA)
> x
[1] 1 3 5 8 11 17 18 19 20 NA
> y
[1] 7 11 15 16 17 19 22 NA
> union(x, y)
[1] 1 3 5 8 11 17 18 19 20 NA 7 15 16 22
> intersect(x, y)
[1] 11 17 19 NA
> setdiff(x, y)
> setdiff(x, y)
[1] 1 3 5 8 18 20
> setdiff(y, x)
[1] 7 15 16 22
> setequal(x, y)
[1] FALSE
Note that each of union, intersect, setdiff and setequal will discard any duplicated values in the arguments. Look at the following example:
> x
[1] 1 3 5 8 11 17 18 19 20 NA
> x2 <- c(x, 1, 3, 5, 8)
> x2
[1] 1 3 5 8 11 17 18 19 20 NA 1 3 5 8
> setdiff(x, y)
[1] 1 3 5 8 18 20
> setdiff(x2, y)
[1] 1 3 5 8 18 20
> setequal(x, x2)
[1] TRUE
Although x and x2 have different length, they have the same UNIQUE elements so setequal(x, x2) returns a TRUE value.
is.element(x, y) is identical to x %in% y which is already discussed here. The return value of is.element is a vector of TRUE and FALSE with the same length as x, which indicates whether each element of x is an element of y or not.
> is.element(x, y) # vector of length 10
[1] FALSE FALSE FALSE FALSE TRUE TRUE FALSE TRUE FALSE TRUE
> is.element(y, x) # vector of length 8
[1] FALSE TRUE FALSE FALSE TRUE TRUE FALSE TRUE