Description Usage Arguments Value Dependencies of vec_chop() Dependencies of vec_unchop() Examples
vec_chop()
provides an efficient method to repeatedly slice a vector. It
captures the pattern of map(indices, vec_slice, x = x)
. When no indices
are supplied, it is generally equivalent to as.list()
.
vec_unchop()
combines a list of vectors into a single vector, placing
elements in the output according to the locations specified by indices
.
It is similar to vec_c()
, but gives greater control over how the elements
are combined. When no indices are supplied, it is identical to vec_c()
.
If indices
selects every value in x
exactly once, in any order, then
vec_unchop()
is the inverse of vec_chop()
and the following invariant
holds:
1  vec_unchop(vec_chop(x, indices), indices) == x

1 2 3 4 5 6 7 8 9 
x 
A vector 
indices 
For For 
ptype 
If 
name_spec 
A name specification for combining
inner and outer names. This is relevant for inputs passed with a
name, when these inputs are themselves named, like
See the name specification topic. 
name_repair 
How to repair names, see 
vec_chop()
: A list of size vec_size(indices)
or, if indices == NULL
,
vec_size(x)
.
vec_unchop()
: A vector of type vec_ptype_common(!!!x)
, or ptype
, if
specified. The size is computed as vec_size_common(!!!indices)
unless
the indices are NULL
, in which case the size is vec_size_common(!!!x)
.
vec_chop()
vec_slice()
vec_unchop()
vec_c()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38  vec_chop(1:5)
vec_chop(1:5, list(1, 1:2))
vec_chop(mtcars, list(1:3, 4:6))
# If `indices` selects every value in `x` exactly once,
# in any order, then `vec_unchop()` inverts `vec_chop()`
x < c("a", "b", "c", "d")
indices < list(2, c(3, 1), 4)
vec_chop(x, indices)
vec_unchop(vec_chop(x, indices), indices)
# When unchopping, size 1 elements of `x` are recycled
# to the size of the corresponding index
vec_unchop(list(1, 2:3), list(c(1, 3, 5), c(2, 4)))
# Names are retained, and outer names can be combined with inner
# names through the use of a `name_spec`
lst < list(x = c(a = 1, b = 2), y = 1)
vec_unchop(lst, list(c(3, 2), c(1, 4)), name_spec = "{outer}_{inner}")
# An alternative implementation of `ave()` can be constructed using
# `vec_chop()` and `vec_unchop()` in combination with `vec_group_loc()`
ave2 < function(.x, .by, .f, ...) {
indices < vec_group_loc(.by)$loc
chopped < vec_chop(.x, indices)
out < lapply(chopped, .f, ...)
vec_unchop(out, indices)
}
breaks < warpbreaks$breaks
wool < warpbreaks$wool
ave2(breaks, wool, mean)
identical(
ave2(breaks, wool, mean),
ave(breaks, wool, FUN = mean)
)

Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.