Creation and manipulation of sets.
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)
A set object.
An R object.
Number of elements to choose.
logical; should the names of
These functions represent basic infrastructure for handling sets
of general (R) objects. The
are vectorized. In addition
to the methods defined, one can use the following operators:
| for the union,
- for the difference (or complement),
& for the
%D% for the symmetric difference,
^n for the
(n-fold) cartesian product,
2^ for the power set,
%e% for the element-of predicate,
the (proper) subset predicate,
the (proper) superset predicate, and
length method for sets gives 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
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
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
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
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.
For the predicate functions, a vector of logicals.
a list with two components
set_cardinality and the length method, an integer value.
lengths method, an integer vector. For all
others, a set.
D. Meyer and K. Hornik (2009), Generalized and customizable sets in R, Journal of Statistical Software 31(2), 1–27. doi: 10.18637/jss.v031.i02.
gset for generalized sets,
tuple for tuples (“vectors”).
## 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 - set(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) ## vectorization list(set(1), set(2), set()) == set(1)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.