vctrs 0.3.3
-
The
tableclass is now implemented as a wrapper type that
delegates its coercion methods. It used to be restricted to integer
tables (#1190). -
Named one-dimensional arrays now behave consistently with simple
vectors invec_names()andvec_rbind(). -
new_rcrd()now usesdf_list()to validate the fields. This makes
it more flexible as the fields can now be of any type supported by
vctrs, including data frames. -
Thanks to the previous change the
[[method of records now
preserves list fields (#1205). -
vec_data()now preserves data frames. This is consistent with the
notion that data frames are a primitive vector type in vctrs. This
shouldn't affect code that uses[[andlength()to manipulate
the data. On the other hand, the vctrs primitives likevec_slice()
will now operate rowwise whenvec_data()returns a data frame. -
outeris now passed unrecycled to name specifications. Instead,
the return value is recycled (#1099). -
Name specifications can now return
NULL. The names vector will
only be allocated if the spec function returns non-NULLduring the
concatenation. This makes it possible to ignore outer names without
having to create an empty names vector when there are no inner
names:zap_outer_spec <- function(outer, inner) if (is_character(inner)) inner # `NULL` names rather than a vector of "" names(vec_c(a = 1:2, .name_spec = zap_outer_spec)) #> NULL # Names are allocated when inner names exist names(vec_c(a = 1:2, c(b = 3L), .name_spec = zap_outer_spec)) #> [1] "" "" "b" -
Fixed several performance issues in
vec_c()andvec_unchop()
with named vectors. -
The restriction that S3 lists must have a list-based proxy to be considered
lists byvec_is_list()has been removed (#1208). -
New performant
data_frame()constructor for creating data frames in a way
that follows tidyverse semantics. Among other things, inputs are recycled
using tidyverse recycling rules, strings are never converted to factors,
list-columns are easier to create, and unnamed data frame input is
automatically spliced. -
New
df_list()for safely and consistently constructing the data structure
underlying a data frame, a named list of equal-length vectors. It is useful
in combination withnew_data_frame()for creating user-friendly
constructors for data frame subclasses that use the tidyverse rules for
recycling and determining types. -
Fixed performance issue with
vec_order()on classed vectors which
affecteddplyr::group_by()(tidyverse/dplyr#5423). -
vec_set_names()no longer alters the input in-place (#1194). -
New
vec_proxy_order()that provides an ordering proxy for use in
vec_order()andvec_sort(). The default method falls through to
vec_proxy_compare(). Lists are special cased, and return an integer
vector proxy that orders by first appearance. -
List columns in data frames are no longer comparable through
vec_compare(). -
The experimental
relaxargument has been removed from
vec_proxy_compare().