Often, a single rrule will be sufficient. However, more complex recurrence objects can be constructed by combining multiple rschedules into a recurrence set.
There are three types of recurrence sets provided in almanac, each of which construct their event sets by performing a set operation on the underlying events of the rschedules in the set.
runion()takes the union.rintersect()takes the intersection.rsetdiff()takes the set difference.
Details
For rsetdiff(), the event set is created "from left to right" and depends
on the order that the rschedules were added to the set.
Examples
since <- "2019-04-01"
until <- "2019-05-31"
on_weekends <- weekly(since = since, until = until) %>%
recur_on_weekends()
on_25th <- monthly(since = since, until = until) %>%
recur_on_day_of_month(25)
# On weekends OR the 25th of the month
ru <- runion(on_weekends, on_25th)
alma_events(ru)
#> [1] "2019-04-06" "2019-04-07" "2019-04-13" "2019-04-14" "2019-04-20"
#> [6] "2019-04-21" "2019-04-25" "2019-04-27" "2019-04-28" "2019-05-04"
#> [11] "2019-05-05" "2019-05-11" "2019-05-12" "2019-05-18" "2019-05-19"
#> [16] "2019-05-25" "2019-05-26"
# On weekends AND the 25th of the month
ri <- rintersect(on_weekends, on_25th)
alma_events(ri)
#> [1] "2019-05-25"
# On weekends AND NOT the 25th of the month
rsd1 <- rsetdiff(on_weekends, on_25th)
alma_events(rsd1)
#> [1] "2019-04-06" "2019-04-07" "2019-04-13" "2019-04-14" "2019-04-20"
#> [6] "2019-04-21" "2019-04-27" "2019-04-28" "2019-05-04" "2019-05-05"
#> [11] "2019-05-11" "2019-05-12" "2019-05-18" "2019-05-19" "2019-05-26"
# On the 25th of the month AND NOT the weekend
rsd2 <- rsetdiff(on_25th, on_weekends)
alma_events(rsd2)
#> [1] "2019-04-25"