species names matched to their accepted names, offline
taxify matches taxonomic names, such as a field survey’s species list or the species column of a trait table, to the name each taxon currently carries, its accepted name.
The package performs the name-resolution step of taxize and WorldFlora, run offline against local backbone files. A backbone is a published taxonomic database, such as the Catalogue of Life or World Flora Online, downloaded once and stored on your disk. Each name comes back with its accepted name, how it was matched, and the backbone version that matched it, so you can review the uncertain matches and decide which to keep. taxify supports:
Backbones for every group. taxify reads 19 taxon backbones: global checklists (the Catalogue of Life, the GBIF Backbone Taxonomy of the Global Biodiversity Information Facility, the Integrated Taxonomic Information System (ITIS), the NCBI Taxonomy of the US National Center for Biotechnology Information and the Open Tree of Life) and the authorities of single groups (World Flora Online, the World Register of Marine Species (WoRMS), Species Fungorum, AlgaeBase, FishBase, the Mammal Diversity Database, AviList and others), all returning the same columns. Several backbones form a fallback chain, so a name one backbone lacks is matched by the next.
Published data on the accepted name. Trait,
status and distribution datasets,
109
of them, from the Red List of the International Union for Conservation
of Nature (IUCN) to seed mass and fish morphology, are joined by the
accepted name, so a dataset that writes a synonym still lines up. add_trait()
gathers one trait from every dataset that carries it.
Checking a list. inspect()
returns only the names that need a look (typos, outdated synonyms,
spellings shared by several taxa, unknown genera, an animal in a plant
list), each with the name to use.
Vegetation units. Two vegetation classifications, the EuroVegChecklist and the Czech national classification, resolve alliance and association names the way species names are resolved.
The accepted name is the backbone’s own, and where backbones
disagree, mode = "wide" shows each one’s answer side by
side. Every row records the backbone and its version. The references of
every backbone and dataset a result used are printed by
cite(), and the versions are saved by
taxify_lock() so the analysis can be rerun on the same
data. A script in the repository matches 300 World Flora Online names in
taxify and in WorldFlora; 277 get the same accepted name, and Compatibility
with taxize and WorldFlora shows where and why the others
differ.
install.packages("taxify")
# or the development version
# install.packages("pak")
pak::pak("gcol33/taxify")install_backbones() downloads the Catalogue of Life
(COL), the GBIF Backbone Taxonomy and ITIS, about 1.1 GB in all.
Matching then reads them from disk, and taxify_clean()
removes them again.
Match the names with taxify().
Look at the matches that need a decision with
inspect().
Join data on the accepted name with add_data() for
your own table, or with a published dataset’s own function, such as
add_iucn().
library(taxify)
names <- c("Quercus robur", "Quercus robus", "Pinus abies",
"Fallopia japonica")
res <- taxify(names)
#> Matching 4 names against 3 backbones: col -> gbif -> itis
#> [col] Matching 4 names...
#> [gbif] Matching 1 remaining names...
#> [itis] Matching 1 remaining names...
#> [col] Fuzzy matching 1 unmatched...
#> [gbif] Skipped (all names matched)
#> [itis] Skipped (all names matched)
#> Warning: 1 of 4 names resolve to more than one accepted ID (Pinus abies).
#> `accepted_id` holds one and `accepted_ids` all of them; list them with
#> taxify_ids() before requesting data by ID.
res[, c("input_name", "accepted_name", "match_type", "is_synonym")]
#> input_name accepted_name match_type is_synonym
#> 1 Quercus robur Quercus robur exact FALSE
#> 2 Quercus robus Quercus robur fuzzy FALSE
#> 3 Pinus abies Picea abies exact TRUE
#> 4 Fallopia japonica Reynoutria japonica exact TRUE
#> Sources: COL 2026.09 | cite() for full citationsQuercus robur is matched as written. Quercus robus
has a typo and reaches Q. robur by fuzzy matching, which
compares it with the names of its own genus. Pinus abies and
Fallopia japonica are outdated synonyms of Picea abies
and Reynoutria japonica. The warning names an input whose
spelling belongs to more than one accepted taxon; the n_ids
and accepted_ids columns count and list them.
The input is a character vector of names. Authors, qualifiers such as
cf. and agg., capitals and an abbreviated
genus are handled before matching. Without backbone, every
installed backbone is tried in a fixed priority order, starting with the
Catalogue of Life. A vector such as
backbone = c("wfo", "col") names the chain.
inspect(res)
#> Range outlier check skipped: WCVP not installed.
#> ── taxify inspection ──────────────────────────────────────────
#> 4 names inspected | 3 with anomalies
#> backbones: col, gbif, itis
#> review: 2 note: 1
#> not checked: out_of_range (WCVP range data not installed)
#> ────────────────────────────────────────────────────────────
#> [review] Pinus abies -> Picea abies ambiguous (targets: 4HPZF|8K9Y|6BRMR|4HQ4F); outdated synonym
#> [review] Quercus robus -> Quercus robur likely misspelling
#> [note ] Fallopia japonica -> Reynoutria japonica outdated synonyminspect() labels each name with a tier:
review for a match you have to decide on, note
for a change you can accept. Get
started follows a longer list to a table with traits attached.
add_data() matches the names of your own table against
the same backbones and joins on the accepted name. Each published
dataset has its own function, named after its source:
res |> add_data("my_traits.csv")
res |> add_iucn() |> add_eive()
res |> add_trait("seed_mass")list_enrichments() lists every published dataset with
its version, size and source, and Attaching
published data shows the joins in full.
Each backbone is downloaded once, as a file built by the companion package taxifydb, and pinned by version. A vector of backbones forms a fallback chain: every backbone is asked for an exact match before any is asked for a fuzzy one.
taxify(names, backbone = c("wfo", "col"))list_backbones() reports each backbone’s scope, size,
version and whether it is installed. Choosing
and combining backbones covers the choice per group, downloads and
version pinning, and The
backbones and datasets describes each one.
The backbone files also answer lookups by synonym, rank and lineage:
synonyms("Picea abies") # every synonym of a name
children("Quercus") # the species of a genus
upstream("Quercus robur", to = "family") # the family of a name
sci2comm("Quercus robur") # common names
parse_name("Quercus robur (L.) H.Karst.") # genus, epithet, authorExploring the backbone shows these and the other lookup functions.
Names are matched in C through vectra, the column-store package taxify reads its backbone files with. A fuzzy match compares a name only with the names of its own genus. Matching large lists gives timings for lists up to 100,000 names.
Start with Get started: one path from a messy list to accepted names with traits attached.
inspect(), and
reconcile() for a checklist.Questions and bug reports go to the GitHub issues. A bug report is easiest to act on with a small reproducible example, for instance made with reprex.
Pull requests are welcome; see the contributing guide.
“Software is like sex: it’s better when it’s free.” — Linus Torvalds
I’m a PhD student who builds R packages in my free time because I believe good tools should be free and open. I started these projects for my own work and figured others might find them useful too.
If this package saved you some time, buying me a coffee is a nice way to say thanks. It helps with my coffee addiction.
taxify is licensed under MIT. Each backbone and dataset keeps the licence of its publisher, listed in The backbones and datasets.
If you use taxify, please cite the package and the backbones and datasets your results come from. cite() on a taxify result lists their references.
Colling G (2026). _taxify: Offline Taxonomic Name Matching Against
Darwin Core Backbones_. doi:10.32614/CRAN.package.taxify
<https://doi.org/10.32614/CRAN.package.taxify>. R package version
0.7.0, <https://gillescolling.com/taxify/>.
BibTeX:
@Manual{colling2026taxify,
title = {taxify: Offline Taxonomic Name Matching Against Darwin Core Backbones},
author = {Gilles Colling},
year = {2026},
note = {R package version 0.7.0},
doi = {10.32614/CRAN.package.taxify},
url = {https://gillescolling.com/taxify/},
}