R: Sets

set {sets} | R Documentation

## Sets

### Description

Creation and manipulation of sets.

### Usage

    set(...)
    as.set(x)
    make_set_with_order(x)
    is.set(x)

    set_is_empty(x)
    set_is_subset(x, y)
    set_is_proper_subset(x, y)
    set_is_equal(x, y)
    set_contains_element(x, e)

    set_union(...)
    set_intersection(...)
    set_symdiff(...)
    set_complement(x, y)
    set_cardinality(x)
    ## S3 method for class 'set'
    length(x)
    ## S3 method for class 'set'
    lengths(x, use.names = TRUE)
    set_power(x)
    set_cartesian(...)
    set_combn(x, m)

### Arguments

`x` | For `as.set()` and `is.set()`: an R object. A set object otherwise.
`y` | A set object.
`e` | An R object.
`m` | Number of elements to choose.
`use.names` | logical; should the names of `x` be used in the result?
`...` | For `set()`: R objects, and set objects otherwise.

### Details

These functions represent basic infrastructure for handling sets of general (R) objects. The `set_is_foo()` predicates are vectorized. In addition to the methods defined, one can use the following operators: `|` for the union, `-` for the difference (or complement), `&` for the intersection, `%D%` for the symmetric difference, `*` and `^n` for the (n-fold) cartesian product, `2^` for the power set, `%e%` for the element-of predicate, `<` and `<=` for the (proper) subset predicate, `>` and `>=` for the (proper) superset predicate, and `==` and `!=` for (in)equality. The `length` method for sets gives the cardinality. The `lengths` method coerces the set to a list before applying the `length` method on its elements. `set_combn` returns the set of all subsets of specified length. The `Summary` methods do also work if defined for the set elements. The `mean` and `median` methods try to convert the object to a numeric vector before calling the default methods.

Because set elements are unordered, it is not allowed to use positional indexing. However, it is possible to do indexing using element labels or simply the elements themselves (useful, e.g., for subassignment). In addition, it is possible to iterate over all elements using `for` and `lapply`/`sapply`.

Note that converting objects to sets may change the internal order of the elements, so that iterating over the original data might give different results than iterating over the corresponding set. The permutation can be obtained using the generic function `make_set_with_order`, returning both the set and the ordering. `as.set` simply calls `make_set_with_order` internally and strips the order information, so user-defined methods for coercion have to be provided for the latter and not for `as.set`.

Note that `set_union`, `set_intersection`, and `set_symdiff` accept any number of arguments. The n-ary symmetric difference of sets contains just elements which are in an odd number of the sets.

`set_contains_element` is vectorized in `e`, that is, if `e` is an atomic vector or list, the is-element operation is performed element-wise, and a logical vector returned. Note that, however, objects of class `tuple` are taken as atomic objects to correctly handle sets of tuples.

### Value

For the predicate functions, a logical. For `make_set_with_order`, a list with two components `"set"` and `"order"`. For `set_cardinality` and the length method, an integer value. For the `lengths` method, an integer vector. For all others, a set.

### References

D. Meyer and K. Hornik (2009), Generalized and customizable sets in R, Journal of Statistical Software 31(2), 1–27. http://www.jstatsoft.org/v31/i02/

### See Also

`set_outer`, `gset` for generalized sets, and `tuple` for tuples (“vectors”).

### Examples

    ## constructor
    s <- set(1L, 2L, 3L)
    s

    ## named elements
    snamed <- set(one = 1, 2, three = 3)
    snamed

    ## indexing by label
    snamed[["one"]]

    ## subassignment
    snamed[c(2,3)] <- c("a","b")
    snamed

    ## a more complex set
    set(c, "test", list(1, 2, 3))

    ## converter
    s2 <- as.set(2:5)
    s2

    ## converter with order
    make_set_with_order(5:1)

    ## set of sets
    set(set(), set(1))

    ## cartesian product
    s * s2
    s * s
    s ^ 2 # same as above
    s ^ 3

    ## power set
    2 ^ s

    ## tuples
    s3 <- set(tuple(1,2,3), tuple(2,3,4))
    s3

    ## Predicates:

    ## element
    1:2 %e% s
    tuple(1,2,3) %e% s3

    ## subset
    s <= s2
    s2 >= s # same

    ## proper subset
    s < s

    ## complement, union, intersection, symmetric difference:
    s - 1L
    s + set("a") # or use: s | set("a")
    s & s
    s %D% s2
    set(1,2,3) - set(1,2)
    set_intersection(set(1,2,3), set(2,3,4), set(3,4,5))
    set_union(set(1,2,3), set(2,3,4), set(3,4,5))
    set_symdiff(set(1,2,3), set(2,3,4), set(3,4,5))

    ## subsets:
    set_combn(as.set(1:3),2)

    ## iterators:
    sapply(s, sqrt)
    for (i in s) print(i)

    ## Summary methods
    sum(s)
    range(s)

    ## mean / median
    mean(s)
    median(s)

    ## cardinality
    s <- set(1, list(1, 2))
    length(s)
    lengths(s)

[Package sets version 1.0-18 Index]