vec_is()is a predicate that checks if its input is a vector that conforms to a prototype and/or a size.vec_assert()throws an error when the input is not a vector or doesn't conform.
Usage
vec_assert(
x,
ptype = NULL,
size = NULL,
arg = caller_arg(x),
call = caller_env()
)
vec_is(x, ptype = NULL, size = NULL)Arguments
- x
A vector argument to check.
- ptype
Prototype to compare against. If the prototype has a class, its
vec_ptype()is compared to that ofxwithidentical(). Otherwise, itstypeof()is compared to that ofxwith==.- size
A single integer size against which to compare.
- arg
Name of argument being checked. This is used in error messages. The label of the expression passed as
xis taken as default.- call
The execution environment of a currently running function, e.g.
caller_env(). The function will be mentioned in error messages as the source of the error. See thecallargument ofabort()for more information.
Value
vec_is() returns TRUE or FALSE. vec_assert() either
throws a typed error (see section on error types) or returns x,
invisibly.
Error types
vec_is() never throws.
vec_assert() throws the following errors:
If the input is not a vector, an error of class
"vctrs_error_scalar_type"is raised.If the prototype doesn't match, an error of class
"vctrs_error_assert_ptype"is raised.If the size doesn't match, an error of class
"vctrs_error_assert_size"is raised.
Both errors inherit from "vctrs_error_assert".
Lifecycle
Both vec_is() and vec_assert() are questioning because their ptype
arguments have semantics that are challenging to define clearly and are
rarely useful.
Use
obj_is_vector()orobj_check_vector()for vector checksUse
vec_check_size()for size checksUse
vec_cast(),inherits(), or simple type predicates likerlang::is_logical()for specific type checks
Vectors and scalars
Informally, a vector is a collection that makes sense to use as column in a
data frame. The following rules define whether or not x is considered a
vector.
If no vec_proxy() method has been registered, x is a vector if:
The base type of the object is atomic:
"logical","integer","double","complex","character", or"raw".xis a list, as defined byobj_is_list().xis a data.frame.
If a vec_proxy() method has been registered, x is a vector if:
The proxy satisfies one of the above conditions.
The base type of the proxy is
"list", regardless of its class. S3 lists are thus treated as scalars unless they implement avec_proxy()method.
Otherwise an object is treated as scalar and cannot be used as a vector. In particular:
NULLis not a vector.S3 lists like
lmobjects are treated as scalars by default.Objects of type expression are not treated as vectors.
