Free Access Week-  Data Engineering + BI
Data engineering and BI courses are free!
Free AI Access Week from June 2-8

set6 (version 0.1.0)

setproduct: Cartesian Product of Sets

Description

Returns the cartesian product of objects inheriting from class Set.

Usage

setproduct(..., simplify = FALSE, nest = FALSE)

# S3 method for Set *(x, y)

Arguments

...
simplify

logical, if TRUE returns the result in its simplest (unwrapped) form, usually a Set otherwise a ProductSet.

nest

logical, if FALSE (default) then will treat any ProductSets passed to ... as unwrapped Sets. See details and examples.

x, y

Value

Either an object of class ProductSet or an unwrapped object inheriting from Set.

Details

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, XYZ(XY)Z This is accommodated with the nest argument. If nest == TRUE then XYZ==(X<U+00D7>Y)<U+00D7>Z, i.e. the cartesian product for two sets is applied recursively. If nest == FALSE then XYZ==(X<U+00D7>Y<U+00D7>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<U+00D7>...<U+00D7>XN=(x1,...,xN):x1ϵX1...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.

See Also

Other operators: powerset(), setcomplement(), setintersect(), setpower(), setsymdiff(), setunion()

Examples

Run this code
# NOT RUN {
# 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()

# }

Run the code above in your browser using DataLab