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:
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.