Filters vector x to only keep elements which are in bounds [lower, upper]. This is equivalent to the following, but tries to avoid unnecessary allocations:

 x[!is.na(x) & x >= lower & x <= upper]

Currently only works for integer x.

keep_in_bounds(x, lower, upper)

Arguments

x

:: integer()
Vector to filter.

lower

:: integer(1)
Lower bound.

upper

:: integer(1)
Upper bound.

Value

(integer()) with only values in [lower, upper].

Examples

keep_in_bounds(sample(20), 5, 10)
#> [1] 10 6 7 9 8 5