Skip to content

Adjective-animal hash


hash_animal(x, n_adj = 2)

hash_raw_animal(x, n_adj = 2)

hash_obj_animal(x, n_adj = 2, serialize_version = 2)



Character vector. NA entries will have an NA hash.


Number of adjectives to use. It must be from 0 through 3.


Workspace format version to use, see base::serialize().


A data frame with columns

  • hash: the hash value, a string.

  • words: list column with the adjectives and the animal name in a character vector.

hash_raw_animal() and hash_obj_animal() return a list with entries:

  • hash: the hash value, a string,

  • `words: the adjectives and the animal name in a character vector.


It uses the first 13 hexadecimal characters (out of the 32) of the MD5 hash of the input, and converts them into an adjective-animal form to create a human readable hash.

Number of possible hash values

hash_animal() uses 1748 animal names and 8946 different adjectives. The number of different hashes you can get for different values of n_adj:

n_adjsize of the hash table space


The list of adjectives and animals comes from the ids package, and in turn from, and from (now gone).

hash_raw_animal() calculates the adjective-animal hash of the bytes of a raw vector.

hash_obj_animal() calculates the adjective-animal hash of an R object. The object is serialized into a binary vector first.

See also

the ids package for generating random adjective-animal ids

Other hash functions: hash_emoji(), hash_md5(), hash_sha1(), hash_sha256()


hash_animal(c("foo", "bar"))
#>                                       hash        words
#> 1                   sacrilegious diet lion sacrileg....
#> 2 uncitizenly agricultural amethystgemclam uncitize....

# if you increase `n_adj`, the shorter hash is a suffix of the longer:
hash_animal("cli package", 0)$hash
#> [1] "pullet"
hash_animal("cli package", 1)$hash
#> [1] "pastyfaced pullet"
hash_animal("cli package", 2)$hash
#> [1] "pregnant pastyfaced pullet"
hash_animal("cli package", 3)$hash
#> [1] "unwelcome pregnant pastyfaced pullet"