iv_between()
detects when needles
, a vector, falls between the
bounds of haystack
, an iv. It works similar to base::%in%, where
needles[i]
checks for a match in all of haystack
.
This function returns a logical vector the same size as needles
containing
TRUE
if the value in needles
is between any interval in haystack
and
FALSE
otherwise.
Arguments
- needles
[vector, iv]
needles
should be a vector andhaystack
should be an iv.needles
should have the same type as the start/end components ofhaystack
.Each element of
needles
represents the value to search for.haystack
represents the intervals to search in.
- haystack
[vector, iv]
needles
should be a vector andhaystack
should be an iv.needles
should have the same type as the start/end components ofhaystack
.Each element of
needles
represents the value to search for.haystack
represents the intervals to search in.
- ...
These dots are for future extensions and must be empty.
- missing
[logical(1) / "equals" / "error"]
Handling of missing values in
needles
."equals"
considers missing values inneedles
as exactly equal to missing intervals inhaystack
when determining if there is a matching relationship between them. Matched missing values inneedles
result in aTRUE
value in the result, and unmatched missing values result in aFALSE
value."error"
throws an error if any values inneedles
are missing.If a single logical value is provided, this represents the value returned in the result for values in
needles
that are missing. You can force missing values to be unmatched by setting this toFALSE
, and you can force them to be propagated by setting this toNA
.
Examples
x <- as.Date(c("2019-01-05", "2019-01-10", "2019-01-07", "2019-01-20"))
y <- iv_pairs(
as.Date(c("2019-01-01", "2019-01-03")),
as.Date(c("2019-01-04", "2019-01-08")),
as.Date(c("2019-01-07", "2019-01-09")),
as.Date(c("2019-01-10", "2019-01-20")),
as.Date(c("2019-01-15", "2019-01-20"))
)
x
#> [1] "2019-01-05" "2019-01-10" "2019-01-07" "2019-01-20"
y
#> <iv<date>[5]>
#> [1] [2019-01-01, 2019-01-03) [2019-01-04, 2019-01-08) [2019-01-07, 2019-01-09)
#> [4] [2019-01-10, 2019-01-20) [2019-01-15, 2019-01-20)
# Detect if any location where `x` is between the intervals in `y`
iv_between(x, y)
#> [1] TRUE TRUE TRUE FALSE
# ---------------------------------------------------------------------------
a <- c(1, NA)
b <- iv(c(NA, NA), c(NA, NA))
# By default, missing values in `needles` are treated as being exactly
# equal to missing intervals in `haystack`, so the missing value in `a` is
# considered between the missing interval in `b`.
iv_between(a, b)
#> [1] FALSE TRUE
# If you'd like to propagate missing values, set `missing = NA`
iv_between(a, b, missing = NA)
#> [1] FALSE NA
# If you'd like missing values to be treated as unmatched, set
# `missing = FALSE`
iv_between(a, b, missing = FALSE)
#> [1] FALSE FALSE