# NEWS

# relatable 1.0.0

## Features

`relatable`

provides two easy-to-use, robust functions for mapping from a vector of keys to a vector of values, as well as creating and applying more sophisticated mappings, such as many-to-many, one-to-many, and many-to-one relations. These are primarily designed with two goals in mind:

- Producing reusable code that is easier to write and read.
- Ensuring relations conform to specified restrictions, for example injectivity or surjectivity, and safely handle nonstandard mappings, including unexpected inputs, NAs, heterogeneous lists containing multiple variable types including other lists, and mappings between vectors of uncertain or unequal lengths.

## Functions

`relate`

returns a vector *Y = F(X)* where *F* maps each element of input vector `X`

from its position in vector `A`

to its corresponding position in vector `B`

. Can be applied as a vectorised key-value dictionary with an optional default return value. Additional options restrict mapping types so relation *F* must be a function, injective, surjective, etc.

`relation`

returns a reusable function *F* that performs the same operation as `relate`

. In addition to providing a reusable function, if `handle_duplicate_mappings = TRUE`

, `relation`

checks for and eliminates duplicate mappings that would be invalid inputs for `relate`

. If `report_properties = TRUE`

, `relation`

also prints the restrictions the mapping from `A`

to `B`

conforms to.