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 |
y |
A set object. |
e |
An R object. |
m |
Number of elements to choose. |
use.names |
logical; should the names of |
... |
For |
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 vector of logicals.
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. doi:10.18637/jss.v031.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 - 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)