vec_type2() finds the common type for a pair of vectors, or dies trying.
It forms the foundation of the vctrs type system, along with
This powers type coercion but should not usually be called directly;
# S3 method for tbl_df vec_type2(x, y) vec_type2(x, y) # S3 method for logical vec_type2(x, y) # S3 method for integer vec_type2(x, y) # S3 method for double vec_type2(x, y) # S3 method for raw vec_type2(x, y) # S3 method for character vec_type2(x, y) # S3 method for list vec_type2(x, y)
Either vector types; i.e.
vctrs thinks of the vector types as forming a partially ordered set, or poset. Then finding the common type from a set of types is a matter of finding the least-upper-bound; if the least-upper-bound does not exist, there is no common type. This is the case for many pairs of 1d vectors.
The poset of the most important base vectors is shown below:
(where datetime stands for
POSIXt, and date for
vec_type2() dispatches on both arguments. This is implemented by having
vec_type2.integer() also be S3 generics,
which call e.g.
return the same value as
vec_type2.y.x(); this is currently not enforced,
but should be tested.
Whenever you implemenet a
make sure to always provide
which should call
vec_type2.new_class.vctrs_unspecified() (which should return
vignette("s3-vector") for full details.