vctrs (version 0.0.0.9000)

vec_type2: Find the common type for a pair of vector types

Description

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 vec_cast(). This powers type coercion but should not usually be called directly; instead call vec_ptype().

Usage

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 list vec_type2(x, y)

# S3 method for character vec_type2(x, y)

# S3 method for factor vec_type2(x, y)

# S3 method for ordered vec_type2(x, y)

# S3 method for Date vec_type2(x, y)

# S3 method for POSIXt vec_type2(x, y)

# S3 method for difftime vec_type2(x, y)

# S3 method for data.frame vec_type2(x, y)

# S3 method for tbl_df vec_type2(x, y)

Arguments

x, y

Either vector types; i.e.

Coercion rules

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 Date)

S3 dispatch

vec_type2() dispatches on both arguments. This is implemented by having methods of vec_type2(), e.g. vec_type2.integer() also be S3 generics, which call e.g. vec_type2.integer.double(). vec_type2.x.y() must return the same value as vec_type2.y.x(); this is currently not enforced, only checked in unit tests.

See vignette("s3-vector") on how to extend to your own S3 vector classes.