A faster alternative to findInterval
for intervals which are equally-spaced.
fastFindInterval(x, b, labels = FALSE, reltol = 0.001, dig.lab = 3L,
left.open=TRUE)
Integer vector, or factor.
Data. Numeric vector of values that are to be classified.
Breakpoints. Numeric vector of increasing values that are the endpoints of the intervals.
Logical value specifying whether to return a factor, whose levels are the string labels of the intervals.
Relative tolerance. A positive number.
Integer. Maximum number of digits to use in the labels
for the intervals, when labels=TRUE
.
Logical value specifying whether intervals are left-open and
right-closed (left.open=TRUE
, the default)
or left-closed and right-open (left.open=FALSE
).
Adrian Baddeley Adrian.Baddeley@curtin.edu.au, Rolf Turner rolfturner@posteo.net and Ege Rubak rubak@math.aau.dk.
This is an alternative to
findInterval(x, b, rightmost.closed=TRUE)
which seems to be faster when b
is equally spaced
and the length of x
is large.
If labels=FALSE
(the default), the result is an integer vector
giving, for each value x[i]
, the index j
of the interval that
contains x[i]
:
If left.open=TRUE
(the default), the intervals are left-open
and right-closed, except for the first interval. This means that
x[i]
belongs to the j
th interval if
b[j] < x[i] <= b[j+1]
for j > 1
and b[1] <= x[i] <= b[2]
for j=1
.
If left.open=FALSE
, the intervals are left-closed
and right-open, except for the last interval. This means that
x[i]
belongs to the j
th interval if
b[j] <= x[i] < b[j+1]
for j < m
and b[m] <= x[i] <= b[m+1]
for j=m
where m = length(b)-1
is the number of intervals.
If labels=TRUE
, the result is a factor, and the levels are
synthetic labels for the intervals, similar to those produced by
findInterval
.
Note that the default value of left.open
is TRUE
for fastFindInterval
but FALSE
for findInterval
.
x <- runif(10)
b <- seq(0, 1, by=0.2)
fastFindInterval(x, b, labels=TRUE)
Run the code above in your browser using DataLab