Cartesian Product of Sets
Returns the cartesian product of objects inheriting from class Set
.
setproduct(..., simplify = FALSE, nest = FALSE) ## S3 method for class 'Set' x * y
... |
Sets |
simplify |
logical, if |
nest |
logical, if |
x, y |
The cartesian product of multiple sets, the 'n-ary Cartesian product', is often implemented in programming languages as being identical to the cartesian product of two sets applied recursively. However, for sets X, Y, Z,
X × Y × Z != (X × Y) × Z
This is accommodated with the nest
argument. If nest == TRUE
then X*Y*Z == (X × Y) × Z, i.e. the cartesian
product for two sets is applied recursively. If nest == FALSE
then X*Y*Z == (X × Y × Z) and
the n-ary cartesian product is computed. As it appears the latter (n-ary product) is more common, nest = FALSE
is the default. The N-ary cartesian product of N sets, X1,...,XN, is defined as
X1 × ... × XN = {(x1,...,xN) : x1 ε X1 and ... and xN ε xN}
where (x1,...,xN) is a tuple.
The product of fuzzy and crisp sets first coerces fuzzy sets to crisp sets by finding their support.
Either an object of class ProductSet
or an unwrapped object inheriting from Set
.
Other operators:
powerset()
,
setcomplement()
,
setintersect()
,
setpower()
,
setsymdiff()
,
setunion()
# difference between nesting Set$new(1, 2) * Set$new(2, 3) * Set$new(4, 5) setproduct(Set$new(1, 2) * Set$new(2, 3), Set$new(4, 5), nest = FALSE) # same as above setproduct(Set$new(1, 2) * Set$new(2, 3), Set$new(4, 5), nest = TRUE) unnest_set <- setproduct(Set$new(1, 2) * Set$new(2, 3), Set$new(4, 5), nest = FALSE) nest_set <- setproduct(Set$new(1, 2) * Set$new(2, 3), Set$new(4, 5), nest = TRUE) # note the difference when using contains unnest_set$contains(Tuple$new(1, 3, 5)) nest_set$contains(Tuple$new(Tuple$new(1, 3), 5)) # product of two sets Set$new(-2:4) * Set$new(2:5) setproduct(Set$new(1, 4, "a"), Set$new("a", 6)) setproduct(Set$new(1, 4, "a"), Set$new("a", 6), simplify = TRUE) # product of two intervals Interval$new(1, 10) * Interval$new(5, 15) Interval$new(1, 2, type = "()") * Interval$new(2, 3, type = "(]") Interval$new(1, 5, class = "integer") * Interval$new(2, 7, class = "integer") # product of mixed set types Set$new(1:10) * Interval$new(5, 15) Set$new(5, 7) * Tuple$new(6, 8, 7) FuzzySet$new(1, 0.1) * Set$new(2) # product of FuzzySet FuzzySet$new(1, 0.1, 2, 0.5) * Set$new(2:5) # product of conditional sets ConditionalSet$new(function(x, y) x >= y) * ConditionalSet$new(function(x, y) x == y) # product of special sets PosReals$new() * NegReals$new()
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.