Hop
hop()
is the lower level engine that powers slide()
(at least in theory).
It has slightly different invariants than slide()
, and is useful
when you either need to hand craft boundary locations, or want to compute a
result with a size that is different from .x
.
hop(.x, .starts, .stops, .f, ...) hop_vec(.x, .starts, .stops, .f, ..., .ptype = NULL)
.x |
The vector to iterate over and apply |
.starts, .stops |
Vectors of boundary locations that make up the windows to bucket |
.f |
If a function, it is used as is. If a formula, e.g.
This syntax allows you to create very compact anonymous functions. |
... |
Additional arguments passed on to the mapped function. |
.ptype |
A prototype corresponding to the type of the output. If If supplied, the result of each call to If |
hop()
is very close to being a faster version of:
map2( .starts, .stops, function(start, stop) { x_slice <- vec_slice(.x, start:stop) .f(x_slice, ...) } )
Because of this, hop_index()
is often the more useful function. hop()
mainly exists for API completeness.
The main difference is that the start and stop values make up ranges of
possible locations along .x
, and it is not enforced that these locations
actually exist along .x
. As an example, with hop()
you can do the
following, which would be an error with vec_slice()
because 0L
is
out of bounds.
hop(c("a", "b"), .starts = 0L, .stops = 1L, ~.x) #> [[1]] #> [1] "a"
hop()
allows these out of bounds values to be fully compatible with
slide()
. It is always possible to construct a hop()
call from a slide()
call. For example, the following are equivalent:
slide(1:2, ~.x, .before = 1) hop(1:2, .starts = c(0, 1), .stops = c(1, 2), ~.x) #> [[1]] #> [1] 1 #> #> [[2]] #> [1] 1 2
A vector fulfilling the following invariants:
hop()
vec_size(hop(.x, .starts, .stops)) == vec_size_common(.starts, .stops)
vec_ptype(hop(.x, .starts, .stops)) == list()
hop_vec()
vec_size(hop_vec(.x, .starts, .stops)) == vec_size_common(.starts, .stops)
vec_size(hop_vec(.x, .starts, .stops)[[1]]) == 1L
vec_ptype(hop_vec(.x, .starts, .stops, .ptype = ptype)) == ptype
# `hop()` let's you manually specify locations to apply `.f` at. hop(1:3, .starts = c(1, 3), .stops = 3, ~.x) # `hop()`'s start/stop locations are allowed to be out of bounds relative # to the size of `.x`. hop( mtcars, .starts = c(-1, 3), .stops = c(2, 6), ~.x )
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.