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.