| Title: | Offline Taxonomic Name Matching Against Darwin Core Backbones |
|---|---|
| Description: | Matches taxonomic names against local copies of published backbones ('Catalogue of Life', 'GBIF Backbone Taxonomy', 'ITIS', 'World Flora Online', 'WoRMS', 'NCBI Taxonomy', 'Open Tree of Life', 'Euro+Med', 'Species Fungorum', 'AlgaeBase', 'FishBase', 'SeaLifeBase', 'Reptile Database', 'LCVP', 'WCVP', 'Mammal Diversity Database', 'AviList', 'LPSN') and two vegetation classifications, and resolves each name to its accepted name. It performs the name-resolution step of 'taxize' and 'WorldFlora', run offline against these files. Names are cleaned of authors and qualifiers, matched exactly and then by edit distance within their genus, and followed from synonym to accepted name, with the backbone version recorded on every row. Published trait, status and distribution datasets are joined on the accepted name, and so is a table the user supplies. Matching runs in the 'vectra' column-store engine. |
| Authors: | Gilles Colling [aut, cre, cph] (ORCID: <https://orcid.org/0000-0003-3070-6066>) |
| Maintainer: | Gilles Colling <[email protected]> |
| License: | MIT + file LICENSE |
| Version: | 0.7.0 |
| Built: | 2026-10-13 12:03:58 UTC |
| Source: | https://github.com/gcol33/taxify |
Joins AlgaeTraits (Vranken et al. 2023) macroalgal functional traits to a
taxify() result by looking up accepted_name. AlgaeTraits provides
morphological, ecological, and life-history traits for European seaweeds.
add_algae_traits(x, cols = NULL, verbose = TRUE)add_algae_traits(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: AlgaeTraits (Vranken et al. 2023, VLIZ Marine Data Archive, CC BY 4.0). Coverage: ~1,745 European macroalgae species.
The same data.frame with additional columns:
Maximum body size in centimetres.
Growth form / body shape (e.g., filamentous, foliose, crustose).
Calcification type (e.g., uncalcified, articulated, encrusting).
Life span category (annual, perennial, etc.).
Tidal zonation (e.g., supralittoral, eulittoral, sublittoral).
Wave exposure tolerance (sheltered, moderately exposed, exposed).
Habitat environment (marine, brackish, freshwater).
Environmental position / substrate type.
Vranken S et al. (2023) AlgaeTraits: a trait database for (European) seaweeds. Earth System Science Data 15:2711-2754. doi:10.5194/essd-15-2711-2023
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Fucus vesiculosus", backbone = "gbif") |> add_algae_traits() options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Fucus vesiculosus", backbone = "gbif") |> add_algae_traits() options(old)
Joins alien species first record data to a taxify() result, filtered
by location. Data from the FirstRecords dataset (Seebens & Renard Truong
2026; Seebens et al. 2017).
add_alien_first_records(x, location, cols = NULL, verbose = TRUE)add_alien_first_records(x, location, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
location |
Character. Location key(s), or
List the locations covered with
|
cols |
Character vector of value columns to attach (from
|
verbose |
Logical. Default |
The source's locations do not overlap: a country's location excludes the
islands and other parts recorded separately, so location = "US" is the
first record for the United States without Hawaii and Alaska, and a species
first recorded on Hawaii has no "US" record unless the source holds one for
the country itself. Seebens et al. (2017) define the set as "282
non-overlapping regions (countries and sub-national regions such as
islands)". Every row carries country_code, the ISO 3166-1 alpha-2 code of
the country the location lies in, so a country-wide first record is an
explicit roll-up: request the country's locations and take the earliest year.
Source: FirstRecords v4.0 (Seebens & Renard Truong 2026, doi:10.5281/zenodo.18759840), CC BY 4.0, one row per species x location.
The same data.frame with additional column(s):
Year of the first record (integer), or NA
if not recorded for that location.
Database that contributed the record
(e.g., "GAVIA", "CABI ISC").
Original citation or reference for the record.
Seebens H, Blackburn TM, Dyer EE, et al. (2017) No saturation in the accumulation of alien species worldwide. Nature Communications 8:14435.
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Robinia pseudoacacia") |> add_alien_first_records(location = "AT") taxify(c("Robinia pseudoacacia", "Ailanthus altissima")) |> add_alien_first_records(location = c("AT", "DE", "Hawaii")) options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Robinia pseudoacacia") |> add_alien_first_records(location = "AT") taxify(c("Robinia pseudoacacia", "Ailanthus altissima")) |> add_alien_first_records(location = c("AT", "DE", "Hawaii")) options(old)
Joins body size and wing morphology for the carabid fauna of the Italian
Alps to a taxify() result by accepted name.
add_alpine_carabids(x, cols = NULL, verbose = TRUE)add_alpine_carabids(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Chamberlain et al. (2020), 185 species recorded at 416 sites between 697 and 2840 m in the Italian Alps. CC0.
The widest European carabid trait table after add_chowdhury(), and the
one that reaches the Alpine fauna the lowland compilations miss. Like every
European carabid source its body sizes trace back to carabids.org, so
agreement with those is not corroboration; it runs 1.03 against them, the
same quantity without being the verbatim copy add_eberswalde() is.
wing_morph arrives as bare letters with no legend in the file. The codes
were read off the data rather than assumed: crossed against
add_chowdhury()'s words, b is short-winged, m long-winged and d
dimorphic.
The same data.frame with alpine_ columns: numeric
body_length_mm, categorical wing_morph.
Chamberlain D, Gobbi M, Negro M, et al. (2020) Trait-modulated decline of carabid beetle occurrence along elevation gradients across the European Alps. Journal of Biogeography 47:1030-1041. doi:10.1111/jbi.13792
Data: doi:10.5061/dryad.fn2z34tq1
## Not run: taxify(c("Abax exaratus", "Carabus depressus")) |> add_alpine_carabids() ## End(Not run)## Not run: taxify(c("Abax exaratus", "Carabus depressus")) |> add_alpine_carabids() ## End(Not run)
Joins uniform life-history traits for birds, mammals and reptiles to a
taxify() result by looking up accepted_name.
add_amniote(x, cols = NULL, verbose = TRUE)add_amniote(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Amniote Life History Database (Myhrvold et al. 2015, Ecology, CC0). Coverage: 21,322 species across birds, mammals and reptiles.
The same data.frame with additional columns:
Taxonomic class (Aves/Mammalia/Reptilia).
Adult body mass (g).
Unsexed adult body mass (g).
Female body mass (g).
Male body mass (g).
Adult snout-vent length (cm).
Maximum longevity (years).
Litter or clutch size (count).
Litters or clutches per year (count).
Egg mass (g).
Incubation period (days).
Age at female maturity (days).
Gestation length (days).
Weaning age (days).
Birth or hatching weight (g).
Myhrvold NP et al. (2015) An amniote life-history database to perform comparative analyses with birds, mammals, and reptiles. Ecology 96:3109. doi:10.1890/15-0846R.1
## Not run: taxify("Accipiter badius", backbone = "gbif") |> add_amniote() ## End(Not run)## Not run: taxify("Accipiter badius", backbone = "gbif") |> add_amniote() ## End(Not run)
Joins AmphiBIO amphibian life-history and ecological traits to a
taxify() result by looking up accepted_name.
add_amphibio(x, cols = NULL, verbose = TRUE)add_amphibio(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: AmphiBIO (Oliveira et al. 2017, CC BY 4.0). Coverage: ~6,800 amphibian species. Amphibians only.
The same data.frame with additional columns:
Maximum body size in mm (snout-vent length).
Age at maturity in years.
Maximum longevity in years.
Clutch/litter size.
Reproductive output per year.
Offspring size in mm.
Direct development (0/1).
Has larval stage (0/1).
Aquatic habitat (0/1).
Fossorial habitat (0/1).
Arboreal habitat (0/1).
Diurnal activity (0/1).
Nocturnal activity (0/1). Named
nocturnal_amphibio to avoid collision with EltonTraits'
nocturnal column.
Oliveira BF, Sao-Pedro VA, Santos-Barrera G, Penone C, Costa GC (2017) AmphiBIO, a global database for amphibian ecological traits. Scientific Data 4:170123.
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Bufo bufo", backbone = "gbif") |> add_amphibio() options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Bufo bufo", backbone = "gbif") |> add_amphibio() options(old)
Joins AnAge (Animal Ageing and Longevity Database) traits to a
taxify() result by looking up accepted_name.
add_anage(x, cols = NULL, verbose = TRUE)add_anage(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: AnAge (de Magalhaes & Costa 2009, CC BY). Coverage: ~4.7k vertebrate species (mammals, birds, reptiles, amphibians, fish).
The same data.frame with additional columns:
Maximum longevity in years.
Adult body mass in grams.
Basal metabolic rate in watts.
Female age at sexual maturity in days.
Male age at sexual maturity in days.
Gestation or incubation length in days.
Litter or clutch size.
Mass at birth in grams.
Growth rate (1/days).
Body temperature in Kelvin.
de Magalhaes JP, Costa J (2009) A database of vertebrate longevity records and their relation to other life-history traits. Journal of Evolutionary Biology 22:1770-1774.
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Vulpes vulpes", backbone = "gbif") |> add_anage() options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Vulpes vulpes", backbone = "gbif") |> add_anage() options(old)
Joins AnimalTraits body mass and metabolic rate data to a taxify()
result by looking up accepted_name.
add_animaltraits(x, cols = NULL, verbose = TRUE)add_animaltraits(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: AnimalTraits (Herberstein et al. 2022, CC0). Coverage: ~2k species across arthropods, vertebrates, molluscs, and annelids. Individual-level observations aggregated to species medians.
The same data.frame with additional columns:
Median body mass in kg.
Median metabolic rate in watts.
Herberstein ME et al. (2022) AnimalTraits: a curated animal trait database for body mass, metabolic rate and brain size. Scientific Data 9:265.
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Drosophila melanogaster", backbone = "gbif") |> add_animaltraits() options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Drosophila melanogaster", backbone = "gbif") |> add_animaltraits() options(old)
Joins Arctic Traits Database functional traits to a taxify() result by
accepted_name. Each fuzzy-coded trait is reduced to its dominant category.
add_arctic_traits(x, cols = NULL, verbose = TRUE)add_arctic_traits(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Arctic Traits Database (Degen & Faulwetter 2019, University of Vienna PHAIDRA, CC-BY 4.0).
The same data.frame with categorical arctic_traits_ columns:
feeding_habit, skeleton, reproduction, larval_development, size,
living_habit, body_form, mobility, bioturbation, depth_range,
trophic_level, fragility, sociability, longevity.
Degen R, Faulwetter S (2019) The Arctic Traits Database. University of Vienna. doi:10.25365/phaidra.49
## Not run: taxify("Astarte borealis", backbone = "gbif") |> add_arctic_traits() ## End(Not run)## Not run: taxify("Astarte borealis", backbone = "gbif") |> add_arctic_traits() ## End(Not run)
Joins the Northwestern European Arthropod Life Histories dataset to a
taxify() result by looking up accepted_name.
add_arthropod_traits(x, cols = NULL, verbose = TRUE)add_arthropod_traits(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Logghe et al. (2025, CC BY-NC). Coverage: ~4.9k arthropod species from NW Europe across 10 orders (Coleoptera, Hemiptera, Orthoptera, Araneae, Diptera, Hymenoptera, Lepidoptera, etc.).
The same data.frame with additional columns:
Body size in mm.
Dispersal ability (0–1 ratio within order).
Mean number of generations per year.
Fecundity (number of eggs/offspring).
Development time in days.
Adult lifespan in days.
Mean thermal niche (degrees C).
Activity period (diurnal/nocturnal/both).
Feeding guild of adult.
Trophic range of adult (specialist/generalist).
Logghe A et al. (2025) An in-depth dataset of northwestern European arthropod life histories and ecological traits. Biodiversity Data Journal 13:e146785.
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Abax parallelepipedus", backbone = "gbif") |> add_arthropod_traits() options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Abax parallelepipedus", backbone = "gbif") |> add_arthropod_traits() options(old)
Joins species-level plant functional traits to a taxify() result by looking
up accepted_name. Values are aggregated from the long-format AusTraits
database (numeric traits by median, categorical traits by mode).
add_austraits(x, cols = NULL, verbose = TRUE)add_austraits(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: AusTraits (Falster et al. 2021, Scientific Data, CC BY 4.0). Coverage: ~33k Australian plant taxa.
The same data.frame with additional columns:
Plant growth form.
Life history (annual/perennial/...).
Woodiness.
Photosynthetic pathway (C3/C4/CAM).
Dispersal syndrome.
Resprouting capacity (fire response).
Flowering time.
Plant height (m).
Leaf length (mm).
Leaf width (mm).
Leaf area (mm2).
Leaf mass per area (g/m2; SLA is its reciprocal).
Leaf nitrogen per dry mass (mg/g).
Leaf phosphorus per dry mass (mg/g).
Seed dry mass (mg).
Wood density (g/cm3).
Falster D et al. (2021) AusTraits, a curated plant trait database for the Australian flora. Scientific Data 8:254. doi:10.1038/s41597-021-01006-6
old <- options(taxify.data_dir = taxify_example_data()) taxify("Eucalyptus globulus", backbone = "gbif") |> add_austraits() options(old)old <- options(taxify.data_dir = taxify_example_data()) taxify("Eucalyptus globulus", backbone = "gbif") |> add_austraits() options(old)
Joins AVONET species-level averages for bird morphology, ecology,
and migration to a taxify() result by looking up accepted_name.
add_avonet(x, cols = NULL, verbose = TRUE)add_avonet(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach. |
verbose |
Logical. Default |
Source: AVONET (Tobias et al. 2022, Figshare, CC BY 4.0). Coverage: ~11k bird species. Birds only.
The same data.frame with additional columns:
Beak length in mm (culmen, species mean).
Beak depth in mm (species mean).
Wing length in mm (species mean).
Tail length in mm (species mean).
Tarsus length in mm (species mean).
Body mass in grams (species mean).
Hand-wing index (pointedness, species mean).
Primary habitat classification.
Trophic level classification.
Trophic niche classification.
Migration strategy: "sedentary", "partial",
or "full".
Tobias JA et al. (2022) AVONET: morphological, ecological and geographical data for all birds. Ecology Letters 25:581-597.
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Parus major", backbone = "gbif") |> add_avonet() options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Parus major", backbone = "gbif") |> add_avonet() options(old)
Joins per-species microbial phenotype and growth-condition traits from
BacDive, the Bacterial Diversity Metadatabase (DSMZ), to a taxify() result
by looking up accepted_name. Strain-level records are aggregated to one row
per species (categorical traits by mode, numeric by median); temperature and
pH prefer the optimum measurement, falling back to the growth measurement.
add_bacdive(x, cols = NULL, verbose = TRUE)add_bacdive(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: BacDive (Reimer et al.), DSMZ, CC BY 4.0. ~18.6k bacterial and archaeal species with at least one phenotypic trait.
The same data.frame with additional columns:
Gram reaction (positive / negative / variable).
Cell morphology (rod, coccus, ...).
motile / non-motile.
Oxygen tolerance (aerobe, anaerobe, facultative anaerobe, microaerophile, ...).
Cell dimensions in micrometres.
Optimal (or reported growth) temperature, C.
Optimal (or reported growth) pH.
Reimer LC et al. (2022) BacDive in 2022: the knowledge base for standardized bacterial and archaeal data. Nucleic Acids Research 50:D741-D746. doi:10.1093/nar/gkab961
## Not run: taxify("Escherichia coli", backbone = "gbif") |> add_bacdive() ## End(Not run)## Not run: taxify("Escherichia coli", backbone = "gbif") |> add_bacdive() ## End(Not run)
Joins Baseflor (Julve, Programme Catminat) plant traits to a taxify()
result by looking up accepted_name. Baseflor covers the vascular flora of
France and neighbouring regions, providing flowering phenology, pollination
and breeding biology, dispersal mode, and floral and fruit morphology.
add_baseflor(x, cols = NULL, verbose = TRUE)add_baseflor(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Baseflor, Programme Catminat (Julve 1998 ff.). Coverage: ~7,000 vascular plant taxa of France and neighbouring regions. Data are released under ODbL 1.0 / CC BY-SA 2.0.
For ecological indicator values on the light, temperature, moisture,
reaction, and nutrient axes, see add_eive() (European calibration). For
Raunkiaer life form and seed, leaf, and clonality traits of the Northwest
European flora, see add_leda().
The same data.frame with additional columns:
First month of flowering (1-12).
Last month of flowering (1-12). A value smaller
than flower_begin_month denotes a flowering period that wraps
across the new year (e.g. begin 10, end 6).
Pollination vector(s): insect, wind, water, self, apogamy. Comma-separated when more than one applies.
Diaspore dispersal mode(s): anemochory, barochory, epizoochory, endozoochory, myrmecochory, hydrochory, autochory, dyszoochory. Comma-separated when more than one applies.
Sexual system: hermaphroditic, monoecious, dioecious, gynodioecious, androdioecious, gynomonoecious, polygamous.
Flower colour(s): white, yellow, pink, green, blue, brown, black. Comma-separated when more than one applies.
Fruit type: achene, capsule, caryopsis, drupe, legume, silique, berry, follicle, cone, samara, pyxid.
Woody growth form for woody taxa: tree, small tree, large tree, shrub, bush, subshrub, liana, parasite. NA for non-woody (herbaceous) taxa.
Ellenberg-style continentality indicator value (1-9), the axis absent from EIVE.
Ellenberg-style salinity indicator value (0-9), the axis absent from EIVE.
Julve, Ph. (1998 ff.) baseflor. Index botanique, ecologique et chorologique de la Flore de France. Programme Catminat.
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Bellis perennis") |> add_baseflor() options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Bellis perennis") |> add_baseflor() options(old)
Joins global bee morphological traits to a taxify() result by
accepted_name. Long-format measurements are reduced to species medians.
add_bee_ostwald(x, cols = NULL, verbose = TRUE)add_bee_ostwald(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Ostwald et al. global bee morphology (Zenodo, CC-BY 4.0).
The same data.frame with numeric columns bee_ostwald_itd_mm
(intertegular distance), bee_ostwald_forewing_length_mm,
bee_ostwald_tongue_length_mm, bee_ostwald_tongue_width_mm,
bee_ostwald_body_length_mm, bee_ostwald_thorax_length_mm,
bee_ostwald_hair_length_mm, bee_ostwald_hair_coverage_pct.
Ostwald MM et al. (2024) A global database of bee morphological traits. Zenodo. doi:10.5281/zenodo.13366989
## Not run: taxify("Apis mellifera", backbone = "gbif") |> add_bee_ostwald() ## End(Not run)## Not run: taxify("Apis mellifera", backbone = "gbif") |> add_bee_ostwald() ## End(Not run)
Joins species-level bryophyte traits to a taxify() result by looking up
accepted_name.
add_bet(x, cols = NULL, verbose = TRUE)add_bet(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Bryophytes of Europe Traits (van Zuijlen et al. 2023, EnviDat, CC BY-SA 4.0). Coverage: ~1.8k bryophyte species.
The same data.frame with additional columns:
Growth form (acrocarpous/pleurocarpous/thalloid/...).
Life form (cushion/mat/turf/weft/...).
Life strategy (During).
Sexual condition (monoicous/dioicous).
Mean shoot size (mm).
Generation length (years).
Mean spore diameter (micrometres).
Ellenberg light indicator value.
Ellenberg temperature indicator value.
Ellenberg moisture indicator value.
Ellenberg reaction (pH) indicator value.
Ellenberg nitrogen indicator value.
Occurs on soil (0/1).
Occurs on rock (0/1).
Occurs on bark (0/1).
Occurs on deadwood (0/1).
Every substrate class the species occurs on, as a
pipe-delimited set over soil, rock, bark, wood (deadwood),
living_plants (epiphytic on leaves or other bryophytes) and
dung_carcass, e.g. "soil|rock|bark". add_trait() "substrate"
reduces it to one primary class.
Epiphytic (0/1).
IUCN European Red List category.
van Zuijlen K et al. (2023) Bryophytes of Europe Traits (BET): a fundamental dataset for European bryophyte ecology. EnviDat. doi:10.16904/envidat.348
## Not run: taxify("Abietinella abietina", backbone = "gbif") |> add_bet() ## End(Not run)## Not run: taxify("Abietinella abietina", backbone = "gbif") |> add_bet() ## End(Not run)
Joins per-species springtail body length to a taxify() result by looking up
accepted_name. The value is the median over the BETSI compilation's
per-source measurements, with the observed range and the measurement and
source counts behind it.
add_betsi_collembola_body_length(x, cols = NULL, verbose = TRUE)add_betsi_collembola_body_length(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: body length values from the BETSI database (Biological and Ecological
Traits of Soil Invertebrates), the 2017 all-Collembola export requested by
Bonfanti (2018), CC BY-NC 4.0. Coverage: 1,374 species. The European-compendia
body-length floor: it agrees with the Ellers et al. body size at Pearson
r = 0.96 over 262 shared species and with the Plazi treatment values at
r = 0.906. Body length is also available through
add_trait()("body_length"), which coalesces it with the Plazi, monograph
and other springtail sources.
The same data.frame with additional columns:
Body length (mm), median of the per-source measurements.
Smallest measurement (mm).
Largest measurement (mm).
Number of measurements aggregated.
Number of distinct literature sources.
Bonfanti J (2018) Body length trait values from the BETSI database, on all Collembola species. Zenodo. doi:10.5281/zenodo.1292461
## Not run: taxify("Isotoma viridis", backbone = "gbif") |> add_betsi_collembola_body_length() ## End(Not run)## Not run: taxify("Isotoma viridis", backbone = "gbif") |> add_betsi_collembola_body_length() ## End(Not run)
Joins per-species springtail functional traits to a taxify() result by
looking up accepted_name. Output columns are prefixed betsi_ct_.
add_betsi_collembola_traits(x, cols = NULL, verbose = TRUE)add_betsi_collembola_traits(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: per-species Collembola traits from Lu et al. (2025), Appendix S1. The
morphological traits (body size, antenna/body ratio, furca, pigmentation,
ocelli, reproduction) are derived from the BETSI database (Pey et al. 2014);
vertical stratification and trophic position were measured in that study and
the life form assigned after Potapov et al. (2016). Coverage: 26 species.
Body length is also available through add_trait()("body_length").
The same data.frame with additional columns:
Maximum body length (mm).
Antenna to body length ratio.
Number of ocelli.
Furca (springing organ) development.
Pigmentation (scaled).
Reproduction mode.
Vertical stratification (scaled).
Trophic position.
Life form (after Potapov et al. 2016).
Lu J-Z et al. (2025) Mixed forests with native species mitigate impacts of introduced Douglas fir on soil decomposers (Collembola). Ecological Applications 35:e70034. doi:10.1002/eap.70034
## Not run: taxify("Isotoma viridis", backbone = "gbif") |> add_betsi_collembola_traits() ## End(Not run)## Not run: taxify("Isotoma viridis", backbone = "gbif") |> add_betsi_collembola_traits() ## End(Not run)
Joins fuzzy-coded earthworm functional traits to a taxify() result by
looking up accepted_name. Output columns are prefixed betsi_ew_.
add_betsi_earthworm_traits(x, cols = NULL, verbose = TRUE)add_betsi_earthworm_traits(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: earthworm functional traits compiled from the BETSI database
(Biological and Ecological Traits of Soil Invertebrates) and published in
Pelosi et al. (2014), Appendix 1. Coverage: 11 species. Earthworm body length
and soil carbon preference are given as fuzzy affinity vectors rather than a
single value, so they are not passed to the scalar add_trait() verb.
The same data.frame with additional columns, one per modality bin of
seven fuzzy-coded traits: body length, body mass to length ratio, cocoon
diameter, epithelium, typhlosolis, soil carbon preference and vertical
distribution. Each trait is fuzzy coded, so a species' affinities across the
bins of one trait (columns sharing a betsi_ew_<trait>__ stem) sum to 100.
See enrichment_cols for the full column list.
Pelosi C, Pey B, Hedde M, et al. (2014) Reducing tillage in cultivated fields increases earthworm functional diversity. Applied Soil Ecology 83:79-87. doi:10.1016/j.apsoil.2013.10.005
## Not run: taxify("Lumbricus terrestris", backbone = "gbif") |> add_betsi_earthworm_traits() ## End(Not run)## Not run: taxify("Lumbricus terrestris", backbone = "gbif") |> add_betsi_earthworm_traits() ## End(Not run)
Joins North Atlantic / NE Pacific shelf marine-fish life-history and ecology
traits to a taxify() result by accepted_name (species-level summaries).
add_beukhof(x, cols = NULL, verbose = TRUE)add_beukhof(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Beukhof et al. (2019) marine fish trait collection (PANGAEA, CC-BY 4.0).
The same data.frame with beukhof_ columns: numeric trophic_level,
aspect_ratio, offspring_size, age_maturity, fecundity,
length_infinity_cm, growth_coefficient, length_max_cm; categorical
habitat, feeding_mode, body_shape, fin_shape, spawning_type.
Beukhof E et al. (2019) A trait collection of marine fish species from North Atlantic and Northeast Pacific continental shelf seas. PANGAEA. doi:10.1594/PANGAEA.900866
## Not run: taxify("Gadus morhua", backbone = "gbif") |> add_beukhof() ## End(Not run)## Not run: taxify("Gadus morhua", backbone = "gbif") |> add_beukhof() ## End(Not run)
Joins BIEN plant functional traits to a taxify() result by looking up
accepted_name. Values are species-level aggregates of public-access BIEN
records (numeric by median, categorical by mode).
add_bien(x, cols = NULL, verbose = TRUE)add_bien(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: BIEN (Botanical Information and Ecology Network; Maitner et al. 2018, Methods Ecol Evol, CC BY). Coverage: tens of thousands of vascular plant species.
The same data.frame with additional columns:
Whole-plant height (m).
Maximum whole-plant height (m).
Diameter at breast height (cm).
Leaf area per leaf dry mass (SLA, mm2/mg).
Leaf area (mm2).
Leaf dry mass (mg; BIEN records g).
Leaf nitrogen per dry mass (mg/g).
Leaf phosphorus per dry mass (mg/g).
Leaf thickness (mm).
Seed mass (mg).
Stem wood density (g/cm3).
Leaf life span (months).
Whole-plant growth form.
Whole-plant woodiness.
Whole-plant dispersal syndrome.
Flower colour.
Maitner BS et al. (2018) The BIEN R package: A tool to access the Botanical Information and Ecology Network (BIEN) database. Methods in Ecology and Evolution 9:373-379. doi:10.1111/2041-210X.12861
old <- options(taxify.data_dir = taxify_example_data()) taxify("Quercus alba", backbone = "gbif") |> add_bien() options(old)old <- options(taxify.data_dir = taxify_example_data()) taxify("Quercus alba", backbone = "gbif") |> add_bien() options(old)
Joins BIRDBASE biogeography, conservation and life-history traits to a
taxify() result by looking up accepted_name. Traits redundant with
add_avonet() morphology are not carried.
add_birdbase(x, cols = NULL, verbose = TRUE)add_birdbase(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: BIRDBASE (Sekercioglu et al. 2025, figshare, CC BY 4.0). Coverage: ~11.6k bird species.
The same data.frame with additional columns:
IUCN Red List category.
Biogeographic realm.
Latitudinal zone (1 tropical to 5).
Island-restricted breeding (0/1).
Restricted-range species (0/1).
Lower elevation limit (m).
Upper elevation limit (m).
Elevational breadth (m).
Primary habitat.
Habitat breadth (number of habitats).
Primary diet.
Diet breadth (number of food types).
Ecological specialization index.
Minimum clutch size (eggs).
Maximum clutch size (eggs).
Nest architecture.
Volancy (yes/no/partial).
Sekercioglu CH et al. (2025) BIRDBASE: a global database of bird ecological and life-history traits. Scientific Data. doi:10.1038/s41597-025-05615-3
## Not run: taxify("Struthio camelus", backbone = "gbif") |> add_birdbase() ## End(Not run)## Not run: taxify("Struthio camelus", backbone = "gbif") |> add_birdbase() ## End(Not run)
Joins genus-level ant defensive and ecological traits to a taxify() result
by genus.
add_blanchard(x, cols = NULL, verbose = TRUE)add_blanchard(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Blanchard & Moreau (2017) ant defensive traits (Dryad, CC0). Joins on genus because the database is genus-resolved.
The same data.frame with blanchard_ columns: categorical
subfamily, spines, sting, diet, nesting, foraging; numeric
colony_size_workers (joined on genus).
Blanchard BD, Moreau CS (2017) Defensive traits in the ant genera database. Dryad. doi:10.5061/dryad.st6sc
## Not run: taxify("Camponotus pennsylvanicus", backbone = "gbif") |> add_blanchard() ## End(Not run)## Not run: taxify("Camponotus pennsylvanicus", backbone = "gbif") |> add_blanchard() ## End(Not run)
Joins Mediterranean-Basin plant fire-response, regeneration and functional
traits to a taxify() result by accepted_name.
add_brot(x, cols = NULL, verbose = TRUE)add_brot(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: BROT 2.0 (Tavsanoglu & Pausas 2018, Scientific Data, CC-BY 4.0).
The same data.frame with brot_ columns: numeric seed_mass_mg,
sla_mm2_mg, height_m, leaf_area_mm2; categorical resp_fire,
growth_form, disp_mode, fruit_type, soil_seed_bank,
seedling_emergence.
Tavsanoglu C, Pausas JG (2018) A functional trait database for Mediterranean Basin plants (BROT 2.0). Scientific Data 5:180135. doi:10.6084/m9.figshare.c.3843841
old <- options(taxify.data_dir = taxify_example_data()) taxify("Quercus coccifera", backbone = "gbif") |> add_brot() options(old)old <- options(taxify.data_dir = taxify_example_data()) taxify("Quercus coccifera", backbone = "gbif") |> add_brot() options(old)
Joins attributes of British and Irish mosses, liverworts and hornworts
(Hill et al. 2007) to a taxify() result by looking up accepted_name.
Bryophytes are otherwise almost absent from the bundled trait databases.
add_bryoatt(x, cols = NULL, verbose = TRUE)add_bryoatt(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
1,194 taxa. The vascular-plant companion is add_plantatt().
This source states no licence (it is copyright the Biological Records
Centre), so taxify ships no pre-built copy of it. The first call builds it
from the original source on the user's machine, which requires the taxifydb
package (remotes::install_github("gcol33/taxifydb")). taxify redistributes
none of the data. Cite Hill et al. (2007) for the data.
The same data.frame with additional columns. The default set:
Ellenberg indicator values calibrated for British and Irish bryophytes.
Life-form code, kept verbatim (Ts, Mr,
Ms, ...).
Plant group: M moss, L liverwort,
H hornwort.
Status code, kept verbatim (N native, AN alien
naturalised, AR archaeophyte).
Hill MO, Preston CD, Bosanquet SDS, Roy DB (2007) BRYOATT: Attributes of British and Irish Mosses, Liverworts and Hornworts. NERC Centre for Ecology and Hydrology.
## Not run: # Builds the enrichment on first use (needs taxifydb). taxify("Polytrichum commune", backbone = "gbif") |> add_bryoatt() ## End(Not run)## Not run: # Builds the enrichment on first use (needs taxifydb). taxify("Polytrichum commune", backbone = "gbif") |> add_bryoatt() ## End(Not run)
Joins somatic chromosome numbers from the Chromosome Counts Database (Rice et
al. 2015) to a taxify() result by looking up accepted_name. CCDB
aggregates published counts per taxon; records are collapsed to the binomial
and reduced to a per-species median with its observed range.
add_ccdb(x, cols = NULL, verbose = TRUE)add_ccdb(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: CCDB (ccdb.tau.ac.il), citation requested, no explicit licence, so
taxify publishes no pre-built copy. The data is built on the user's machine from
the original source, which needs taxifydb installed:
remotes::install_github("gcol33/taxifydb").
CCDB's service reports gametic numbers, which taxifydb doubles to the somatic
2n reported here. The spread between min and max is real ploidy variation
among a species' cytotypes rather than measurement error, so a polyploid
complex legitimately spans a wide range (Sedum acre runs 2n = 40 to 120).
Where a species is covered by both, this and the CC BY
add_kew_cvalues() chromosome column agree exactly for 85% of the 7133
species they share; the rest are compilations differing over which cytotype
is typical.
The same data.frame with additional columns. The default set:
Median somatic chromosome number (2n).
Lowest 2n reported for the species.
Highest 2n reported for the species.
Rice A, Glick L, Abadi S, Einhorn M, Kopelman NM, Salman-Minkov A, Mayzel J, Chay O, Mayrose I (2015) The Chromosome Counts Database (CCDB) - a community resource of plant chromosome numbers. New Phytologist 206:19-26.
add_kew_cvalues() for genome size and a CC BY chromosome number.
## Not run: # Builds the enrichment on first use (requires taxifydb). taxify("Zea mays", backbone = "gbif") |> add_ccdb() ## End(Not run)## Not run: # Builds the enrichment on first use (requires taxifydb). taxify("Zea mays", backbone = "gbif") |> add_ccdb() ## End(Not run)
Joins biological traits of North-West European continental-shelf benthic
macrofauna from the Cefas biological-traits database to a taxify() result by
looking up genus. The source fuzzy-codes traits at genus level, and each
trait is reduced to its highest-scoring modality, so the join is on genus
rather than accepted_name: every species in a coded genus is annotated.
add_cefas_btrait(x, cols = NULL, verbose = TRUE)add_cefas_btrait(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: North-West European continental-shelf benthos biological-traits database, Cefas Data Hub (doi:10.14466/CefasDataHub.123), Open Government Licence v3.0.
The same data.frame with additional columns. The default set:
Maximum body-size class.
Body morphology.
Life-span class.
Living habit.
Feeding mode.
Mobility.
Bioturbation mode.
cols = "all" also attaches egg and larval development and sediment position.
Centre for Environment, Fisheries and Aquaculture Science (2022) North-West European continental-shelf benthos biological-traits database. doi:10.14466/CefasDataHub.123
## Not run: # Downloads the enrichment on first use. taxify("Abra alba", backbone = "gbif") |> add_cefas_btrait() ## End(Not run)## Not run: # Downloads the enrichment on first use. taxify("Abra alba", backbone = "gbif") |> add_cefas_btrait() ## End(Not run)
Joins species-level turtle and tortoise traits to a taxify() result by
looking up accepted_name.
add_chelonians(x, cols = NULL, verbose = TRUE)add_chelonians(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: CheloniansTraits (Wang et al. 2025, figshare, CC BY 4.0). Coverage: 358 turtle and tortoise species. Numeric values reported as "min-max" ranges in the source are reduced to their midpoint.
The same data.frame with additional columns:
Maximum straight-line carapace length (mm).
Maximum body mass (g).
Mean clutch size (count).
Maximum clutch size (count).
Clutches per year (count).
Incubation period (days).
Age at sexual maturity (years).
Maximum lifespan (years).
Range size (km2).
Diet (herbivorous/carnivorous/omnivorous).
Activity time.
Microhabitat (aquatic/terrestrial/...).
Habitat type.
Shell type (hardshell/softshell).
Wang Y et al. (2025) CheloniansTraits: a comprehensive trait database of global turtles and tortoises. figshare. doi:10.6084/m9.figshare.28828241
## Not run: taxify("Chelonia mydas", backbone = "gbif") |> add_chelonians() ## End(Not run)## Not run: taxify("Chelonia mydas", backbone = "gbif") |> add_chelonians() ## End(Not run)
Joins carabid (ground beetle) traits and modelled national occupancy trends to
a taxify() result by accepted name.
add_chowdhury(x, cols = NULL, verbose = TRUE)add_chowdhury(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Supporting Information Data S1 of Chowdhury et al. (2025), 383 German carabid species, 382 of them with traits. Ground beetles are one of the most intensively sampled insect groups in ecology, and this is the largest openly reachable block of carabid traits.
wing_morph is three-state: long-winged, short-winged, and the 83
dimorphic species that produce both forms. Dimorphism is the trait of
interest in carabid dispersal ecology, so it is never collapsed into a
flight-capable/flightless binary.
red_list_germany is the German national Red List code (*, 1, 2, 3, V,
R, G, D). red_list_iucn restates that same national assessment in IUCN
letter codes and is not a global IUCN assessment: it maps
deterministically onto red_list_germany (* to LC, 1 to CR, 2 to EN, 3
to VU, V to NT), with no off-diagonal case in all 382 species. A species can
be critically endangered at its German range edge and of least concern
globally, so these columns stay in this function and out of the global
conservation_status trait.
occupancy_trend is the paper's own result: the modelled change in
occupancy probability over two years, negative for a declining species.
The same data.frame with chowdhury_ columns: numeric
body_length_mm and occupancy_trend; categorical wing_morph,
trophic_level, habitat_pref, red_list_germany, red_list_iucn,
threat_status, trend_status, trend_significance.
Chowdhury S, Jaureguiberry P, Rada S, et al. (2025) Widespread decline of ground beetles in Germany. Diversity and Distributions. doi:10.1111/ddi.70112
## Not run: taxify(c("Carabus coriaceus", "Amara aenea")) |> add_chowdhury() ## End(Not run)## Not run: taxify(c("Carabus coriaceus", "Amara aenea")) |> add_chowdhury() ## End(Not run)
Attaches the Linnaean ranks above family (kingdom, phylum, class, order) to a
taxify() result by joining each matched row back to its backbone. The core
taxify() output already carries family and genus; this fills the ranks
above them, for whichever ranks the matched backbone stores. Rows matched by
different backbones are each joined against their own backbone.
add_classification( x, ranks = c("kingdom", "phylum", "class", "order"), verbose = TRUE )add_classification( x, ranks = c("kingdom", "phylum", "class", "order"), verbose = TRUE )
x |
A data.frame returned by |
ranks |
Character vector of ranks to attach. Default
|
verbose |
Logical. Default |
x with the requested rank columns added. A rank a backbone does not
store is left NA (WFO, for example, carries no ranks above family).
add_col_info(), add_gbif_info() for backbone-specific extras.
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Naja naja", backbone = "reptiledb") |> add_classification() options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Naja naja", backbone = "reptiledb") |> add_classification() options(old)
Joins clonal growth, bud-bank and lifespan traits of the Central European
flora (Klimesova et al. 2017) to a taxify() result by looking up
accepted_name. Source records are collapsed to the binomial, so
infraspecific rows are aggregated to the species (numeric traits by median,
nominal traits by mode).
add_clopla(x, cols = NULL, verbose = TRUE)add_clopla(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
2,909 species of the Central European flora.
This source states no licence. It is an Ecological Society of America data
paper, free to use with citation, and taxify ships no pre-built copy of it.
The first call builds it from the original source on the user's machine, which
requires the taxifydb package (remotes::install_github("gcol33/taxifydb")).
taxify redistributes none of the data. Cite Klimesova et al. (2017) for
the data.
The same data.frame with additional columns. The default set:
Clonal growth present.
Clonal index.
Growth-form and life-cycle flags.
Persistence of the clonal connection.
Offspring produced per parent shoot per year.
Lateral spread.
Bud-bank size and depth.
Final clonal growth organ.
cols = "all" attaches every trait the source carries (29 in total: the
remaining bud-bank counts by depth class, root-derived bud banks,
branching, cyclicity and dispersibility), with codes kept verbatim.
Klimesova J, Danihelka J, Chrtek J, de Bello F, Herben T (2017) CLO-PLA: a database of clonal and bud-bank traits of the Central European flora. Ecology 98:1179. doi:10.1002/ecy.1745
## Not run: # Builds the enrichment on first use (needs taxifydb). taxify("Trifolium repens", backbone = "gbif") |> add_clopla() ## End(Not run)## Not run: # Builds the enrichment on first use (needs taxifydb). taxify("Trifolium repens", backbone = "gbif") |> add_clopla() ## End(Not run)
Joins extra Catalogue of Life columns to a taxify() result by
looking up taxon_id in the COL backbone. Only enriches rows where
backbone == "col".
add_col_info(x)add_col_info(x)
x |
A data.frame returned by |
The same data.frame with additional columns:
Hybrid type from COL: "generic", "specific",
"infrageneric", or "infraspecific".
Nomenclatural code ("ICN", "ICZN", etc.).
Nomenclatural status.
Original publication reference.
Kingdom classification.
Phylum classification.
Class classification (renamed to avoid conflict with
R's class function).
Order classification.
Infraspecific epithet.
Logical. Whether the species is extinct (from SpeciesProfile, if available).
Logical. Whether the species is marine.
Logical. Whether the species is freshwater.
Logical. Whether the species is terrestrial.
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Quercus robur", backbone = "col") |> add_col_info() options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Quercus robur", backbone = "col") |> add_col_info() options(old)
The default COMBINE function. Attaches the reported (measured or literature
compiled) trait values and fills each still-missing cell from COMBINE's
phylogenetically imputed table, so a single call reaches the fullest coverage
COMBINE offers. A measurement is never overwritten: the reported value wins
wherever it exists and the imputed model only fills gaps. Beside every trait
sits a <trait>_src column recording where that cell came from ("reported",
"imputed", or NA when neither table has it), so a model estimate is
always distinguishable from a measurement.
add_combine(x, cols = NULL, verbose = TRUE)add_combine(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
For a single-table view use add_combine_reported() (measured values only)
or add_combine_imputed() (the imputed table on its own).
The same data.frame with the combine_* trait columns (reported
values, gaps filled from the imputed table) and, beside each, a
combine_*_src column tagging that cell as "reported", "imputed", or
NA. Traits COMBINE does not impute (for example
combine_biogeographical_realm) come out "reported" wherever present. If
the imputed table is unavailable, the reported values are returned with
every _src tag "reported" or NA.
add_combine_reported(), add_combine_imputed()
## Not run: # Coverage-filled values with per-trait provenance: res <- taxify("Osphranter rufus", backbone = "col") |> add_combine() res[, c("combine_gestation_length_d", "combine_gestation_length_d_src")] ## End(Not run)## Not run: # Coverage-filled values with per-trait provenance: res <- taxify("Osphranter rufus", backbone = "col") |> add_combine() res[, c("combine_gestation_length_d", "combine_gestation_length_d_src")] ## End(Not run)
Joins the phylogenetically imputed COMBINE table to a taxify() result by
looking up accepted_name. This is the companion to add_combine_reported():
the same ~6.2k mammal species, but with the cells the reported table leaves
missing filled in by COMBINE's phylogenetic multiple-imputation model, giving
near-complete coverage for the life-history traits. Imputed values are model
estimates, not measurements, so they are attached under their own
combine_imputed_* columns rather than replacing the reported values.
add_combine_imputed(x, cols = NULL, verbose = TRUE)add_combine_imputed(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: COMBINE (Soria et al. 2021, Ecology, CC0), imputed table
(trait_data_imputed.csv). Same species set and column meanings as
add_combine_reported(); the difference is coverage. Because imputation only
fills gaps, applying both functions and comparing combine_* with
combine_imputed_* shows which values are measured versus estimated.
The same data.frame with additional columns, mirroring
add_combine_reported() but named combine_imputed_* (e.g.
combine_imputed_adult_mass_g, combine_imputed_gestation_length_d).
Traits COMBINE does not impute (for example biogeographical_realm and
habitat_breadth_n) carry the reported coverage; the life-history traits
(gestation, weaning, longevity, litter size, generation length, ...) are
near-complete.
Soria CD et al. (2021) COMBINE: a coalesced mammal database of intrinsic and extrinsic traits. Ecology 102:e03344. doi:10.1002/ecy.3344
add_combine_reported() for the measured values; add_combine()
for the two coalesced with per-trait provenance.
## Not run: # Compare reported vs imputed gestation length for a mammal: taxify("Vulpes vulpes", backbone = "gbif") |> add_combine_reported() |> add_combine_imputed() ## End(Not run)## Not run: # Compare reported vs imputed gestation length for a mammal: taxify("Vulpes vulpes", backbone = "gbif") |> add_combine_reported() |> add_combine_imputed() ## End(Not run)
Joins the COMBINE mammal trait database to a taxify() result by looking up
accepted_name, attaching the reported (directly measured or
literature-compiled) trait values. COMBINE ships two parallel tables over the
same ~6.2k mammal species: the reported table used here, and a
phylogenetically imputed table with the missing cells filled in by a model
(add_combine_imputed()). They are offered as two separate sources so the
distinction between a measured value and a model estimate stays explicit.
add_combine_reported(x, cols = NULL, verbose = TRUE)add_combine_reported(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: COMBINE (Soria et al. 2021, Ecology, CC0), reported table. Coverage:
~6.2k mammal species, keyed on the IUCN 2020 binomial. The reported table
leaves a cell missing when no source measured that trait for a species; use
add_combine_imputed() for the higher-coverage phylogenetically imputed
values.
The same data.frame with additional columns (reported values):
Adult body mass (g).
Adult head-body length (mm).
Litter size (count).
Litters per year (count).
Maximum longevity (days).
Gestation length (days).
Weaning age (days).
Generation length (days).
Natal dispersal distance (km).
Number of IUCN habitats (count).
Number of diet categories (count).
Trophic level (1 herbivore, 2 omnivore, 3 carnivore).
Activity cycle (1 nocturnal, 2 cathemeral, 3 diurnal).
Foraging stratum (G/Ar/A/S/M).
Biogeographical realm(s).
Soria CD et al. (2021) COMBINE: a coalesced mammal database of intrinsic and extrinsic traits. Ecology 102:e03344. doi:10.1002/ecy.3344
add_combine() for reported values with imputed gaps filled and
per-trait provenance; add_combine_imputed() for the imputed values;
add_pantheria(), add_anage() for other mammal trait sources.
## Not run: taxify("Vulpes vulpes", backbone = "gbif") |> add_combine_reported() ## End(Not run)## Not run: taxify("Vulpes vulpes", backbone = "gbif") |> add_combine_reported() ## End(Not run)
Joins vernacular names to a taxify() result by looking up
accepted_name, filtered by language.
add_common_names(x, lang = "en", cols = NULL, verbose = TRUE)add_common_names(x, lang = "en", cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
lang |
Character. ISO 639-1 language code (e.g., |
cols |
Which columns to attach. |
verbose |
Logical. Default |
Common names are merged from three sources:
GBIF backbone vernacular names (CC0), multi-language via ISO 639-1 codes.
NCBI Taxonomy common names (public domain), no language tag
(lang = NA).
Open Tree of Life common names (CC0), no language tag
(lang = NA).
When multiple common names exist for a species in the requested language, the first (most commonly used) is returned.
The same data.frame with an additional column:
The vernacular name in the requested language,
or NA if none is available.
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Quercus robur") |> add_common_names() taxify("Quercus robur") |> add_common_names(lang = "de") options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Quercus robur") |> add_common_names() taxify("Quercus robur") |> add_common_names(lang = "de") options(old)
Joins marine-copepod traits from the trait database of Brun et al. (2017) to a
taxify() result by looking up accepted_name. Records are reduced to
per-species values (numeric by median, categorical by mode).
add_copepod_traits(x, cols = NULL, verbose = TRUE)add_copepod_traits(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: A trait database for marine copepods (Brun et al. 2017), PANGAEA, CC BY 3.0.
The same data.frame with additional columns. The default set:
Body length (mm).
Egg outer diameter (micrometres).
Clutch size.
Feeding mode.
Spawning strategy.
cols = "all" also attaches feeder type, myelination, resting-egg presence,
and the per-species min/max/n spread of the numeric values.
Brun P, Payne MR, Kiorboe T (2017) A trait database for marine copepods. Earth System Science Data 9:99-113. doi:10.5194/essd-9-99-2017
## Not run: # Downloads the enrichment on first use. taxify("Calanus finmarchicus", backbone = "gbif") |> add_copepod_traits() ## End(Not run)## Not run: # Downloads the enrichment on first use. taxify("Calanus finmarchicus", backbone = "gbif") |> add_copepod_traits() ## End(Not run)
Joins species-level coral functional traits to a taxify() result by looking
up accepted_name. Values are aggregated from the long-format Coral Trait
Database (numeric traits by median, categorical traits by mode).
add_coral_traits(x, cols = NULL, verbose = TRUE)add_coral_traits(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Coral Trait Database (Madin et al. 2016, Scientific Data, CC BY 4.0). Coverage: ~1.5k coral species.
The same data.frame with additional columns:
Zooxanthellate / azooxanthellate.
Typical growth form (massive/branching/...).
Colonial / solitary.
Attached / unattached.
Hermaphrodite / gonochore.
Spawner / brooder.
Symbiodinium clade.
Maximum corallite width (mm).
Maximum colony diameter (cm).
Linear extension rate (mm/year).
Lower depth limit (m).
Upper depth limit (m).
Skeletal density (g/cm3).
Madin JS et al. (2016) The Coral Trait Database, a curated database of trait information for coral species from the global oceans. Scientific Data 3:160017. doi:10.1038/sdata.2016.17
## Not run: taxify("Acropora millepora", backbone = "gbif") |> add_coral_traits() ## End(Not run)## Not run: taxify("Acropora millepora", backbone = "gbif") |> add_coral_traits() ## End(Not run)
Joins an external data source (CSV file or data.frame) to a taxify()
result. Species names in the external data are matched through the same
backbone(s) used in the original taxify() call, and the join is performed
on the accepted taxon — so synonyms in either dataset resolve to the same
key. The key is the accepted_id together with the backbone that issued it,
falling back to accepted_name where the two sides were matched by different
backbones: backbone IDs are bare integers in most backbones and mean nothing
outside the one they came from.
add_data( x, data, species_col = NULL, table = NULL, sheet = NULL, start_row = NULL, cols = NULL, group_col = NULL, groups = "all", fuzzy = TRUE, fuzzy_threshold = 0.2, verbose = TRUE )add_data( x, data, species_col = NULL, table = NULL, sheet = NULL, start_row = NULL, cols = NULL, group_col = NULL, groups = "all", fuzzy = TRUE, fuzzy_threshold = 0.2, verbose = TRUE )
x |
A data.frame returned by |
data |
One of:
|
species_col |
Character. Name of the column in |
table |
Character. Required when |
sheet |
Integer or character. Sheet to read when |
start_row |
Integer. Row where column headers begin in an |
cols |
Character vector of column names from |
group_col |
Character or |
groups |
Character vector or |
fuzzy |
Logical. Enable fuzzy matching for names in |
fuzzy_threshold |
Numeric. Maximum allowed distance for fuzzy matches.
Default |
verbose |
Logical. Default |
The workflow:
Read data (CSV or data.frame).
Identify the species column (explicit or auto-detected).
Match species names through the same backbone(s) as the original
taxify() call, obtaining accepted_id for each row.
Check for conflicting duplicates: if multiple rows in data resolve
to the same accepted name with different values, an error is raised
(with group_col set, within each group).
Exact duplicates produce a warning and are deduplicated.
Left-join on the accepted taxon.
When data has multiple rows per species (e.g., one row per species
per country), set group_col to produce wide output with suffixed
columns. This is the same format as the built-in grouped enrichments.
When species_col is not specified, add_data() takes the first 10 rows
of each character column and runs them through taxify(). The column with
the highest match rate is selected. If no column achieves at least 50%
matches, an error is raised asking the user to specify species_col
explicitly.
The input data.frame with additional columns from data, joined
via the backbone-resolved accepted taxon. Columns from data that collide
with existing columns in x are prefixed with "data_".
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) result <- taxify(c("Quercus robur", "Pinus sylvestris")) traits <- data.frame(species = c("Quercus robur", "Pinus sylvestris"), height = c(30, 25)) result |> add_data(traits, species_col = "species") options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) result <- taxify(c("Quercus robur", "Pinus sylvestris")) traits <- data.frame(species = c("Quercus robur", "Pinus sylvestris"), height = c(30, 25)) result |> add_data(traits, species_col = "species") options(old)
Joins species-level mean seed mass and plant height from Diaz et al.
(2022) to a taxify() result by looking up accepted_name.
add_diaz_traits(x, cols = NULL, verbose = TRUE)add_diaz_traits(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Diaz et al. 2022, TRY File Archive (CC BY 3.0). Coverage: ~46k plant species. Plants only.
The same data.frame with additional columns:
Seed mass in milligrams (species-level mean).
Plant height in metres (species-level mean).
Diaz S, Kattge J, Cornelissen JHC, Wright IJ, Lavorel S, Dray S, Reu B, Kleyer M, Wirth C, Prentice IC, et al. (2022) The global spectrum of plant form and function: enhanced species-level trait dataset. Scientific Data 9:755. doi:10.1038/s41597-022-01774-9
Diaz S, Kattge J, Cornelissen JHC, Wright IJ, Lavorel S, Dray S, Reu B, Kleyer M, Wirth C, Prentice IC, et al. (2016) The global spectrum of plant form and function. Nature 529:167-171. doi:10.1038/nature16489
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Quercus robur") |> add_diaz_traits() options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Quercus robur") |> add_diaz_traits() options(old)
Joins genus-level dispersal-related traits for European aquatic
macroinvertebrates to a taxify() result by genus. Each fuzzy-coded trait
is reduced to its dominant modality (with the database's own labels).
add_disperse(x, cols = NULL, verbose = TRUE)add_disperse(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: DISPERSE (Sarremejane et al. 2020, Scientific Data, CC-BY 4.0). Joins on genus because the database is genus-resolved.
The same data.frame with categorical disperse_body_size_cm,
disperse_life_cycle, disperse_repro_cycles, disperse_dispersal,
disperse_adult_lifespan, disperse_female_wing_mm, disperse_wing_type,
disperse_fecundity, disperse_drift, and the numeric bin-midpoint columns
disperse_body_size_cm_mid, disperse_female_wing_mm_mid,
disperse_fecundity_mid (all joined on genus).
Sarremejane R et al. (2020) DISPERSE, a trait database to assess the dispersal potential of European aquatic macroinvertebrates. Scientific Data 7:386. doi:10.6084/m9.figshare.c.5000633
## Not run: taxify("Baetis rhodani", backbone = "gbif") |> add_disperse() ## End(Not run)## Not run: taxify("Baetis rhodani", backbone = "gbif") |> add_disperse() ## End(Not run)
Joins ground-beetle traits and 24-year local population trends to a
taxify() result by accepted name.
add_eberswalde(x, cols = NULL, verbose = TRUE)add_eberswalde(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Weiss, von Wehrden & Linde (2024), 27 species pitfall-trapped on 13 forest plots near Eberswalde between 1999 and 2022.
body_length_mm, wing_morph and range_centre_lat are carabids.org
(Homburg et al. 2014) verbatim, which the deposit's README states and the
data confirm: over the 19 species shared with add_chowdhury() every size
is exactly equal and every wing class agrees. They are surfaced here
because each add_<source>() function shows what its source carries, and they are kept out
of add_trait(), where they would double-count one lineage.
What belongs to this deposit alone is the monitoring result:
abundance_trend over the 24 years, drought_effect against the 72-month
SPEI index, and a feeding_guild refined by the authors' field
observations to name the prey. humidity_pref is Sustek's (2004) 1-8
scale, 1 dry to 8 humid.
The same data.frame with eberswalde_ columns: numeric
body_length_mm, humidity_pref, range_centre_lat, abundance_total;
categorical wing_morph, feeding_guild, abundance_trend,
drought_effect.
Weiss F, von Wehrden H, Linde A (2024) Eberswalde Carabid Monitoring 1999-2022 - Full Data. PubData Leuphana. doi:10.48548/pubdata-46
Weiss F, von Wehrden H, Linde A (2024) Long-term drought triggers severe declines in carabid beetles in a temperate forest. Ecography 2024(4):e07020. doi:10.1111/ecog.07020
## Not run: taxify(c("Carabus coriaceus", "Nebria brevicollis")) |> add_eberswalde() ## End(Not run)## Not run: taxify(c("Carabus coriaceus", "Nebria brevicollis")) |> add_eberswalde() ## End(Not run)
Joins traits from the Ecological Flora of the British Isles (Fitter & Peat
1994) to a taxify() result by looking up accepted_name. Ecoflora covers
the vascular flora of the British Isles, providing canopy height, leaf
traits, life form, flowering phenology, pollination and reproduction, seed
weight, and British-calibrated Ellenberg indicator values. Every column
carries a _uk suffix to mark the British-flora calibration and to avoid
collisions when chained with other plant-trait enrichments
(e.g. add_baseflor() for France, add_floraweb() for Germany).
add_ecoflora(x, cols = NULL, verbose = TRUE)add_ecoflora(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Ecoflora (Ecological Flora of the British Isles). Ecoflora has no
bulk download or API; the bundled dataset was collected one species at a
time and is redistributed under the source licence (CC BY-NC-SA 4.0). The
.vtr is downloaded from the taxify release on first use and cached.
For French-flora traits see add_baseflor(); for German-flora traits see
add_floraweb(); for European-calibration indicator values see add_eive().
The same data.frame with additional _uk columns:
Typical maximum and minimum plant height (mm; Ecoflora records cm).
Leaf area class (cm).
Leaf longevity (e.g. evergreen, deciduous).
Root system type.
Photosynthetic pathway (C3/C4/CAM).
Raunkiaer life form.
Reproduction method.
Flowering months (1-12).
Pollen vector(s).
Seed weight (mg).
Propagule / dispersule type.
Ellenberg indicator values calibrated for the British flora (light, moisture, reaction, nitrogen, salt).
Fitter AH, Peat HJ (1994) The Ecological Flora Database. Journal of Ecology 82:415-425.
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Bellis perennis") |> add_ecoflora() options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Bellis perennis") |> add_ecoflora() options(old)
Joins the ecomorphosis record of a springtail species to a taxify() result
by looking up accepted_name. Ecomorphosis is a seasonal, reversible change
of form some Collembola undergo; this marks the species known to display it.
add_ecomorphosis(x, cols = NULL, verbose = TRUE)add_ecomorphosis(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: extended species list of Collembola known to display ecomorphosis, Bonfanti (2022), Zenodo, CC BY 4.0. Coverage: 43 species, each carrying the literature record for its ecomorphic form. It is a presence list: a species not listed is not evidence of absence.
The same data.frame with additional columns:
Whether the species is known to display ecomorphosis.
The morphological area affected.
The literature record establishing it.
Bonfanti J, Krogh PH, Hedde M, Cortet J (2022) Ecomorphosis in European Collembola: a review in the context of trait-based ecology. Applied Soil Ecology. doi:10.1016/j.apsoil.2022.104692
## Not run: taxify("Hypogastrura vesiculosa", backbone = "gbif") |> add_ecomorphosis() ## End(Not run)## Not run: taxify("Hypogastrura vesiculosa", backbone = "gbif") |> add_ecomorphosis() ## End(Not run)
Joins species-level phytoplankton nutrient physiology (Droop/Monod uptake and
growth parameters for ammonium, nitrate and phosphorus, plus cell size and
carbon content) to a taxify() result by looking up accepted_name.
add_edwards_phyto(x, cols = NULL, verbose = TRUE)add_edwards_phyto(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Edwards et al. (2015, Ecology, CC BY 4.0), a compilation of
phytoplankton nutrient-utilization traits for ~130 species. Single-source
physiological data with no cross-source analogue, so it is attached by
this function and not registered with add_trait().
The same data.frame with additional columns. The curated set:
Coarse phytoplankton group (diatom, green, ...).
Habitat (marine/freshwater).
Cell volume (micron^3).
Carbon content per cell (pg C).
Maximum growth rate on nitrate (per day).
Half-saturation constant for growth on nitrate.
Minimum cell nitrogen quota.
Maximum growth rate on phosphorus (per day).
Half-saturation constant for growth on phosphorus.
Minimum cell phosphorus quota.
With cols = "all" the full set of ammonium/nitrate/phosphorus uptake and
quota parameters (vmax_amm, mu_nit, vmax_p, qmax_p, ...) is attached under
their source names. All uptake/quota traits are joined on accepted_name.
Edwards KF, Thomas MK, Klausmeier CA, Litchman E (2015) Phytoplankton growth and the interaction of light and temperature: A synthesis at the species and community level. Ecology 96(9):2554-2564. doi:10.1890/14-2252.1
## Not run: taxify("Thalassiosira pseudonana", backbone = "gbif") |> add_edwards_phyto() ## End(Not run)## Not run: taxify("Thalassiosira pseudonana", backbone = "gbif") |> add_edwards_phyto() ## End(Not run)
Joins EIVE 1.0 (Dengler et al. 2023) ecological indicator values to a
taxify() result by looking up accepted_name. EIVE provides
continuous indicator values for European vascular plants, superseding
the original ordinal Ellenberg values.
add_eive(x, cols = NULL, verbose = TRUE)add_eive(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: EIVE 1.0 (Dengler et al. 2023, Zenodo, CC BY 4.0). Coverage: ~14.5k European vascular plant species.
The same data.frame with additional columns:
Light indicator value (continuous).
Temperature indicator value (continuous).
Moisture indicator value (continuous).
Soil reaction (pH) indicator value (continuous).
Nutrient indicator value (continuous).
Dengler J et al. (2023) EIVE 1.0: a standardized set of Ecological Indicator Values for Europe. Vegetation Classification and Survey 4:7-29. doi:10.3897/VCS.98324
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Arrhenatherum elatius") |> add_eive() options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Arrhenatherum elatius") |> add_eive() options(old)
Joins European springtail functional traits to a taxify() result by looking
up accepted_name: vertical stratification, body size, reproduction mode and
climatic preferences.
add_ellers_collembola(x, cols = NULL, verbose = TRUE)add_ellers_collembola(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Collembola trait table from Ellers et al. (2018), Dryad, CC0.
Coverage: 278 European Collembola species; taxonomy follows the Checklist of
the Collembola of the World. The openly licensed analogue of the BETSI
multi-trait matrices; its body size agrees with the BETSI body-length floor at
Pearson r = 0.96 over 262 shared species. The body size is also available
through add_trait()("body_length").
The same data.frame with additional columns:
Vertical stratification (soil depth class).
Body size (mm).
Reproduction mode (sexual or asexual).
Moisture preference.
Temperature preference.
Thermal niche breadth.
Ellers J, Berg MP, Dias ATC, Fontana S, Ooms A, Moretti M (2018) Diversity in form and function: vertical distribution of soil fauna mediates multidimensional trait variation. Journal of Animal Ecology 87:933-944. doi:10.1111/1365-2656.12838
## Not run: taxify("Isotoma viridis", backbone = "gbif") |> add_ellers_collembola() ## End(Not run)## Not run: taxify("Isotoma viridis", backbone = "gbif") |> add_ellers_collembola() ## End(Not run)
Joins EltonTraits 1.0 diet composition, foraging strata, body mass,
and activity data to a taxify() result by looking up accepted_name.
add_elton_traits(x, cols = NULL, verbose = TRUE)add_elton_traits(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: EltonTraits 1.0 (Wilman et al. 2014, Figshare, CC0). Coverage: ~15.4k species. Birds and mammals only.
The same data.frame with additional columns:
Percentage of diet: invertebrates.
Percentage of diet: endothermic vertebrates.
Percentage of diet: ectothermic vertebrates.
Percentage of diet: fish.
Percentage of diet: unknown vertebrates.
Percentage of diet: scavenging.
Percentage of diet: fruit.
Percentage of diet: nectar.
Percentage of diet: seeds and nuts.
Percentage of diet: other plant material.
Percentage of foraging: below water surface.
Percentage of foraging: on ground.
Percentage of foraging: in understory.
Percentage of foraging: in mid to high strata.
Percentage of foraging: in canopy.
Percentage of foraging: aerial.
Body mass in grams.
Nocturnal activity (0 = diurnal, 1 = nocturnal).
Dominant diet guild derived from the ten diet-fraction
columns (fractions summed within guild, the guild reaching 50 percent
wins, otherwise omnivore): carnivore, herbivore, omnivore, invertivore,
frugivore, granivore, nectarivore, scavenger. Also reachable across
sources via add_trait(x, "diet_guild").
Wilman H et al. (2014) EltonTraits 1.0: Species-level foraging attributes of the world's birds and mammals. Ecology 95:2027.
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Parus major", backbone = "gbif") |> add_elton_traits() options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Parus major", backbone = "gbif") |> add_elton_traits() options(old)
Joins primary functional traits of freshwater macroinvertebrates from the
U.S. EPA Freshwater Biological Traits Database to a taxify() result.
Records are reduced to per-taxon modes. The database records each trait at
the finest available resolution, so the join matches accepted_name first
and then fills any trait still missing from the taxon's genus-level row; a
species-level value is never overwritten.
add_epa_freshwater(x, cols = NULL, verbose = TRUE)add_epa_freshwater(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: U.S. EPA Freshwater Biological Traits Database (2012), a public-domain U.S. Government work, compiled primarily from Vieira et al. (2006).
The same data.frame with additional columns. The default set:
Functional feeding group.
Primary habit (e.g. clinger, burrower, swimmer).
Number of generations per year.
Thermal preference.
Maximum body-size class.
cols = "all" also attaches body shape, rheophily, oviposition behaviour,
and diapause.
U.S. Environmental Protection Agency (2012) Freshwater Biological Traits Database. Compiled from Vieira NKM et al. (2006) A database of lotic invertebrate traits for North America, USGS Data Series 187.
## Not run: # Downloads the enrichment on first use. taxify("Baetis", backbone = "gbif") |> add_epa_freshwater() ## End(Not run)## Not run: # Downloads the enrichment on first use. taxify("Baetis", backbone = "gbif") |> add_epa_freshwater() ## End(Not run)
Joins European bee and hoverfly morphological, biogeographic and ecological
traits to a taxify() result by accepted_name.
add_eupolltrait(x, cols = NULL, verbose = TRUE)add_eupolltrait(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: EuPollTrait (Milicic et al. 2025, Zenodo, CC-BY 4.0).
The same data.frame with eupolltrait_ columns: numeric itd_mm,
tongue_length_mm, species_temperature_index,
species_continentality_index, area_of_occupancy, extent_of_occurrence;
categorical sociality, nest, larval_nutrition, body_length_category.
Milicic M et al. (2025) EuPollTrait: a trait database for European bees and hoverflies. Zenodo. doi:10.5281/zenodo.18032357
## Not run: taxify("Bombus terrestris", backbone = "gbif") |> add_eupolltrait() ## End(Not run)## Not run: taxify("Bombus terrestris", backbone = "gbif") |> add_eupolltrait() ## End(Not run)
Joins species-level traits of European bats (morphology, life history, diet,
foraging habitat, roost type) to a taxify() result by looking up
accepted_name.
add_eurobat(x, cols = NULL, verbose = TRUE)add_eurobat(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Froidevaux et al. (2023, Scientific Data, CC BY 4.0), EuroBaTrait 1.0. Thematic measurement-or-fact tables are reduced to species-level values (numeric by median, categorical by mode).
The same data.frame with additional columns. The curated set:
Forearm length (mm).
Body mass (g).
Maximum recorded longevity (years).
Litter size.
Diet type (insectivorous, frugivorous, ...).
First main prey item.
With cols = "all" the full trait set (digit lengths, wing indices, habitat
affinity scores, critical feeding areas, roost dependence, phenology, ...) is
attached under their source names.
Froidevaux JSP et al. (2023) EuroBaTrait 1.0: a species-level trait dataset of bats in Europe and beyond. Scientific Data. figshare doi:10.6084/m9.figshare.21777161
## Not run: taxify("Myotis myotis", backbone = "gbif") |> add_eurobat() ## End(Not run)## Not run: taxify("Myotis myotis", backbone = "gbif") |> add_eurobat() ## End(Not run)
Joins the per-area status Euro+Med PlantBase states for a taxon (native,
naturalised, introduced, casual, ...) to a taxify() result, for the areas
or countries asked for. The names and the ids of the euromed backbone are
the same taxa the status is recorded on, so a result matched against any
backbone joins through its accepted name.
add_euromed_distribution(x, region, cols = NULL, verbose = TRUE)add_euromed_distribution(x, region, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
region |
Character. ISO 3166-1 alpha-2 country code(s), Euro+Med area
code(s), or
|
cols |
Which columns to attach. |
verbose |
Logical. Default |
Source: Euro+Med PlantBase (CC BY-SA), European and Mediterranean vascular
plants, bryophytes and some fungi and algae. A report Euro+Med marks as made
in error is not carried; a former presence is "extinct". Where the records
of one taxon and area disagree, the stronger claim wins in the order given
above (a taxon is native wherever a record says so), and the references are
those of the records stating it. The country of an area comes from its own
name, so a combined area has none and its countries are read from the
level-2 areas.
The same data.frame with euromed_status, one of "native",
"naturalised", "introduced", "casual", "cultivated",
"doubtful" or "extinct", and NA where Euro+Med states nothing for the
region. euromed_status_detail carries the term as Euro+Med words it
("endemic", "introduced: uncertain degree of naturalisation").
euromed_status_source holds the ids of the citing references; resolve
them with cite(x$euromed_status_source, source = "euromed_distribution").
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Solidago canadensis") |> add_euromed_distribution(region = "DE") options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Solidago canadensis") |> add_euromed_distribution(region = "DE") options(old)
Joins the function groups a prokaryotic taxon is known to perform (
methanogenesis, denitrification, nitrogen fixation, chitinolysis, human gut
association and 87 others) to a taxify() result.
add_faprotax(x, cols = NULL, verbose = TRUE)add_faprotax(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Louca et al. (2016), 92 function groups over 4470 taxa
compiled from IJSEM and Bergey's Manual. Redistributed under FAPROTAX's own
BSD-style terms; see cite for the notice that must travel
with it.
FAPROTAX annotates a taxon at whatever rank the evidence supports, so its entries are a mix of species and genera. The join follows: a species-level entry matches the accepted name, and a taxon with no entry of its own inherits its genus's. Group memberships are the source's; taxifydb reshapes the grouped list into one row per taxon and reduces each entry to the species or genus it names, which the licence requires be stated as a modification.
Functions stay a set rather than one label because a prokaryote genuinely performs several: Escherichia coli carries 17 of them.
The same data.frame with faprotax_functions (a |-delimited set)
and faprotax_n_functions.
Louca S, Parfrey LW, Doebeli M (2016) Decoupling function and taxonomy in the global ocean microbiome. Science 353:1272-1277. doi:10.1126/science.aaf4507
## Not run: taxify(c("Escherichia coli", "Nitrosomonas europaea")) |> add_faprotax() ## End(Not run)## Not run: taxify(c("Escherichia coli", "Nitrosomonas europaea")) |> add_faprotax() ## End(Not run)
Joins ground-beetle traits measured from Helsinki specimens to a taxify()
result by accepted name.
add_finand(x, cols = NULL, verbose = TRUE)add_finand(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Finand & Kotze (2025), 34 species from 25 remnant urban forests in Helsinki.
Small, and carried for a reason no larger source can supply. Every other reachable carabid trait table traces its body sizes and wing classes back to carabids.org (Homburg et al. 2014), so agreement between them is not corroboration. These body lengths were measured from the beetles the authors caught, which makes them the one independent check: they run at a median ratio of 0.9946 against the NW European arthropod compilation over 28 shared species, with only 7.1 percent exactly equal.
body_length_mm is a whole-body length despite the source column being
terse about it; elytra length would sit near 0.6 of these values.
wing_morph records the morph of the beetles caught in Helsinki, so it can
name a definite morph where a species-level source calls the species
dimorphic. Compare add_chowdhury(), which states the species' capacity.
The same data.frame with finand_ columns: numeric body_length_mm;
categorical wing_morph, feeding_type, habitat_pref, moisture_pref.
Finand B, Kotze DJ (2025) Habitat specialisation and dispersal capacity drive rapid carabid beetle responses to urban forest fragmentation. Zenodo. doi:10.5281/zenodo.17184995
## Not run: taxify(c("Carabus glabratus", "Cychrus caraboides")) |> add_finand() ## End(Not run)## Not run: taxify(c("Carabus glabratus", "Cychrus caraboides")) |> add_finand() ## End(Not run)
Joins FishBase morphological and ecological traits to a taxify() result
by looking up accepted_name.
add_fishbase(x, cols = NULL, verbose = TRUE)add_fishbase(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: FishBase via rfishbase (Froese & Pauly, CC BY-NC 4.0). Coverage: ~35k fish species. Fishes only.
The fb_lw_* columns give one representative length-weight fit per
species from the POPLW table, so a length can be converted to a mass where
fb_body_mass_g (a record maximum) does not fit the analysis. FishBase's
Bayesian congeneric estimates are not included; fb_lw_* are measured
fits.
The build-from-source fallback requires the rfishbase package
(available on CRAN). Pre-built .vtr files do not require rfishbase.
The same data.frame with additional columns:
Maximum body length in centimetres.
Maximum published weight in grams (FishBase
SPECIES.Weight). This is a record maximum, not a typical or
adult-mean mass.
Trophic level.
Minimum depth in metres.
Maximum depth in metres.
Vulnerability index (0–100).
Habitat type (e.g. demersal, pelagic).
Commercial importance category.
Coefficient a of the length-weight relationship
W = a * L^b (weight in g, length in cm of type fb_lw_type),
from FishBase's POPLW table.
Exponent b of the length-weight relationship.
Length convention the coefficients were fitted against
(TL total, SL standard, FL fork, WD width,
...). Chosen to match the species' maximum-length type where recorded, so
it applies to fb_body_length_cm. Applying a coefficient to a
different length type is a silent error.
How the fit was obtained (e.g. "type I linear regression", "single L-W pair with b=3").
Sex the fit applies to (unsexed, mixed, female, male, juvenile).
Sample size the fit was based on.
Coefficient of determination (r^2) of the fit.
Froese R, Pauly D (eds.) (2024) FishBase. World Wide Web electronic publication, https://www.fishbase.org.
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Gadus morhua", backbone = "gbif") |> add_fishbase() options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Gadus morhua", backbone = "gbif") |> add_fishbase() options(old)
Joins FISHMORPH morphological trait data to a taxify() result by
looking up accepted_name. This function is named after its source, FISHMORPH;
for the fish reference database FishBase see add_fishbase().
add_fishmorph(x, cols = NULL, verbose = TRUE)add_fishmorph(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: FISHMORPH (Brosse et al. 2021, Figshare, CC BY 4.0). Coverage: ~9k freshwater fish species.
The same data.frame with additional columns:
Maximum body length (cm).
Body elongation (body length / body depth).
Vertical eye position (eye position / head depth).
Relative eye size (eye diameter / head length).
Oral gape position (mouth position: 0 = inferior, 0.5 = terminal, 1 = superior).
Relative maxillary length (maxillary length / head length).
Body lateral shape (body depth / caudal peduncle depth).
Pectoral fin vertical position (fin insertion depth / body depth).
Pectoral fin size (fin length / body length).
Caudal peduncle throttling (caudal peduncle depth / caudal fin depth).
Brosse S, Charpin N, Su G, Toussaint A, Herrera-R GA, Tedesco PA, Villegé r S (2021) FISHMORPH: A global database on morphological traits of freshwater fishes. Global Ecology and Biogeography 30:2330-2336. doi:10.1111/geb.13395
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Salmo trutta", backbone = "gbif") |> add_fishmorph() options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Salmo trutta", backbone = "gbif") |> add_fishmorph() options(old)
Joins ecological and life-history traits of United States freshwater fishes
from FishTraits (Frimpong & Angermeier 2009) to a taxify() result by looking
up accepted_name.
add_fishtraits(x, cols = NULL, verbose = TRUE)add_fishtraits(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: FishTraits v14.3 (USGS ScienceBase), a public-domain U.S. Government work. North American freshwater fishes.
The same data.frame with additional columns. The default set:
Common name.
Whether native to the contiguous United States.
Maximum total length (cm).
Maximum reported age (years).
Age at maturity (years).
Maximum fecundity.
Reproductive guild.
Lower temperature tolerance (deg C).
Upper temperature tolerance (deg C).
Whether recorded as extinct.
cols = "all" also attaches the ten diet-category flags, salinity tolerance,
flow preferences, migratory strategy, listing status, and the ITIS TSN.
Frimpong EA, Angermeier PL (2009) FishTraits: a database of ecological and life-history traits of freshwater fishes of the United States. Fisheries 34:487-495.
## Not run: # Downloads the enrichment on first use. taxify("Micropterus salmoides", backbone = "gbif") |> add_fishtraits() ## End(Not run)## Not run: # Downloads the enrichment on first use. taxify("Micropterus salmoides", backbone = "gbif") |> add_fishtraits() ## End(Not run)
Joins traits from FloraWeb (Bundesamt fuer Naturschutz) to a taxify()
result by looking up accepted_name. FloraWeb is the live national portal
carrying the BiolFlor trait data (Klotz, Kuehn & Durka 2002) together with
Rothmaler morphology and Ellenberg indicator values. This enrichment covers
the full per-species trait profile scraped from the four FloraWeb trait
pages: morphology, reproductive biology, the nine Ellenberg indicator
values, ploidy and chromosome number, and chorological distribution. Every
column carries a _de suffix to mark the German-flora calibration and to
avoid collisions when chained with other plant-trait enrichments
(e.g. add_ecoflora() for Britain, add_baseflor() for France).
add_floraweb(x, cols = NULL, verbose = TRUE)add_floraweb(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which FloraWeb columns to attach. |
verbose |
Logical. Default |
Source: FloraWeb (https://www.floraweb.de/), Bundesamt fuer Naturschutz,
Bonn. FloraWeb has no bulk export or API; the bundled dataset was scraped
per species (accessed 2026-06-24) and that access date is the dataset
version. The trait data largely derive from BiolFlor, which per the BioFresh
metadata statement is publicly available and may be used without
restrictions provided it is acknowledged and cited correctly. The .vtr is
downloaded from the taxify release on first use and cached.
For British-flora traits see add_ecoflora(); for French-flora traits see
add_baseflor(); for European-calibration indicator values see add_eive().
The same data.frame with German trait columns (all suffixed _de),
grouped as:
height_de, life_form_de, leaf_shape_de,
leaf_anatomy_de, leaf_persistence_de, storage_organs_de,
flowering_months_de, flowering_months_biolflor_de,
flowering_phase_de, phenological_season_de, description_de.
pollination_vector_de, pollinator_de,
pollinator_reward_de, flower_type_de, flower_class_de,
dispersal_type_de, diaspore_type_de, germinule_type_de,
reproduction_type_de, vegetative_spread_de, fertilization_type_de,
apomixis_de, dicliny_de, dichogamy_de, self_incompatibility_de,
si_mechanism_de, ploidy_de, chromosome_number_de,
chromosome_freq_de, chromosomes_de.
the nine Ellenberg indicator values ell_light_de,
ell_temperature_de, ell_continentality_de, ell_moisture_de,
ell_moisture_variability_de, ell_reaction_de, ell_nitrogen_de,
ell_salt_de, heavy_metal_resistance_de, plus strategy_type_de
(Grime CSR), habitat_site_de, formation_de, plant_community_de,
biotope_type_de, forest_binding_de, hemeroby_de, urbanity_de.
floristic_zones_de, areal_formula_de,
areal_type_de, oceanity_de, range_centre_de, world_range_size_de,
world_range_frequency_de, world_range_position_de,
world_range_hazard_de, germany_range_share_de,
germany_responsibility_de.
Categorical traits with several applicable values are joined with "; ". Trait values are German (as published by FloraWeb / BiolFlor).
Klotz S, Kuehn I, Durka W (2002) BIOLFLOR - Eine Datenbank zu biologisch-oekologischen Merkmalen der Gefaesspflanzen in Deutschland. Schriftenreihe fuer Vegetationskunde 38. Bundesamt fuer Naturschutz, Bonn.
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Bellis perennis") |> add_floraweb() options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Bellis perennis") |> add_floraweb() options(old)
Joins genus-level ecological and life-history trait modalities of North
American freshwater insects to a taxify() result by looking up genus, so
any species in a covered genus is annotated. The modalities are the source's
own abbreviation codes, kept verbatim.
add_freshwater_insects_conus(x, cols = NULL, verbose = TRUE)add_freshwater_insects_conus(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Twardochleb et al. (2021, Environmental Data Initiative, CC BY 4.0), the Freshwater Insects CONUS genus trait table. Traits are genus-level categorical modalities.
The same data.frame with additional columns. The curated set:
Thermal preference class.
Primary functional feeding group code.
Primary habit (swimmer, clinger, burrower, ...).
Rheophily (current preference) code.
Voltinism (generations per year) code.
Maximum body size class.
With cols = "all" the remaining trait groups (emergence, dispersal,
respiration, ...) are attached under their source names.
Twardochleb LA et al. (2021) Freshwater insect occurrences and traits for the contiguous United States, 2001-2018. Environmental Data Initiative. doi:10.6073/pasta/8238ea9bc15840844b3a023b6b6ed158
## Not run: taxify("Baetis", backbone = "gbif") |> add_freshwater_insects_conus() ## End(Not run)## Not run: taxify("Baetis", backbone = "gbif") |> add_freshwater_insects_conus() ## End(Not run)
Joins shared bird/mammal frugivore traits to a taxify() result by
accepted_name.
add_frugivoria(x, cols = NULL, verbose = TRUE)add_frugivoria(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Gerstner et al. (2023) Frugivoria (EDI, CC-BY 4.0).
The same data.frame with frugivoria_ columns: categorical
taxon_group, diet_category; numeric diet_breadth, body_mass_g,
body_size_mm, longevity, generation_time.
Gerstner BE et al. (2023) Frugivoria: a trait database for birds and mammals exhibiting frugivory across contiguous Neotropical moist forests. EDI (edi.1220.5).
## Not run: taxify("Ramphastos toco", backbone = "gbif") |> add_frugivoria() ## End(Not run)## Not run: taxify("Ramphastos toco", backbone = "gbif") |> add_frugivoria() ## End(Not run)
Joins FungalTraits (Polme et al. 2020) genus-level trait data to a
taxify() result by looking up genus. Unlike other enrichments that
join on species-level accepted_name, FungalTraits is a genus-level
database and joins on the genus column already present in taxify output.
add_fungal_traits(x, cols = NULL, verbose = TRUE)add_fungal_traits(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: FungalTraits (Polme et al. 2020, Fungal Diversity, CC BY 4.0). Coverage: ~10k fungal genera. Genus-level only (not species-level).
The same data.frame with additional columns:
Primary ecological role (e.g., saprotroph, mycorrhizal, pathogen, endophyte, lichenized, parasite).
Secondary ecological role, if any.
Morphological growth form (e.g., agaricoid, corticioid, polyporoid, yeast).
Fruiting body morphology (e.g., gasteroid, pileate, resupinate).
Substrate type for saprotrophic genera (e.g., wood, litter, dung, soil).
Capacity to cause plant disease (e.g., high, medium, low, none).
Capacity for animal biotrophy.
Capacity for endophytic interactions with plants.
Exploration type for ectomycorrhizal genera (e.g., contact, short, medium, long).
Polme S et al. (2020) FungalTraits: a user-friendly traits database of fungi and fungus-like stramenopiles. Fungal Diversity 105:1-16. doi:10.1007/s13225-020-00466-2
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Amanita muscaria", backbone = "gbif") |> add_fungal_traits() options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Amanita muscaria", backbone = "gbif") |> add_fungal_traits() options(old)
Joins genus-level mycorrhizal type from the FungalRoot database
(Soudzilovskaia et al. 2020) to a taxify() result by looking up genus.
Mycorrhizal type is phylogenetically conserved at the genus level, which is
the resolution FungalRoot recommends for inference, so this enrichment joins
on genus rather than accepted_name.
add_fungalroot(x, verbose = TRUE)add_fungalroot(x, verbose = TRUE)
x |
A data.frame returned by |
verbose |
Logical. Default |
Source: FungalRoot, published on GBIF as a Darwin Core Archive
(doi:10.15468/a7ujmj), CC BY-NC 4.0. The per-genus value is a majority
consensus computed from the per-observation mycorrhiza type labels, not
FungalRoot's own published per-genus assignment. Plant genera only. The
.vtr is downloaded from the taxify release on first use and cached.
The same data.frame with three additional columns:
Genus-level majority-consensus type, one of AM
(arbuscular), EcM (ecto), ErM (ericoid), OM (orchid), NM
(non-mycorrhizal), the dual types EcM-AM / ErM-EcM / ErM-AM,
Other, or uncertain. NA if the genus is not in FungalRoot.
Coarse status derived from the type:
"mycorrhizal", "non-mycorrhizal", or "uncertain".
Number of FungalRoot observations supporting the genus-level consensus.
Soudzilovskaia NA et al. (2020) FungalRoot: global online database of plant mycorrhizal associations. New Phytologist 227:955-966.
## Not run: # Joins on genus, so any species in a covered genus is annotated. taxify(c("Quercus robur", "Trifolium pratense")) |> add_fungalroot() ## End(Not run)## Not run: # Joins on genus, so any species in a covered genus is annotated. taxify(c("Quercus robur", "Trifolium pratense")) |> add_fungalroot() ## End(Not run)
Joins FUNGuild trophic mode, guild, growth morphology, and confidence
data to a taxify() result by looking up accepted_name. Species-level
matches take priority; genus-level guild assignments are used as fallback
for unmatched species.
add_funguild(x, cols = NULL, verbose = TRUE)add_funguild(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: FUNGuild (Nguyen et al. 2016, CC BY 4.0). Coverage: ~13k taxa. Fungi only.
The enrichment first attempts species-level matching. For species without a direct match, it falls back to genus-level guild assignments from FUNGuild's genus-rank entries.
The same data.frame with additional columns:
Trophic mode (e.g., Pathotroph, Saprotroph, Symbiotroph, or hyphenated combinations).
Functional guild (e.g., "Ectomycorrhizal", "Plant Pathogen", "Wood Saprotroph").
Growth morphology (e.g., "Agaricoid", "Microfungus"). Prefixed to avoid collision with FungalTraits.
Confidence of the guild assignment (Possible, Probable, Highly Probable).
Nguyen NH et al. (2016) FUNGuild: An open annotation tool for parsing fungal community datasets by ecological guild. Fungal Ecology 20:241-248.
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Amanita muscaria", backbone = "gbif") |> add_funguild() options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Amanita muscaria", backbone = "gbif") |> add_funguild() options(old)
Joins extra GBIF backbone columns to a taxify() result by
looking up taxon_id in the GBIF backbone. Only enriches rows where
backbone == "gbif".
add_gbif_info(x)add_gbif_info(x)
x |
A data.frame returned by |
The same data.frame with additional columns:
Hybrid type: "GENERIC", "SPECIFIC", or
"INFRASPECIFIC".
Nomenclatural status (may contain multiple values).
Basionym author in parentheses.
Basionym author year.
Combining author year.
Publication citation.
How the name entered the backbone.
Infraspecific epithet.
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Quercus robur", backbone = "gbif") |> add_gbif_info() options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Quercus robur", backbone = "gbif") |> add_gbif_info() options(old)
Joins per-species environmental- and socio-economic-impact aggregates from
GIDIAS (Bacher et al. 2025), the IPBES invasive-species assessment's global
impact compilation, to a taxify() result by looking up accepted_name.
GIDIAS's individual impact records are reduced to per-species indicators; the
raw impact records are not distributed.
add_gidias(x, group = "Any", cols = NULL, verbose = TRUE)add_gidias(x, group = "Any", cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
group |
Character. Which affected native taxon the impact is measured against:
List them with |
cols |
Which columns to attach: |
verbose |
Logical. Default |
A species' EICAT category is the most severe magnitude among its negative
(harmful) environmental-impact records, on the IUCN scale "MC" (Minimal
Concern), "MN" (Minor), "MO" (Moderate), "MR" (Major, local
extinction), "MV" (Massive, global extinction), or "DD" (Data Deficient);
gidias_seicat_category applies the same rule to socio-economic impact
(SEICAT, "MC" to "MR"). For impact reconciled across sources, use
add_trait() with "environmental_impact" or "socioeconomic_impact".
Source: GIDIAS (Bacher et al. 2025, Scientific Data; CC BY 4.0), compiled for the IPBES thematic assessment report on invasive alien species. Only the derived per-species aggregates are distributed here, not the raw impact records.
The same data.frame with additional columns. The default set:
EICAT environmental-impact category
(MC/MN/MO/MR/MV/DD, or NA when no negative impact is
recorded).
IUCN EICAT impact mechanism(s) behind the species' negative environmental impacts.
SEICAT socio-economic-impact category
(MC/MN/MO/MR/DD, or NA).
Direction of the species' impact on nature's
contributions to people: "Negative", "Positive", "Neutral", or a
combination ("Negative; Positive") where the records disagree. GIDIAS
scores no magnitude for this block, so there is no category to report.
Functional group: Plant, Invertebrate,
Vertebrate, or Microbe.
Realm(s) the impacts span: terrestrial, freshwater, and/or marine.
Number of impact records for the species.
Number of distinct sources documenting the impacts.
cols = "all" additionally attaches the numeric EICAT/SEICAT magnitudes
(0-3), the affected well-being constituents and contributions to people
(gidias_ncp_affected), kingdom, the negative-record count, and a
global-extinction flag.
GIDIAS records the affected native taxon per impact record, so group
asks the question at that grain: add_gidias(group = "Invertebrate") scores
Felis catus "MO" (reduced populations) where the default "Any" scores
it "MV", the global extinctions it drove among vertebrates. 28% of species
with a recorded affected taxon impact two or more of the five groups, so for
those the species-level category is the most severe impact on anything, not
the impact on each thing.
The vocabulary is the coarse one GIDIAS controls: "Vertebrate", not
"Aves". "Any" is the only group carrying the impact records with no
affected taxon recorded (12% of the negative ones) and the two people-facing
blocks, so gidias_seicat_category and gidias_ncp_direction are NA on
every other group: impact on people is not a question the
affected-native-taxon axis can answer.
Bacher S et al. (2025) Global Impacts Dataset of Invasive Alien Species (GIDIAS). Scientific Data 12:832. doi:10.1038/s41597-025-05184-5
## Not run: # Downloads the GIDIAS enrichment on first use. taxify("Felis catus", backbone = "gbif") |> add_gidias() # What the cat does to invertebrates, rather than to anything at all. taxify("Felis catus", backbone = "gbif") |> add_gidias(group = "Invertebrate") taxify("Felis catus", backbone = "gbif") |> add_gidias(group = c("Invertebrate", "Vertebrate")) ## End(Not run)## Not run: # Downloads the GIDIAS enrichment on first use. taxify("Felis catus", backbone = "gbif") |> add_gidias() # What the cat does to invertebrates, rather than to anything at all. taxify("Felis catus", backbone = "gbif") |> add_gidias(group = "Invertebrate") taxify("Felis catus", backbone = "gbif") |> add_gidias(group = c("Invertebrate", "Vertebrate")) ## End(Not run)
Joins species-level plant traits from GIFT, the Global Inventory of Floras
and Traits (Weigelt et al. 2020), to a taxify() result by accepted_name.
GIFT aggregates published trait records to one value per species (mean for
numeric traits, most frequent entry for categorical ones). cols chooses which
traits to attach; browse the available columns with
gift_traits().
add_gift(x, cols = NULL, verbose = TRUE)add_gift(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which GIFT trait columns to attach. One of: |
verbose |
Logical. Default |
The GIFT trait table is bundled as a pre-built .vtr and joined offline, so
no internet access is needed once it is present (the first use downloads it,
or builds it from source if taxifydb is installed). GIFT's API exposes only
the redistributable subset of its data (CC BY 4.0; references whose
underlying source is restricted are excluded), and that subset is what is
bundled here. Cite GIFT and, where applicable, the underlying references
(GIFT::GIFT_references()) for the values used.
The same data.frame with one added column per requested trait, named
gift_<trait>. Numeric traits (heights, masses, areas) are doubles, the
rest character. Rows with no value in GIFT get NA. With the default
cols, the added columns are gift_woodiness_1, gift_growth_form_1,
gift_lifecycle_1, gift_life_form_1, gift_climber_1, gift_epiphyte_1,
gift_parasite_1, gift_aquatic_1, gift_plant_height_max,
gift_photosynthetic_pathway, gift_seed_mass_mean,
gift_dispersal_syndrome_1, gift_flowering_start, gift_flowering_end,
gift_deciduousness_1, and gift_sla_mean.
Weigelt P, Konig C, Kreft H (2020) GIFT - A Global Inventory of Floras and Traits for macroecology and biogeography. Journal of Biogeography 47:16-43. doi:10.1111/jbi.13623 Denelle P, Weigelt P, Kreft H (2023) GIFT: an R package to access the Global Inventory of Floras and Traits. Methods in Ecology and Evolution 14:2738-2748. doi:10.1111/2041-210X.14213
gift_traits() to browse the available columns.
old <- options(taxify.data_dir = taxify_example_data()) taxify("Abies alba") |> add_gift() options(old)old <- options(taxify.data_dir = taxify_example_data()) taxify("Abies alba") |> add_gift() options(old)
Joins per-species biotic interaction breadth from GloBI (Global Biotic
Interactions) to a taxify() result by looking up accepted_name. GloBI's
aggregated interaction records are reduced to per-species counts: how many
distinct partner taxa a species interacts with (undirected), across how many
distinct interaction types, over how many interaction records.
add_globi(x, cols = NULL, verbose = TRUE)add_globi(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: GloBI (Poelen et al. 2014), an open index of biotic interactions aggregated from many contributed datasets. Only derived per-species counts are distributed here; the underlying interaction records carry the licenses of their original data contributors, who should be cited in derivative work. Partner counts are resolved to accepted names before counting, so synonymous partners are not double-counted.
The same data.frame with additional columns:
Number of distinct partner taxa recorded interacting with the species (both directions).
Number of distinct interaction types (eats, pollinates, parasitises, ...).
Total number of interaction records touching the species.
Poelen JH, Simons JD, Mungall CJ (2014) Global Biotic Interactions: An open infrastructure to share and analyze species-interaction datasets. Ecological Informatics 24:148-159. doi:10.1016/j.ecoinf.2014.08.005
## Not run: taxify("Apis mellifera", backbone = "gbif") |> add_globi() ## End(Not run)## Not run: taxify("Apis mellifera", backbone = "gbif") |> add_globi() ## End(Not run)
Joins GlobTherm upper and lower thermal tolerance limits to a taxify()
result by looking up accepted_name.
add_globtherm(x, cols = NULL, verbose = TRUE)add_globtherm(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: GlobTherm (Bennett et al. 2018, Scientific Data, CC0). Coverage: ~2.1k species across aquatic and terrestrial groups.
The same data.frame with additional columns:
Upper thermal limit (degrees Celsius).
Definition of the upper limit (e.g. ctmax, LT50, UTNZ); the value is ambiguous without it.
Lower thermal limit (degrees Celsius).
Definition of the lower limit (e.g. ctmin, LT50, LTNZ).
Reported error on the upper limit.
Reported error on the lower limit.
Bennett JM et al. (2018) GlobTherm, a database on the thermal tolerance for aquatic and terrestrial organisms. Scientific Data 5:180022. doi:10.1038/sdata.2018.22
## Not run: taxify("Lepomis gibbosus", backbone = "gbif") |> add_globtherm() ## End(Not run)## Not run: taxify("Lepomis gibbosus", backbone = "gbif") |> add_globtherm() ## End(Not run)
Joins GloNAF (Global Naturalized Alien Flora) data to a taxify()
result, filtered by region.
add_glonaf(x, region, verbose = TRUE)add_glonaf(x, region, verbose = TRUE)
x |
A data.frame returned by |
region |
Character. GloNAF region identifier(s), or
|
verbose |
Logical. Default |
Source: GloNAF v2.0 (van Kleunen et al. 2019, Davis et al. 2025, CC BY 4.0). Coverage: ~16k alien plant taxa across ~1,300 regions. Plants only.
The same data.frame with additional column(s):
1 if the species is recorded as
naturalized in that region, NA otherwise.
van Kleunen M et al. (2019) The Global Naturalized Alien Flora (GloNAF) database. Ecology 100:e02542. doi:10.1002/ecy.2542
Davis AJS et al. (2025) The updated Global Naturalized Alien Flora (GloNAF 2.0) database. Ecology 106:e70245. doi:10.1002/ecy.70245
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Robinia pseudoacacia") |> add_glonaf(region = "DEU") taxify("Robinia pseudoacacia") |> add_glonaf(region = c("DEU", "AUT")) options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Robinia pseudoacacia") |> add_glonaf(region = "DEU") taxify("Robinia pseudoacacia") |> add_glonaf(region = c("DEU", "AUT")) options(old)
Joins host-level parasite summaries from the Global Mammal Parasite Database
(Stephens et al. 2017) to a taxify() result by looking up accepted_name.
The database's host-parasite association records are aggregated to one row per
host species.
add_gmpd(x, cols = NULL, verbose = TRUE)add_gmpd(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Covers wild carnivores, ungulates and primates (462 host species).
Parasite richness is a sampling-sensitive count: a well-studied host accumulates more recorded parasites than a rarely sampled one, so the values reflect research effort as well as biology.
This source states no licence. It is distributed under the journal's
version-of-record terms with a citation request, and taxify ships no
pre-built copy of it. The first call builds it from the original source on
the user's machine, which requires the taxifydb package
(remotes::install_github("gcol33/taxifydb")). taxify redistributes none of
the data. Cite Stephens et al. (2017) for the data.
The same data.frame with additional columns. The default set:
Distinct parasite species recorded for the host.
Distinct parasite species by parasite type.
Mean reported prevalence across the host's records.
Host group (carnivores, ungulates, primates).
Stephens PR, Pappalardo P, Huang S, et al. (2017) Global Mammal Parasite Database version 2.0. Ecology 98:1476. doi:10.1002/ecy.1799
## Not run: # Builds the enrichment on first use (needs taxifydb). taxify("Panthera leo", backbone = "gbif") |> add_gmpd() ## End(Not run)## Not run: # Builds the enrichment on first use (needs taxifydb). taxify("Panthera leo", backbone = "gbif") |> add_gmpd() ## End(Not run)
Joins GRIIS (Global Register of Introduced and Invasive Species) status to a
taxify() result, filtered by country. This function is named after
its source, GRIIS; GloNAF (add_glonaf()) carries related naturalized-alien status.
add_griis(x, country, cols = NULL, verbose = TRUE)add_griis(x, country, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
country |
Character. ISO 3166-1 alpha-2 country code(s), or
List the codes GRIIS covers with |
cols |
Which columns to attach. |
verbose |
Logical. Default |
Source: GRIIS (Zenodo combined CSV, CC BY 4.0, 196 countries). Coverage: ~23k name x country combinations.
The same data.frame with additional column(s):
One of "native", "introduced", "invasive",
or NA if not recorded for that country.
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Robinia pseudoacacia") |> add_griis(country = "AT") taxify("Robinia pseudoacacia") |> add_griis(country = c("AT", "DE")) options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Robinia pseudoacacia") |> add_griis(country = "AT") taxify("Robinia pseudoacacia") |> add_griis(country = c("AT", "DE")) options(old)
Joins species-level root traits from the Global Root Traits (GRooT) database
to a taxify() result by looking up accepted_name. GRooT aggregates root
trait records to per-species means. The .vtr carries the full GRooT trait
set (38 root traits); the default attaches the nine best-populated key traits,
and cols = "all" attaches every one. Run enrichment_cols("groot") to list
them.
add_groot(x, cols = NULL, verbose = TRUE)add_groot(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: GRooT database (Guerrero-Ramirez et al. 2021). Vascular plants. GRooT data are publicly available and used here with the data-paper citation requested by the authors.
The same data.frame with additional columns (per-species means). The default set:
Mean root diameter.
Specific root length.
Root tissue density.
Root nitrogen concentration.
Root carbon concentration.
Root mass fraction.
Lateral spread.
Root mycorrhizal colonization intensity.
Maximum rooting depth.
cols = "all" additionally attaches root chemistry (P/K/Ca/Mg/Mn
concentrations, C:N and N:P ratios), architecture (branching density and
ratio, stele diameter and fraction, cortex thickness, vessel diameter and
number), turnover (root lifespan, production, turnover rate, litter mass-loss
rate), and specific root area, respiration, and dry-matter content, among
others. Units follow the GRooT data paper; see the reference below.
Guerrero-Ramirez NR et al. (2021) Global root traits (GRooT) database. Global Ecology and Biogeography 30:25-37. doi:10.1111/geb.13179
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Abies alba") |> add_groot() options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Abies alba") |> add_groot() options(old)
Joins species-level wood density to a taxify() result by looking up
accepted_name. Wood density is reported as wood specific gravity (oven-dry
mass / green volume), dimensionless and numerically equal to g/cm3.
add_gwdd(x, cols = NULL, verbose = TRUE)add_gwdd(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Global Wood Density Database v2 (Fischer et al. 2026, New Phytologist, CC BY 4.0). Coverage: ~17.3k species. Bark density is not part of the aggregated source and is not included.
The same data.frame with additional columns:
Species-mean wood density (g/cm3).
Trunk wood density (g/cm3).
Branch wood density (g/cm3).
Number of underlying measurements.
Fischer FJ et al. (2026) The Global Wood Density Database version 2. New Phytologist. doi:10.1111/nph.70860
## Not run: taxify("Quercus robur", backbone = "gbif") |> add_gwdd() ## End(Not run)## Not run: taxify("Quercus robur", backbone = "gbif") |> add_gwdd() ## End(Not run)
Joins species-median home-range size and body mass to a taxify() result by
accepted_name.
add_homerange(x, cols = NULL, verbose = TRUE)add_homerange(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Broekman et al. (2023) HomeRange database (Dryad, CC0). Per-individual records are reduced to species medians.
The same data.frame with numeric homerange_home_range_km2 and
homerange_body_mass_kg.
Broekman MJE et al. (2023) HomeRange: a global database of mammalian home ranges. Dryad. doi:10.5061/dryad.d2547d85x
## Not run: taxify("Panthera leo", backbone = "gbif") |> add_homerange() ## End(Not run)## Not run: taxify("Panthera leo", backbone = "gbif") |> add_homerange() ## End(Not run)
Joins per-insect hostplant breadth from the Natural History Museum HOSTS
database to a taxify() result by looking up accepted_name. Each moth or
butterfly species is summarised by how many distinct hostplants and
hostplant families it has been recorded feeding on.
add_hosts(x, cols = NULL, verbose = TRUE)add_hosts(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Robinson et al. (2010) HOSTS, Natural History Museum, London (CC0). Lepidoptera only; ~24k species with at least one recorded hostplant.
The same data.frame with additional columns:
Number of distinct hostplant species recorded.
Number of distinct hostplant families recorded.
Robinson GS, Ackery PR, Kitching IJ, Beccaloni GW, Hernandez LM (2010) HOSTS - a Database of the World's Lepidopteran Hostplants. Natural History Museum, London. doi:10.5519/havt50xw
## Not run: taxify("Papilio machaon", backbone = "gbif") |> add_hosts() ## End(Not run)## Not run: taxify("Papilio machaon", backbone = "gbif") |> add_hosts() ## End(Not run)
Joins species-level amphibian body measurements to a taxify() result by
accepted_name. Only measurements comparable across Anura, Caudata and
Gymnophiona are carried; per-specimen values are reduced to species medians.
add_huang_amph(x, cols = NULL, verbose = TRUE)add_huang_amph(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Huang amphibian morphological dataset (figshare, CC-BY 4.0).
The same data.frame with numeric huang_amph_svl_mm,
huang_amph_head_length_mm, huang_amph_head_width_mm,
huang_amph_eye_diameter_mm, huang_amph_forelimb_length_mm,
huang_amph_hindlimb_length_mm and categorical huang_amph_taxon_order.
Huang et al. A global amphibian morphological trait dataset. figshare. doi:10.6084/m9.figshare.21159229
## Not run: taxify("Bufo bufo", backbone = "gbif") |> add_huang_amph() ## End(Not run)## Not run: taxify("Bufo bufo", backbone = "gbif") |> add_huang_amph() ## End(Not run)
Parses the input_name column from a taxify() result to extract
hybrid parent names and classify the hybrid type.
add_hybrid_info(x)add_hybrid_info(x)
x |
A data.frame returned by |
The same data.frame with additional columns:
First parent (full binomial), NA if not a
hybrid formula.
Second parent (full binomial, abbreviated or omitted
genus expanded), NA if not a hybrid formula.
The accepted
name each parent resolves to against the backbone(s) used for x (from
the result's metadata), or NA if the parent did not match.
The backbone taxon_id of
the accepted taxon each parent resolves to, usable directly with
id2name(), or NA if the parent did not match. An unresolved hybrid
formula carries NA in the result's own taxon_id (it has no single
backbone record); these two columns are where the component IDs live.
One of "nothogenus", "nothospecies",
"formula", or NA if not a hybrid (same value as the hybrid_type
column already on a taxify() result).
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Quercus pyrenaica x Q. petraea") |> add_hybrid_info() options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Quercus pyrenaica x Q. petraea") |> add_hybrid_info() options(old)
Joins the drought-mortality trait block (xylem embolism resistance, xylem
and leaf conductivity, sapwood-to-leaf allocation and drought exposure) to
a taxify() result by accepted name.
add_hydraulics(x, cols = NULL, verbose = TRUE)add_hydraulics(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Sanchez-Martinez et al. (2020), 2024 seed-plant species. CC BY 4.0. The widest P50 coverage in the bundled sources by an order of magnitude: 894 species against the 123 AusTraits and BROT carry between them.
This is a literature compilation and so are AusTraits and BROT, so where they overlap they often carry the same primary record: 63% of the P50 values shared with AusTraits and 65% of the Ks values are equal to the last digit. Agreement between them is not independent corroboration. The overlap is small against what this adds: 74 of its 894 P50 species appear in either incumbent.
huber_value_cm2_m2 is square centimetres of sapwood per square metre of
leaf, so it runs 1e4 above the dimensionless AusTraits column. The factor
is measured rather than assumed: 79 of the 208 species the two share are
equal to the last digit once converted. add_trait() applies it.
mean_annual_temp_c describes where the species grows, not what it
tolerates; it feeds climatic_temp_mean, never thermal_max.
The same data.frame with hyd_ columns: p50_mpa,
sapwood_conductivity, leaf_conductivity, huber_value_cm2_m2,
min_water_potential_mpa, hydraulic_safety_margin_mpa,
mean_annual_temp_c.
Sanchez-Martinez P, Martinez-Vilalta J, Dexter KG, Segovia RA, Mencuccini M (2020) Adaptation and coordinated evolution of plant hydraulic traits. Ecology Letters 23:1599-1610. doi:10.1111/ele.13584
Data: doi:10.6084/m9.figshare.12625418.v1
## Not run: taxify(c("Quercus ilex", "Abies alba")) |> add_hydraulics() ## End(Not run)## Not run: taxify(c("Quercus ilex", "Abies alba")) |> add_hydraulics() ## End(Not run)
Joins per-species elytra measurements, taken from images of pinned NEON
specimens, to a taxify() result by accepted name.
add_imageomics_neon(x, cols = NULL, verbose = TRUE)add_imageomics_neon(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: the Imageomics 2018-NEON-beetles dataset, 39,064
measurements of pinned individuals across 30 NEON sites, reduced to a
per-species median over 75 named species.
This is the only North American ground-beetle morphometry taxify carries, and the only carabid measurement source independent of carabids.org, whose values every European carabid table inherits.
The source measures the elytron rather than the whole animal, in
centimetres; values here are millimetres. Measurements of specimens
photographed at an angle (lying_flat = "No") are excluded, since a
projected length is foreshortened. The length-to-width ratio has a median
of 1.79 across species, the shape of a carabid elytron, and Carabus
nemoralis reads 14.87 mm against the 23.4 mm body length that
add_finand() measured on European specimens.
The same data.frame with neon_ columns: numeric
elytra_length_mm, elytra_width_mm, and measurement_n (the number of
individual measurements behind the median).
Imageomics Institute. 2018-NEON-beetles. Hugging Face. https://huggingface.co/datasets/imageomics/2018-NEON-beetles
## Not run: taxify(c("Carabus nemoralis", "Pasimachus californicus")) |> add_imageomics_neon() ## End(Not run)## Not run: taxify(c("Carabus nemoralis", "Pasimachus californicus")) |> add_imageomics_neon() ## End(Not run)
Joins fuzzy-coded springtail functional traits to a taxify() result by
looking up accepted_name. Output columns are prefixed inrae_.
add_inrae_collembola_traits(x, cols = NULL, verbose = TRUE)add_inrae_collembola_traits(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: fuzzy-coded Collembola traits compiled from the BETSI database
(Pey et al. 2014) across two Data INRAE deposits, the datasets behind Joimel
et al. (2021). Coverage: 135 species. The deposits' species codes carry no
published legend and are decoded against a Collembola reference pool; codes
that cannot be resolved are dropped, never guessed. The fuzzy affinity vectors
are not passed to the scalar add_trait() verb.
The same data.frame with additional columns, one per modality bin of
seven fuzzy-coded traits: number of ocelli, furca, post-antennal organ,
pigmentation, body shape, scales and reproduction. Each trait is fuzzy
coded, so a species' affinities across the bins of one trait (columns
sharing an inrae_<trait>__ stem) sum to 100. The source is sparse, so a
trait a species was not scored for is NA across its bins. See
enrichment_cols for the full column list.
Joimel S et al. (2021) Collembola are among the most flexible soil fauna: a comparison across land uses. Frontiers in Ecology and Evolution 9:630919. doi:10.3389/fevo.2021.630919
## Not run: taxify("Isotoma viridis", backbone = "gbif") |> add_inrae_collembola_traits() ## End(Not run)## Not run: taxify("Isotoma viridis", backbone = "gbif") |> add_inrae_collembola_traits() ## End(Not run)
Joins per-species economic-cost aggregates from InvaCost (Diagne et al. 2020)
to a taxify() result by looking up accepted_name. InvaCost's individual
cost estimates are reduced to three per-species indicators; the raw estimate
rows are not distributed.
add_invacost(x, cols = NULL, verbose = TRUE)add_invacost(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: InvaCost (Diagne et al. 2020, Scientific Data; database version 4.1,
CC BY 4.0). Only the derived per-species aggregates are distributed here. For
a rigorous cost analysis (temporal expansion, overlap handling, reliability
filtering) use the invacost R package on the full database.
The same data.frame with additional columns:
Cumulative documented cost in 2017 USD: each estimate's standardised annual cost expanded across its documented impact period and summed over all of the species' estimates. Overlapping estimates are not de-duplicated, so this is a coarse economic-impact indicator, not an audited figure.
Number of cost estimates recorded for the species.
Cost type carrying the largest share of the
species' cumulative cost: damage, management, mixed, or
unspecified.
Diagne C et al. (2020) InvaCost, a public database of the economic costs of biological invasions worldwide. Scientific Data 7:277. doi:10.1038/s41597-020-00586-z
## Not run: taxify("Solenopsis invicta", backbone = "gbif") |> add_invacost() ## End(Not run)## Not run: taxify("Solenopsis invicta", backbone = "gbif") |> add_invacost() ## End(Not run)
Joins per-species morphological and ecological descriptors from ITALIC, the
Information System on Italian Lichens, to a taxify() result by looking up
accepted_name. One row per species, scraped from the ITALIC 8.0 taxon
pages.
add_italic(x, cols = NULL, verbose = TRUE)add_italic(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: ITALIC 8.0 (Nimis; Univ. of Trieste), taxon-page descriptors, CC BY-SA 4.0. Lichens are otherwise almost absent from the bundled trait databases.
The same data.frame with additional columns:
Thallus growth form (crustose, foliose, fruticose, ...).
Substrata the species grows on.
Photosynthetic partner.
Reproductive strategy.
Nimis PL. ITALIC - The Information System on Italian Lichens, Version 8.0. University of Trieste, Dept. of Biology (https://italic.units.it), accessed 2026-07. System paper: Martellos S, Conti M, Nimis PL (2023) Aggregation of Italian Lichen Data in ITALIC 7.0. Journal of Fungi 9(5):556. doi:10.3390/jof9050556
## Not run: taxify("Xanthoria parietina", backbone = "gbif") |> add_italic() ## End(Not run)## Not run: taxify("Xanthoria parietina", backbone = "gbif") |> add_italic() ## End(Not run)
Joins IUCN Red List conservation status to a taxify() result by looking up
accepted_name. This function is named after its source, the IUCN Red List; for
conservation status reconciled across sources, use add_trait() once more
than one source is registered for it.
add_iucn(x, cols = NULL, verbose = TRUE)add_iucn(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Show download progress if enrichment data needs
to be fetched. Default |
Conservation status values are compiled from publicly available sources including GBIF and the IUCN Red List API. Coverage is global across all taxonomic groups (~166k species).
The same data.frame with an additional column:
IUCN category: "LC" (Least Concern),
"NT" (Near Threatened), "VU" (Vulnerable), "EN" (Endangered),
"CR" (Critically Endangered), "EW" (Extinct in the Wild),
"EX" (Extinct), or NA if not assessed.
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Panthera tigris", backbone = "gbif") |> add_iucn() options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Panthera tigris", backbone = "gbif") |> add_iucn() options(old)
Joins plant genome-size data from the Kew Plant DNA C-values database
(Pellicer & Leitch 2020) to a taxify() result by looking up accepted_name.
The 1C DNA amount is a per-species median. The chromosome number and ploidy
level are the base cytotype, with the range across a species' cytotypes in the
_min / _max columns.
add_kew_cvalues(x, cols = NULL, verbose = TRUE)add_kew_cvalues(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Kew Plant DNA C-values database, release 7.1 (Royal Botanic Gardens Kew), CC BY. Vascular plants.
The same data.frame with additional columns. The default set:
Genome size (1C DNA amount, picograms).
Somatic chromosome number (2n), base cytotype.
Ploidy level, base cytotype.
cols = "all" also attaches the per-species min/max/n spread of each value,
plus per-species provenance:
The paper(s) the values were measured in,
joined by "; " where a species carries records from several.
The method(s) used, in the source's codes:
FC:PI and other FC: variants are flow cytometry with the named stain,
Fe is Feulgen densitometry. The two are not interchangeable, so a
species measured by both reports both.
Pellicer J, Leitch IJ (2020) The Plant DNA C-values database (release 7.1): an updated online repository of plant genome size data for comparative studies. New Phytologist 226:301-305.
## Not run: # Downloads the enrichment on first use. taxify("Zea mays", backbone = "gbif") |> add_kew_cvalues() ## End(Not run)## Not run: # Downloads the enrichment on first use. taxify("Zea mays", backbone = "gbif") |> add_kew_cvalues() ## End(Not run)
Joins species-level seed traits from the Kew Seed Information Database
(SER-SID) to a taxify() result by looking up accepted_name.
add_kew_sid(x, cols = NULL, verbose = TRUE)add_kew_sid(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Royal Botanic Gardens Kew, Seed Information Database, served as SER-SID (https://ser-sid.org/), CC BY 2.0. Per-record measurements are reduced to per-species medians (numeric) and modes (categorical); a thousand-seed weight in grams equals the per-seed mass in milligrams.
The same data.frame with additional columns. The curated set:
Thousand-seed weight (grams per 1000 seeds, median of all records).
Seed storage behaviour (Orthodox/Recalcitrant/Intermediate/Uncertain).
Seed oil content (percent, median).
Seed protein content (percent, median).
Raunkiaer life-form code as recorded by SID.
With cols = "all" the seed-weight record count (n_seed_weight_records)
and modal fruit_type are also attached under their source names. Joined on
accepted_name.
Royal Botanic Gardens Kew. Seed Information Database (SID). https://ser-sid.org/
old <- options(taxify.data_dir = taxify_example_data()) taxify("Quercus robur", backbone = "gbif") |> add_kew_sid() options(old)old <- options(taxify.data_dir = taxify_example_data()) taxify("Quercus robur", backbone = "gbif") |> add_kew_sid() options(old)
Joins LEDA Traitbase (Kleyer et al. 2008) plant functional traits to a
taxify() result by looking up accepted_name. LEDA provides species-level
trait data for NW European plant species, covering life form, dispersal,
seed, leaf, and clonality traits.
add_leda(x, cols = NULL, verbose = TRUE)add_leda(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: LEDA Traitbase (Kleyer et al. 2008).
Coverage: ~12,500 NW European plant taxa. cols = "all" adds the remaining
LEDA traits and, for each, a <col>_source column of the references behind
the value (resolve with cite() and source = "leda").
The Raunkiaer life form is a bud-position classification system: phanerophyte = buds >25 cm above soil, chamaephyte = buds near soil surface, hemicryptophyte = buds at soil surface, geophyte (cryptophyte) = buds below soil, therophyte = annual that survives as seed.
The same data.frame with additional columns:
Most frequent LEDA plant growth form: the Raunkiaer classes (Phanerophyte, Chamaephyte, Hemicryptophyte, Geophyte, Therophyte, Hydrophyte) plus Liana, Vascular semi-parasite and Vascular parasite.
1 if the species' records name more than one growth form, 0 otherwise.
Most frequent dispersal type, as LEDA's -chor term (meteorochor, epizoochor, nautochor, ...).
Diaspore terminal velocity in m/s (species median).
Seed mass in mg (species median). Prefixed with
leda_ in the .vtr to avoid collision with Diaz traits.
Canopy height in metres (species median): the height of the highest photosynthetic tissue, which LEDA distinguishes from plant height.
Leaf dry mass in mg (species median).
Specific leaf area in mm/mg (species median).
Most frequent primary clonal growth organ (epigeogeneous stems, root-splitters, bulbs, ...).
Percentage of diaspores still floating after one week (species median).
Kleyer M et al. (2008) The LEDA Traitbase: a database of life-history traits of the Northwest European flora. Journal of Ecology 96:1266-1274.
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Arrhenatherum elatius") |> add_leda() options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Arrhenatherum elatius") |> add_leda() options(old)
Joins LepTraits 1.0 butterfly life-history and ecological traits to a
taxify() result by looking up accepted_name.
add_leptraits(x, cols = NULL, verbose = TRUE)add_leptraits(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: LepTraits 1.0 (Shirey et al. 2022, CC0). Coverage: ~12.4k butterfly species globally (Papilionoidea).
The same data.frame with additional columns:
Wingspan in mm (midpoint of lower and upper bounds).
Number of generations per year.
Overwintering/diapause life stage.
Canopy association category.
Edge/gap affinity category.
Moisture affinity category.
Disturbance affinity category.
Number of host plant families used.
Number of months with adult flight activity.
Shirey V et al. (2022) LepTraits 1.0: A globally comprehensive dataset of butterfly traits. Scientific Data 9:398.
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Vanessa cardui", backbone = "gbif") |> add_leptraits() options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Vanessa cardui", backbone = "gbif") |> add_leptraits() options(old)
Joins species-level bacterial and archaeal phenotypic and genome traits to a
taxify() result by looking up accepted_name.
add_madin(x, cols = NULL, verbose = TRUE)add_madin(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Madin et al. (2020, Scientific Data, CC BY 4.0). Coverage: ~14.9k bacterial and archaeal species.
The same data.frame with additional columns:
Gram stain (positive/negative).
Metabolism (aerobic/anaerobic/facultative/...).
Cell shape (bacillus/coccus/spiral/...).
Motility (yes/no/flagella/gliding/...).
Sporulation (yes/no).
Isolation source category.
Recorded growth temperature (degrees Celsius).
Optimum growth temperature (degrees Celsius).
Optimum growth pH.
Genome size (base pairs).
Genomic G+C content (percent).
Madin JS et al. (2020) A synthesis of bacterial and archaeal phenotypic trait data. Scientific Data 7:170. doi:10.1038/s41597-020-0497-4
## Not run: taxify("Escherichia coli", backbone = "gbif") |> add_madin() ## End(Not run)## Not run: taxify("Escherichia coli", backbone = "gbif") |> add_madin() ## End(Not run)
Joins per-species springtail body length to a taxify() result by looking up
accepted_name. The value is mined from three primary Collembola monographs
and aggregated per species: the median of the per-monograph medians, with the
observed range and the measurement and monograph counts.
add_monograph_collembola_body_length(x, cols = NULL, verbose = TRUE)add_monograph_collembola_body_length(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: body length mined from three primary Collembola monographs, Stach
(1957, Neelidae and Dicyrtomidae), Hopkin (2007, Britain and Ireland) and
Bretfeld (1999, Symphypleona). The source monographs are copyright their
publishers; only the extracted measurements are redistributed, for
non-commercial scientific use. Coverage: 481 species from 679 measurements. A
re-extraction independent of BETSI, more complete than BETSI on the shared
books (210 vs 145 species from Bretfeld 1999) and reaching Stach's Neelidae
and Dicyrtomidae, which fall outside BETSI's Collembola coverage. Body length
is also available through add_trait()("body_length").
The same data.frame with additional columns:
Body length (mm), median of the per-monograph medians.
Smallest measurement (mm).
Largest measurement (mm).
Number of measurements aggregated.
Number of monographs contributing.
Hopkin SP (2007) A Key to the Collembola (Springtails) of Britain and Ireland. FSC Publications, Shrewsbury.
## Not run: taxify("Isotoma viridis", backbone = "gbif") |> add_monograph_collembola_body_length() ## End(Not run)## Not run: taxify("Isotoma viridis", backbone = "gbif") |> add_monograph_collembola_body_length() ## End(Not run)
Joins bird nest-site, nest-structure and nest-attachment indicators to a
taxify() result by accepted_name. Each trait is a 0/1 presence flag; a
species may carry several flags within a group.
add_nesttrait(x, cols = NULL, verbose = TRUE)add_nesttrait(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: NestTrait v2 (Chia et al. 2023, Scientific Data, CC-BY 4.0).
The same data.frame with three collapsed categorical columns
(nesttrait_structure, nesttrait_site, nesttrait_attachment, each a
pipe-delimited set of modalities for multi-modal species) plus 20 raw 0/1
indicator columns prefixed nesttrait_: brood_parasite, mound_builder,
seven nestsite_*, seven neststr_* and four nestatt_* flags.
Chia SY et al. (2023) A global database of bird nest traits. Scientific Data. doi:10.1038/s41597-023-02837-1
## Not run: taxify("Turdus merula", backbone = "gbif") |> add_nesttrait() ## End(Not run)## Not run: taxify("Turdus merula", backbone = "gbif") |> add_nesttrait() ## End(Not run)
Joins the nodulation status of a plant genus to a taxify() result. NodDB
records nodulation per genus, so the join is on genus, the same grain as
add_fungalroot().
add_noddb(x, cols = NULL, verbose = TRUE)add_noddb(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Tedersoo et al. (2018), 824 plant genera. CC BY-SA 4.0.
nodulation_consensus is the authors' verdict verbatim, which distinguishes
a confirmed record from a phylogenetic inference (Rhizobia against
likely_Rhizobia) and carries their negative calls as unlikely_Rhizobia
and unlikely_Frankia. nodulation_type collapses that to the symbiont
involved (rhizobia, frankia, nostocaceae, present, none)
reading both unlikely_ verdicts as none.
positive_reports and negative_reports are the counts of published
observations behind the verdict, so a thinly evidenced call is visible.
The same data.frame with noddb_ columns: nodulation_consensus,
nodulation_type, nodulation_clade, nodulation_family,
spp_recognized, spp_studied, positive_reports, negative_reports.
Tedersoo L, Laanisto L, Rahimlou S, Toussaint A, Hallikma T, Partel M (2018) Global database of plants with root-symbiotic nitrogen fixation: NodDB. Journal of Vegetation Science 29:560-568. doi:10.1111/jvs.12627
Data: doi:10.15156/BIO/587469
## Not run: taxify(c("Pisum sativum", "Alnus glutinosa", "Quercus robur")) |> add_noddb() ## End(Not run)## Not run: taxify(c("Pisum sativum", "Alnus glutinosa", "Quercus robur")) |> add_noddb() ## End(Not run)
Joins New Zealand marine benthic-invertebrate functional traits to a
taxify() result by accepted_name. Each fuzzy-coded trait is reduced to its
dominant modality.
add_nztd(x, cols = NULL, verbose = TRUE)add_nztd(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: NZTD (Lam-Gordillo et al. 2023, figshare, CC-BY 4.0).
The same data.frame with categorical nztd_ columns: bioturbation,
body_size, degree_of_attachment, feeding_mode, living_habit,
mobility, morphology, movement_method, rigidity.
Lam-Gordillo O et al. (2023) New Zealand Trait Database (NZTD) for marine benthic invertebrates. figshare. doi:10.6084/m9.figshare.21939647
## Not run: taxify("Macomona liliana", backbone = "gbif") |> add_nztd() ## End(Not run)## Not run: taxify("Macomona liliana", backbone = "gbif") |> add_nztd() ## End(Not run)
Joins soft-coral (octocoral) colony, polyp, skeleton, symbiosis and feeding
traits to a taxify() result by accepted_name. Built from long-format
records reduced to one value per species.
add_octocoral(x, cols = NULL, verbose = TRUE)add_octocoral(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Octocoral Trait Database v2.2 (Gomez-Gras et al., CC-BY 4.0).
The same data.frame with octocoral_ columns: numeric
colony_height, colony_width, tentacles_per_polyp; categorical
growth_form, type_of_growth, type_of_skeleton, polyp_retractability,
polyp_dimorphism, zooxanthellate, axis_presence, feeding_mechanism,
coloniality, skeletal_rigidity, calcareous_sclerites_presence.
Octocoral Trait Database v2.2. Zenodo. doi:10.5281/zenodo.14228404
## Not run: taxify("Gorgonia ventalina", backbone = "gbif") |> add_octocoral() ## End(Not run)## Not run: taxify("Gorgonia ventalina", backbone = "gbif") |> add_octocoral() ## End(Not run)
Joins Odonate Phenotypic Database categorical traits to a taxify() result by
accepted_name (modal value per species).
add_odonata(x, cols = NULL, verbose = TRUE)add_odonata(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Odonate Phenotypic Database (Waller et al., Dryad, CC-BY 4.0).
The same data.frame with categorical odonata_territoriality,
odonata_flight_mode, odonata_mate_guarding, odonata_habitat_openness,
odonata_has_wing_pigment.
Waller JT et al. The Odonate Phenotypic Database. Dryad. doi:10.5061/dryad.15pm5qc
## Not run: taxify("Calopteryx splendens", backbone = "gbif") |> add_odonata() ## End(Not run)## Not run: taxify("Calopteryx splendens", backbone = "gbif") |> add_odonata() ## End(Not run)
Joins PanTHERIA mammal life-history and ecological traits to a
taxify() result by looking up accepted_name.
add_pantheria(x, cols = NULL, verbose = TRUE)add_pantheria(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: PanTHERIA (Jones et al. 2009, Ecological Archives, CC0). Coverage: ~5.4k mammal species. Mammals only.
The same data.frame with additional columns:
Adult body mass in grams.
Maximum longevity in months.
Litter size (mean).
Gestation length in days.
Weaning age in days.
Home range size in km.
Diet breadth (number of diet categories).
Habitat breadth (number of habitat types).
Jones KE et al. (2009) PanTHERIA: a species-level database of life history, ecology, and geography of extant and recently extinct mammals. Ecology 90:2648.
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Vulpes vulpes", backbone = "gbif") |> add_pantheria() options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Vulpes vulpes", backbone = "gbif") |> add_pantheria() options(old)
Joins the consensus reef-fish trophic-guild assignment to a taxify() result
by accepted_name. The guild is the modal expert classification.
add_parravicini(x, cols = NULL, verbose = TRUE)add_parravicini(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Parravicini et al. (2020) reef-fish trophic guilds (PLoS Biology, CC-BY 4.0).
The same data.frame with categorical parravicini_trophic_guild.
Parravicini V et al. (2020) Delineating reef fish trophic guilds with global gut content data synthesis and phylogeny. PLoS Biology 18:e3000702. doi:10.1371/journal.pbio.3000702
## Not run: taxify("Zebrasoma scopas", backbone = "gbif") |> add_parravicini() ## End(Not run)## Not run: taxify("Zebrasoma scopas", backbone = "gbif") |> add_parravicini() ## End(Not run)
Joins pelagic fish/cephalopod/gelatinous traits to a taxify() result by
accepted_name.
add_pelagic(x, cols = NULL, verbose = TRUE)add_pelagic(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Gleiber et al. (2024) Pelagic Species Trait Database (Borealis, CC-BY 4.0).
The same data.frame with pelagic_ columns: numeric depth_min_m,
depth_max_m, temp_min_c, temp_max_c, temp_mean_c,
length_min_tl_cm, length_max_tl_cm, trophic_level; categorical
vert_habitat, horz_habitat, body_shape, phys_defense, gregarious.
Gleiber MR et al. (2024) A trait database for pelagic species. Scientific Data. doi:10.5683/SP3/0YFJED
## Not run: taxify("Thunnus albacares", backbone = "gbif") |> add_pelagic() ## End(Not run)## Not run: taxify("Thunnus albacares", backbone = "gbif") |> add_pelagic() ## End(Not run)
Joins PHYLACINE mammal traits to a taxify() result by looking up
accepted_name. PHYLACINE covers extant plus recently and prehistorically
extinct mammals; it is offered alongside add_pantheria() and
add_combine(), not as a replacement.
add_phylacine(x, cols = NULL, verbose = TRUE)add_phylacine(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: PHYLACINE v1.2 (Faurby et al. 2018, Ecology, CC0). Coverage: ~5.8k
mammal species including extinct taxa. Mass.g is partly modelled (PHYLACINE
gap-fills data-poor and extinct species); phylacine_mass_method /
phylacine_mass_method_class record how each mass was derived, so a modelled
mass is not mistaken for a measurement where PHYLACINE is the only source.
The same data.frame with additional columns:
Body mass (g).
Percent of diet that is plant.
Percent of diet that is vertebrate.
Percent of diet that is invertebrate.
Terrestrial habit (0/1).
Marine habit (0/1).
Freshwater habit (0/1).
Aerial habit (0/1).
Island endemicity class.
IUCN status (includes EP = extinct in prehistory, EX, EW).
How the body mass was obtained (the PHYLACINE
Mass.Method field, verbatim): Reported, Imputed, or an allometric
estimate (e.g. "Assumed isometric based on head-body length").
Coarse provenance of the body mass:
reported (measured/compiled), estimated (allometric or same-size
analogy), or imputed (phylogenetic gap-fill). Only reported is an
observation; the others are model estimates.
Faurby S et al. (2018) PHYLACINE 1.2: The Phylogenetic Atlas of Mammal Macroecology. Ecology 99:2626. doi:10.1002/ecy.2443
## Not run: taxify("Mammuthus primigenius", backbone = "gbif") |> add_phylacine() ## End(Not run)## Not run: taxify("Mammuthus primigenius", backbone = "gbif") |> add_phylacine() ## End(Not run)
Fetches Italian Ellenberg-type indicator values, life form, and chorotype
from Pignatti's Flora d'Italia (Pignatti, Menegoni & Pietrosanti 2005) for
the species in a taxify() result, using the TR8 package, and joins them by
accepted_name. TR8 ships these values bundled, so this works offline.
add_pignatti(x, verbose = TRUE)add_pignatti(x, verbose = TRUE)
x |
A data.frame returned by |
verbose |
Logical. Default |
These values originate in a copyrighted publication, so taxify does not
redistribute them. This function reads the copy bundled in the suggested
package TR8 (which redistributes it under TR8's GPL, with attribution);
taxify ships none of it and no internet access is required. For
European-calibration indicator values see add_eive().
The same data.frame with additional columns:
Ellenberg-type indicator values
calibrated for the Italian flora (codes; X = indifferent, 0 = not
applicable).
Life form for the Italian flora.
Chorological type (distribution).
Pignatti S, Menegoni P, Pietrosanti S (2005) Bioindicazione attraverso le piante vascolari. Braun-Blanquetia 39. Bocci G (2015) TR8: an R package for easily retrieving plant species traits. Methods in Ecology and Evolution 6:347-350.
old <- options(taxify.data_dir = taxify_example_data()) ## Not run: # add_pignatti() fetches Italian trait data on demand via the TR8 package. taxify("Abies alba") |> add_pignatti() ## End(Not run) options(old)old <- options(taxify.data_dir = taxify_example_data()) ## Not run: # add_pignatti() fetches Italian trait data on demand via the TR8 package. taxify("Abies alba") |> add_pignatti() ## End(Not run) options(old)
Joins attributes of British and Irish vascular plants (Hill et al. 2004) to a
taxify() result by looking up accepted_name.
add_plantatt(x, cols = NULL, verbose = TRUE)add_plantatt(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
1,887 taxa. For the German-flora equivalent see add_floraweb(), for the
British Ecoflora traits add_ecoflora(), and for European-calibration
indicator values add_eive().
This source states no licence (it is copyright the Biological Records
Centre), so taxify ships no pre-built copy of it. The first call builds it
from the original source on the user's machine, which requires the taxifydb
package (remotes::install_github("gcol33/taxifydb")). taxify redistributes
none of the data. Cite Hill et al. (2004) for the data.
The same data.frame with additional columns. The default set:
Ellenberg indicator values calibrated for the British flora.
Maximum height, cm.
Life-form code, kept verbatim (Ch, Ph,
Gn, ...).
Woodiness code, kept verbatim (w woody,
h herbaceous, sw semi-woody).
Native-status code, kept verbatim (N
native, AN alien naturalised, AR archaeophyte, ...).
Hill MO, Preston CD, Roy DB (2004) PLANTATT: Attributes of British and Irish Plants. Biological Records Centre, Centre for Ecology and Hydrology.
## Not run: # Builds the enrichment on first use (needs taxifydb). taxify("Bellis perennis", backbone = "gbif") |> add_plantatt() ## End(Not run)## Not run: # Builds the enrichment on first use (needs taxifydb). taxify("Bellis perennis", backbone = "gbif") |> add_plantatt() ## End(Not run)
Joins per-species springtail body length to a taxify() result by looking up
accepted_name. The value is mined from Plazi taxonomic treatments and
aggregated per species: the median, with the observed range and the
measurement and treatment-paper counts.
add_plazi_collembola_body_length(x, cols = NULL, verbose = TRUE)add_plazi_collembola_body_length(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Plazi TreatmentBank (plazi.org), taxonomic treatments republished as
Darwin Core Archives through GBIF, CC0 1.0. Coverage: 998 species from 1,117
measurements. On the 35 species it shares with the BETSI body-length floor the
mined values track BETSI at Pearson r = 0.906 (Spearman 0.955), and it adds
963 species BETSI does not cover. Cite the individual treatments for any
species-level use. Body length is also available through
add_trait()("body_length").
The same data.frame with additional columns:
Body length (mm), median of the mined measurements.
Smallest measurement (mm).
Largest measurement (mm).
Number of measurements aggregated.
Number of distinct treatment papers.
Plazi TreatmentBank. https://plazi.org/
## Not run: taxify("Isotoma viridis", backbone = "gbif") |> add_plazi_collembola_body_length() ## End(Not run)## Not run: taxify("Isotoma viridis", backbone = "gbif") |> add_plazi_collembola_body_length() ## End(Not run)
Joins amphibian upper thermal-limit and body-size summaries to a taxify()
result by accepted_name. Per-measurement records are reduced to species
medians; heat tolerance pools across metrics and acclimation conditions, so it
is an approximate species-level upper thermal limit.
add_pottier(x, cols = NULL, verbose = TRUE)add_pottier(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Pottier et al. (2022) amphibian heat tolerance database (Scientific Data, CC-BY 4.0).
The same data.frame with numeric columns
pottier_heat_tolerance_c, pottier_acclimation_temp_c,
pottier_svl_mm, pottier_body_mass_g.
Pottier P et al. (2022) A comprehensive database of amphibian heat tolerance. Scientific Data 9:600. doi:10.1038/s41597-022-01704-9
## Not run: taxify("Rana temporaria", backbone = "gbif") |> add_pottier() ## End(Not run)## Not run: taxify("Rana temporaria", backbone = "gbif") |> add_pottier() ## End(Not run)
Joins Atlantic and Eastern-Pacific reef-fish life-history, ecology and
behaviour traits to a taxify() result by accepted_name.
add_quimbayo(x, cols = NULL, verbose = TRUE)add_quimbayo(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Quimbayo et al. (2021) reef-fish trait database (ESA data paper; Zenodo, open).
The same data.frame with quimbayo_ columns: numeric
body_size_max_cm, aspect_ratio, trophic_level, depth_min_m,
depth_max_m, temp_occurrence_mean_c; categorical home_range,
diel_activity, water_level, body_shape, mouth_position, diet,
spawning, size_group.
Quimbayo JP et al. (2021) Life-history traits, geographical range, and conservation aspects of reef fishes. Ecology. doi:10.5281/zenodo.4455016
## Not run: taxify("Thalassoma bifasciatum", backbone = "gbif") |> add_quimbayo() ## End(Not run)## Not run: taxify("Thalassoma bifasciatum", backbone = "gbif") |> add_quimbayo() ## End(Not run)
Joins genus-level morphological, behavioural and ecological traits of marine
protists to a taxify() result by looking up genus, so any species in a
covered genus is annotated.
add_ramond(x, cols = NULL, verbose = TRUE)add_ramond(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Ramond et al. (SEANOE, CC BY 4.0), functional traits of marine protists. Traits are genus-level; numeric cell size is aggregated by median, categorical traits by mode.
The same data.frame with additional columns. The curated set:
Cell shape (round, elongated, amoeboid, ...).
Motility mode (swimmer, floater, gliding, ...).
Ingestion / trophic mode (phagotrophic, ...).
Chloroplast presence (1 = present).
Symbiotic relationship (parasite, mutualist, ...).
Colony form.
Salinity preference.
Minimum cell size (micrometres).
Maximum cell size (micrometres).
With cols = "all" the full set of behavioural, ecological and symbiosis
descriptors is attached under their source names.
Ramond P, Siano R, Sourisseau M (2018) Functional traits of marine protists. SEANOE. doi:10.17882/51662
## Not run: taxify("Alexandrium", backbone = "gbif") |> add_ramond() ## End(Not run)## Not run: taxify("Alexandrium", backbone = "gbif") |> add_ramond() ## End(Not run)
Joins species-level reptile traits from ReptTraits (Oskyrko et al. 2024) to a
taxify() result by looking up accepted_name. ReptTraits is built on the
Reptile Database taxonomy, so it joins cleanly against the reptiledb
backbone (and any backbone that resolves to Reptile Database accepted names).
add_repttraits(x, cols = NULL, verbose = TRUE)add_repttraits(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
The dataset carries a per-species distribution signal (biogeographic realm, elevation range and mean climate) alongside body-size and life-history traits, across all reptiles (snakes, lizards, amphisbaenians, turtles, crocodiles and the tuatara), not lizards only.
Source: ReptTraits v1.2 (Oskyrko et al. 2024, Scientific Data, CC BY 4.0).
Coverage: 12,060 reptile species. The biogeographic realm and climate fields
give a coarse, realm-level range signal; they are not a fine-grained
(TDWG-level) range like the plant ranges used by the region constraint.
The same data.frame with additional columns:
Main biogeographic realm (e.g. Neotropic, Palearctic, Afrotropic, Australo-Pacific, Marine).
Microhabitat (e.g. Terrestrial, Saxicolous, Arboreal).
Habitat type(s) (e.g. Forest, Desert, Wetlands).
Minimum recorded elevation in metres.
Maximum recorded elevation in metres.
Mean annual temperature across the range (degrees Celsius).
Whether the species is insular/endemic
("Yes"/"No").
Maximum body mass in grams.
Maximum snout-vent length (straight carapace length for turtles) in mm.
Maximum total length in mm.
Maximum longevity in years.
Diet category (e.g. Carnivorous, Herbivorous, Omnivorous).
Reproductive mode (oviparous/viviparous/...).
Mean clutch or litter size.
Activity time (Diurnal/Nocturnal/Cathemeral).
Foraging mode (ACT active / AMB ambush / Mixed).
Oskyrko O, Mi C, Meiri S, Du W (2024) ReptTraits: a comprehensive dataset of ecological traits in reptiles. Scientific Data 11:243. doi:10.1038/s41597-024-03079-5
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Pogona vitticeps", backbone = "reptiledb") |> add_repttraits() options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Pogona vitticeps", backbone = "reptiledb") |> add_repttraits() options(old)
Joins cell-level morphometrics for temperate-lake phytoplankton to a
taxify() result by accepted_name.
add_rimet_phyto(x, cols = NULL, verbose = TRUE)add_rimet_phyto(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Rimet & Druart (2018) phytoplankton metrics database (Zenodo, CC-BY 4.0).
The same data.frame with numeric columns
rimet_phyto_cell_length_um, rimet_phyto_cell_width_um,
rimet_phyto_cell_thickness_um, rimet_phyto_cell_surface_area_um2,
rimet_phyto_cell_biovolume_um3.
Rimet F, Druart JC (2018) A trait database for phytoplankton of temperate lakes. Zenodo. doi:10.5281/zenodo.1164834
## Not run: taxify("Asterionella formosa", backbone = "gbif") |> add_rimet_phyto() ## End(Not run)## Not run: taxify("Asterionella formosa", backbone = "gbif") |> add_rimet_phyto() ## End(Not run)
Joins European deadwood-beetle body and appendage morphometrics to a
taxify() result by accepted_name.
add_saproxylic(x, cols = NULL, verbose = TRUE)add_saproxylic(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Hagge et al. (2021) saproxylic beetle morphology (Dryad, CC0).
The same data.frame with numeric saproxylic_ columns:
body_length_mm, body_width_mm, body_height_mm, mass_mg,
colour_lightness, head_length_mm, pronotum_length_mm,
elytra_length_mm, wing_length_mm, wing_aspect, antenna_length_mm,
eye_length_mm.
Hagge J et al. (2021) Morphological trait database of European saproxylic beetles. Dryad. doi:10.5061/dryad.2fqz612p3
## Not run: taxify("Rhysodes sulcatus", backbone = "gbif") |> add_saproxylic() ## End(Not run)## Not run: taxify("Rhysodes sulcatus", backbone = "gbif") |> add_saproxylic() ## End(Not run)
Joins SeaLifeBase morphological and ecological traits to a taxify() result
by looking up accepted_name. SeaLifeBase is the non-fish companion to
FishBase: molluscs, crustaceans, echinoderms, marine mammals, reptiles and
other aquatic organisms. For fishes, use add_fishbase().
add_sealifebase(x, cols = NULL, verbose = TRUE)add_sealifebase(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: SeaLifeBase via rfishbase (Palomares & Pauly, CC BY-NC 4.0). Non-fish aquatic life only.
The sb_lw_* columns give one representative length-weight fit per
species from the POPLW table, so a length can be converted to a mass where
sb_body_mass_g (a record maximum) does not fit the analysis.
The build-from-source fallback requires the rfishbase package
(available on CRAN). Pre-built .vtr files do not require rfishbase.
The same data.frame with additional columns:
Maximum body length in centimetres.
Maximum published weight in grams (SeaLifeBase
SPECIES.Weight). This is a record maximum, not a typical or
adult-mean mass.
Trophic level.
Minimum depth in metres.
Maximum depth in metres.
Vulnerability index (0–100).
Habitat type (e.g. benthic, pelagic).
Commercial importance category.
Coefficient a of the length-weight relationship
W = a * L^b (weight in g, length in cm of type sb_lw_type),
from SeaLifeBase's POPLW table.
Exponent b of the length-weight relationship.
Length convention the coefficients were fitted against
(TL total, SL standard, WD width, ...). Chosen to
match the species' maximum-length type where recorded, so it applies to
sb_body_length_cm. Applying a coefficient to a different length
type is a silent error.
How the fit was obtained (e.g. "type I linear regression", "single L-W pair with b=3").
Sex the fit applies to (unsexed, mixed, female, male, juvenile).
Sample size the fit was based on.
Coefficient of determination (r^2) of the fit.
Palomares MLD, Pauly D (eds.) (2024) SeaLifeBase. World Wide Web electronic publication, https://www.sealifebase.org.
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Octopus vulgaris", backbone = "gbif") |> add_sealifebase() options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Octopus vulgaris", backbone = "gbif") |> add_sealifebase() options(old)
Joins Sharkipedia shark and ray life-history traits to a taxify() result by
accepted_name. Long-format observations are reduced to one value per species
(numeric traits by median) at build time.
add_sharkipedia(x, cols = NULL, verbose = TRUE)add_sharkipedia(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Sharkipedia (Mull et al. 2022, Scientific Data, CC-BY 4.0).
The same data.frame with additional columns:
Maximum observed length (cm).
von Bertalanffy asymptotic length Linf (cm).
von Bertalanffy growth coefficient k (per year).
von Bertalanffy t0 (years).
Length at first maturity (cm).
Length at birth (cm).
Maximum observed age (years).
Age at first maturity (years).
Uterine fecundity.
Gestation length.
Natural mortality M.
Mull CG et al. (2022) Sharkipedia: a curated open access database of shark and ray life history traits and abundance time-series. Scientific Data 9:559. doi:10.1038/s41597-022-01655-1
## Not run: taxify("Carcharodon carcharias", backbone = "gbif") |> add_sharkipedia() ## End(Not run)## Not run: taxify("Carcharodon carcharias", backbone = "gbif") |> add_sharkipedia() ## End(Not run)
Joins US freshwater-mussel life-history and host traits to a taxify() result
by accepted_name.
add_sheld(x, cols = NULL, verbose = TRUE)add_sheld(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: SHELD (Hopper et al. 2023, Scientific Data, CC-BY 4.0).
The same data.frame with sheld_ columns: numeric mean_length_mm,
max_length_mm, mature_age, max_age, growth_rate, fecundity,
n_host_species, n_host_family; categorical brood, marsupial_gills,
hermaphrodite, shell_sculpture.
Hopper GW et al. (2023) A trait dataset for freshwater mussels of the United States of America. Scientific Data 10:745. doi:10.1038/s41597-023-02635-9
## Not run: taxify("Lampsilis cardium", backbone = "gbif") |> add_sheld() ## End(Not run)## Not run: taxify("Lampsilis cardium", backbone = "gbif") |> add_sheld() ## End(Not run)
Joins species-level spider morphometric and ecological traits to a taxify()
result by looking up accepted_name. Values are aggregated from the World
Spider Trait Database (numeric traits by median, categorical traits by mode);
access-restricted source records are excluded.
add_spider_traits(x, cols = NULL, verbose = TRUE)add_spider_traits(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: World Spider Trait Database (Pekar et al. 2021, Database, CC BY 4.0). Coverage: ~7.3k spider species. Morphometry is sexually dimorphic in spiders; the value here is the across-record median and is not split by sex.
The same data.frame with additional columns:
Body length (mm).
Cephalothorax (prosoma) length (mm).
Cephalothorax (prosoma) width (mm).
Abdomen (opisthosoma) length (mm).
Leg I length (mm).
Ballooning (aerial dispersal): yes/no.
Web building: yes/no.
Hunting guild.
Web type.
Circadian activity (diurnal/nocturnal).
Vertical stratum (habitat layer).
Pekar S et al. (2021) The World Spider Trait database: a centralized global open repository for curated data on spider traits. Database 2021:baab064. doi:10.1093/database/baab064
## Not run: taxify("Araneus diadematus", backbone = "gbif") |> add_spider_traits() ## End(Not run)## Not run: taxify("Araneus diadematus", backbone = "gbif") |> add_spider_traits() ## End(Not run)
Joins the Bouche ecological group of an earthworm species to a taxify()
result by accepted name.
add_sworm(x, cols = NULL, verbose = TRUE)add_sworm(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Phillips et al. (2021), 171 species. CC BY 4.0. Earthworms are otherwise absent from the bundled trait sources.
The release is a community dataset covering 10,840 sites, and its one species-level trait is the ecological group each earthworm was assigned from feeding and burrowing behaviour. That assignment is constant within a species across the whole compilation, so collapsing it to one row per species loses nothing.
Abundance and wet biomass are not carried: both ship several units in one
column (individuals, individuals per m2 and per m3; grams, g/m2 and mg/m2),
mixing a per-individual measure with a per-area density, so neither
survives aggregation to the species. The native/non-native flag is a status
at a site rather than a property of the species; add_griis() covers
introduction status per country.
The same data.frame with sworm_ecological_group: one of epigeic,
endogeic, anecic, epi-endogeic.
Phillips HRP, Guerra CA, Bartz MLC, et al. (2021) Global data on earthworm abundance, biomass, diversity and corresponding environmental properties. Scientific Data 8:136. doi:10.1038/s41597-021-00912-z
## Not run: taxify(c("Lumbricus terrestris", "Aporrectodea caliginosa")) |> add_sworm() ## End(Not run)## Not run: taxify(c("Lumbricus terrestris", "Aporrectodea caliginosa")) |> add_sworm() ## End(Not run)
Joins species-median terrestrial-vertebrate population density to a taxify()
result by accepted_name. Only ind/km2 records are used.
add_tetradensity(x, cols = NULL, verbose = TRUE)add_tetradensity(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Santini et al. TetraDENSITY (figshare, CC-BY 4.0). Records in other density units are excluded to avoid mixing.
The same data.frame with numeric tetradensity_density_ind_km2.
Santini L et al. TetraDENSITY: a database of population density estimates in terrestrial vertebrates. figshare. doi:10.6084/m9.figshare.5371633
## Not run: taxify("Capreolus capreolus", backbone = "gbif") |> add_tetradensity() ## End(Not run)## Not run: taxify("Capreolus capreolus", backbone = "gbif") |> add_tetradensity() ## End(Not run)
Joins species-level critical thermal limits for freshwater fish,
invertebrates and amphibians to a taxify() result by looking up
accepted_name. All values are in degrees Celsius.
add_thermofresh(x, cols = NULL, verbose = TRUE)add_thermofresh(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: the Freshwater thermal-tolerance database (Helena Bayat and contributors, Zenodo, CC BY 4.0). Each source record is one tolerance test; values are reduced to species-level medians per metric.
The same data.frame with additional columns:
Critical thermal maximum (degrees C).
Critical thermal minimum (degrees C).
Median lethal temperature (degrees C).
Lethal thermal maximum (degrees C).
Lethal thermal minimum (degrees C).
Freshwater thermal-tolerance database. Zenodo. doi:10.5281/zenodo.14056760
## Not run: taxify("Salmo trutta", backbone = "gbif") |> add_thermofresh() ## End(Not run)## Not run: taxify("Salmo trutta", backbone = "gbif") |> add_thermofresh() ## End(Not run)
Attaches a single harmonized trait (e.g. woodiness, plant height) to a
taxify() result, pulling from every enrichment source that provides it and
reconciling their differing vocabularies and units. Each add_<source>()
function joins one dataset; add_trait() takes the name of a trait and
gathers it from every source that carries it.
add_trait( x, trait, sources = "all", mode = c("coalesce", "wide"), combine = NULL, priority = NULL, provenance = FALSE, verbose = TRUE, aggregate_trait_fallback = getOption("taxify.aggregate_trait_fallback", TRUE) )add_trait( x, trait, sources = "all", mode = c("coalesce", "wide"), combine = NULL, priority = NULL, provenance = FALSE, verbose = TRUE, aggregate_trait_fallback = getOption("taxify.aggregate_trait_fallback", TRUE) )
x |
A data.frame returned by |
trait |
Character. A single trait name; see |
sources |
Which sources to use. Either the string |
mode |
One of |
combine |
How |
priority |
Character vector of source names giving the priority order
(highest priority first), used by |
provenance |
Logical. When |
verbose |
Logical. Default |
aggregate_trait_fallback |
Logical. When an aggregate or hybrid name has
no trait record of its own, fall back to the underlying binomial. Defaults
to |
Each source keeps its provenance. The default "coalesce" mode reduces the
sources to one value per row plus the columns that document it: its unit,
the sources that contributed, how many, and a caution when the sources
measure the trait by different methods. The opt-in "wide" mode instead
gives every source its own column (<trait>_<source>), so per-source
agreement and conflict stay fully visible.
Harmonization is per source: a categorical source is mapped to the trait's
shared vocabulary, and a numeric source is converted to the trait's canonical
unit. For example, GIFT seed mass (grams) and Diaz et al. seed mass
(milligrams) both arrive as milligrams. The mappings and units for a trait
are listed by trait_info().
Some sources report the same trait in the right unit but under a different
definition (for example AusTraits root diameter is a maximum including coarse
roots, while GRooT is fine-root only). Such a source carries a caution in the
registry. In mode = "coalesce" with the default combine, a trait whose
sources disagree in method is not blended: the most complete source is
reported and <trait>_caution records the difference. trait_info() lists
each source's harmonization note and caution.
With provenance = TRUE, a reference names the record a database took the
value from: for a categorical value the references that state that value,
for a numeric value every reference entering the source's aggregate. Under
combine = "median" or "mean" the coalesced references are those of every
contributing source; under "first" or "complete" those of the one source
reported; under "vote", "min" or "max" those of the sources whose value
is the one reported.
A source enrichment that is not installed and cannot be downloaded or built is skipped with a warning, and the trait is assembled from the sources that are available.
The same data.frame with added columns.
mode = "coalesce"<trait> (the reduced value); <trait>_unit
(the canonical unit, numeric traits only); <trait>_sources (the source
it came from, or the comma-separated contributing sources with an
aggregating combine); <trait>_n (how many sources backed the value);
for numeric traits, <trait>_min and <trait>_max (the range of
values behind the headline, across the contributing sources, and
across a source's own records where that spread was recorded at build
time, so a life-stage or population span stays visible); and, only when
a source measured the trait differently, <trait>_caution explaining
the method difference; with provenance = TRUE, <trait>_refs. To
inspect every source, use mode = "wide".
mode = "wide"One column per source, <trait>_<source>, each
harmonized to the trait's shared vocabulary (categorical) or unit
(numeric); <trait>_unit; <trait>_caution on rows where a
cautioned source supplied a value; and, with provenance = TRUE,
<trait>_<source>_refs per source.
Numeric traits are returned in the trait's canonical unit (see
trait_info()); rows absent from a source get NA.
list_traits() to see available traits, trait_info() for a
trait's sources and units. The per-source functions (add_zanne(),
add_gift(), add_diaz_traits(), add_leda()) join one dataset each.
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) # One coalesced value plus its provenance (unit, sources, count): taxify("Abies alba") |> add_trait("seed_mass") # One column per source, to inspect agreement and conflict: taxify("Abies alba") |> add_trait("woodiness", mode = "wide") # The references behind each value, resolved to citations: res <- taxify("Abies alba") |> add_trait("seed_mass", mode = "wide", provenance = TRUE) cite(res$seed_mass_gift_refs) options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) # One coalesced value plus its provenance (unit, sources, count): taxify("Abies alba") |> add_trait("seed_mass") # One column per source, to inspect agreement and conflict: taxify("Abies alba") |> add_trait("woodiness", mode = "wide") # The references behind each value, resolved to citations: res <- taxify("Abies alba") |> add_trait("seed_mass", mode = "wide", provenance = TRUE) cite(res$seed_mass_gift_refs) options(old)
Joins sexual-system and sex-determination traits to a taxify() result by
looking up accepted_name. Covers plants, vertebrates and invertebrates;
some traits are group-specific (selfing for plants, environmental sex
determination for vertebrates, haplodiploidy for invertebrates).
add_tree_of_sex(x, cols = NULL, verbose = TRUE)add_tree_of_sex(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Tree of Sex (Tree of Sex Consortium 2014, Scientific Data, CC0). Coverage: ~37.5k species across plants, vertebrates and invertebrates.
The same data.frame with additional columns:
Source group (plants/vertebrates/invertebrates).
Sexual system (vocabulary differs by group).
Sex-chromosome system (XY/ZW/XO/homomorphic/...).
Heterogamety (male/female heterogametic/GSD/...).
Molecular basis (Y dominant/W dominant/dosage).
Selfing (plants; self compatible/incompatible).
Environmental sex determination (vertebrates; TSD/...).
Haplodiploidy (invertebrates).
The Tree of Sex Consortium (2014) Tree of Sex: a database of sexual systems. Scientific Data 1:140015. doi:10.1038/sdata.2014.15
## Not run: taxify("Silene latifolia", backbone = "gbif") |> add_tree_of_sex() ## End(Not run)## Not run: taxify("Silene latifolia", backbone = "gbif") |> add_tree_of_sex() ## End(Not run)
Joins per-fungus host breadth from the USDA National Fungus Collections
Fungus-Host Dataset to a taxify() result by looking up accepted_name.
Each fungus species is summarised by how many distinct host plants and host
plant genera it has been recorded on.
add_usda_fungus_host(x, cols = NULL, verbose = TRUE)add_usda_fungus_host(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Farr, Rossman & Castlebury (2021) United States National Fungus Collections Fungus-Host Dataset, Ag Data Commons (U.S. Public Domain). Fungi only; ~99k species with at least one recorded host.
The same data.frame with additional columns:
Number of distinct host plant species recorded.
Number of distinct host plant genera recorded.
Farr DF, Rossman AY, Castlebury LA (2021) United States National Fungus Collections Fungus-Host Dataset. Ag Data Commons. doi:10.15482/USDA.ADC/1524414
## Not run: taxify("Puccinia graminis", backbone = "gbif") |> add_usda_fungus_host() ## End(Not run)## Not run: taxify("Puccinia graminis", backbone = "gbif") |> add_usda_fungus_host() ## End(Not run)
Joins plant human-use categories to a taxify() result by looking up
accepted_name. Each of the ten Level-1 use categories is a 0/1 flag, plus a
crop-wild-relative flag.
add_useful_plants(x, cols = NULL, verbose = TRUE)add_useful_plants(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Character vector of use-category columns to attach, or |
verbose |
Logical. Default |
Source: World Checklist of Useful Plant Species (Diazgranados et al. 2020, KNB, CC BY 4.0). Coverage: ~39k plant species.
The same data.frame with additional columns:
Animal food (0/1).
Environmental uses (0/1).
Fuels (0/1).
Gene sources (0/1).
Human food (0/1).
Invertebrate food (0/1).
Materials (0/1).
Medicines (0/1).
Poisons (0/1).
Social uses (0/1).
Crop wild relative (0/1).
Diazgranados M et al. (2020) World Checklist of Useful Plant Species. Knowledge Network for Biocomplexity. doi:10.5063/F1CV4G34
## Not run: taxify("Acorus calamus", backbone = "gbif") |> add_useful_plants() ## End(Not run)## Not run: taxify("Acorus calamus", backbone = "gbif") |> add_useful_plants() ## End(Not run)
Joins per-host counts of recorded virus associations to a taxify() result.
add_virion(x, cols = NULL, verbose = TRUE)add_virion(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Carlson et al. (2022), 4223 vertebrate hosts and 9833
viruses. ODbL-1.0. As with add_globi() and add_invacost(), only the
derived per-host counts are redistributed, not the association records.
These counts measure how much a host has been looked at as much as what
infects it. Homo sapiens leads with 936 distinct viruses across 633,053
records, and the ordering below it tracks livestock and laboratory species.
virus_record_count travels alongside so the effort behind a richness is
visible; treat richness as association breadth as recorded, not as a
biological property of the host.
The same data.frame with virion_ columns: virus_richness,
virus_family_count, virus_record_count, host_class.
Carlson CJ, Gibb RJ, Albery GF, et al. (2022) The Global Virome in One Network (VIRION): an atlas of vertebrate-virus associations. mBio 13:e0298521. doi:10.1128/mbio.02985-21
## Not run: taxify(c("Sus scrofa", "Myotis lucifugus")) |> add_virion() ## End(Not run)## Not run: taxify(c("Sus scrofa", "Myotis lucifugus")) |> add_virion() ## End(Not run)
Joins WCVP (World Checklist of Vascular Plants, Kew) native range
data to a taxify() result, filtered by TDWG botanical region.
add_wcvp(x, region, cols = NULL, verbose = TRUE)add_wcvp(x, region, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
region |
Character. TDWG Level 3 region code(s), or
List the region codes WCVP covers with |
cols |
Which columns to attach. |
verbose |
Logical. Default |
Source: WCVP (Kew, CC BY). Coverage: ~340k plant species. Plants only.
The range reported is that of the taxon taxify() matched, as its
backbone circumscribes it: the matched name's own records plus those of every
name the backbone sinks into it. Where these disagree on a region, native
wins over introduced, and introduced over extinct, since the taxon is
native wherever any part of it is.
A region is left NA rather than filled from a broader taxon, or from one
the matched backbone accepts as separate, when that is the only name
another backbone offers for it. Those names are listed as refused in the
wcvp entry of attr(x, "taxify_meta")$enrichments (the queried and
refused name, the reason, the backbones offering it and the number of
regions it would have filled), and counted by base::summary().
The same data.frame with additional column(s):
One of "native", "introduced", "extinct",
or NA if not recorded for that region.
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Quercus robur") |> add_wcvp(region = "GER") taxify("Quercus robur") |> add_wcvp(region = c("GER", "BGM")) options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Quercus robur") |> add_wcvp(region = "GER") taxify("Quercus robur") |> add_wcvp(region = c("GER", "BGM")) options(old)
Joins extra World Flora Online columns to a taxify() result by
looking up taxon_id in the WFO backbone.
add_wfo_info(x)add_wfo_info(x)
x |
A data.frame returned by |
The same data.frame with additional columns:
WFO scientificNameID.
WFO parentNameUsageID.
Publication reference, under the name every
backbone's .vtr and add_gbif_info() use.
Higher classification string.
Taxonomic remarks.
Infraspecific epithet (for subspecies, varieties, forms).
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Quercus robur") |> add_wfo_info() options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Quercus robur") |> add_wfo_info() options(old)
Joins the woody / herbaceous classification of Zanne et al. (2014) to a
taxify() result by looking up accepted_name. This function is named
after its source, the Zanne Global Woodiness Database; for woodiness reconciled across
every source that carries it (Zanne, GIFT), use add_trait() with
"woodiness".
add_zanne(x, cols = NULL, verbose = TRUE)add_zanne(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Zanne et al. 2014, Nature (Dryad, CC0). Coverage: ~50k plant species. Plants only.
The same data.frame with an additional column:
One of "woody", "herbaceous", "variable",
or NA if not in the dataset.
Zanne AE et al. (2014) Three keys to the radiation of angiosperms into freezing environments. Nature 506:89-92.
add_trait() for woodiness harmonized across sources.
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Quercus robur") |> add_zanne() options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify("Quercus robur") |> add_zanne() options(old)
Joins global marine-zooplankton traits to a taxify() result by
accepted_name (species-level summaries).
add_zooplankton(x, cols = NULL, verbose = TRUE)add_zooplankton(x, cols = NULL, verbose = TRUE)
x |
A data.frame returned by |
cols |
Which columns to attach: |
verbose |
Logical. Default |
Source: Pata & Hunt global marine zooplankton trait database (Zenodo, CC-BY-SA 4.0).
The same data.frame with zooplankton_ columns: numeric
body_length_max_mm, carbon_weight_mg, nitrogen_pdw_pct; categorical
vertical_distribution, reproduction_mode, trophic_group,
feeding_mode, myelination, habitat_association,
diel_vertical_migration, bioluminescence.
Pata PR, Hunt BPV (2025) A global trait database for marine zooplankton. Zenodo. doi:10.5281/zenodo.8102913
## Not run: taxify("Calanus finmarchicus", backbone = "gbif") |> add_zooplankton() ## End(Not run)## Not run: taxify("Calanus finmarchicus", backbone = "gbif") |> add_zooplankton() ## End(Not run)
Returns the accepted taxa a backbone places inside a genus or family, so a
checklist can be built from the backbone as well as checked against it. The
parent's rank is read from the backbone, as in downstream(), restricted to
genus and family: children() is downstream() for a genus or family parent.
children( taxon, backbone = NULL, rank = "species", kingdom = NULL, verbose = TRUE )children( taxon, backbone = NULL, rank = "species", kingdom = NULL, verbose = TRUE )
taxon |
A single genus or family name. |
backbone |
A single backbone name (e.g. |
rank |
Rank of the children to return ( |
kingdom |
Optional kingdom (or kingdoms) the parent belongs to, as in
|
verbose |
Logical. Default |
A data.frame of accepted taxa, columns: name, authorship, rank,
kingdom_group, family, genus, taxon_id, parent, parent_rank
("genus" or "family"), backbone. Empty if the parent is not found.
downstream() to reach below a higher rank, synonyms(),
taxify().
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) children("Quercus", backbone = "wfo") options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) children("Quercus", backbone = "wfo") options(old)
Prints formatted citations for the taxonomic backbone(s), enrichment datasets, and the taxify package itself. Optionally writes a BibTeX file.
cite(x, ...) ## Default S3 method: cite(x, file = NULL, ...) ## S3 method for class 'character' cite(x, file = NULL, source = NULL, ...)cite(x, ...) ## Default S3 method: cite(x, file = NULL, ...) ## S3 method for class 'character' cite(x, file = NULL, source = NULL, ...)
x |
A |
... |
Unused. |
file |
Optional file path. If provided, BibTeX entries are written
to this file (extension should be |
source |
For a character |
Given reference ids instead of a result, cite() resolves them to the works
a trait value was taken from: the per-value references add_trait() returns
with provenance = TRUE (<trait>_refs), or the <col>_source column of an add_<source>() function
read with source =.
For a taxify_result, x, invisibly (pipe-friendly). For reference
ids, invisibly, a data.frame with one row per distinct id: ref (the
qualified id), source, ref_id, citation, doi, and any further
columns the source's reference table carries.
old <- options(taxify.data_dir = taxify_example_data()) result <- taxify("Quercus robur", backbone = "wfo") result |> cite() result |> cite(file = tempfile(fileext = ".bib")) options(old)old <- options(taxify.data_dir = taxify_example_data()) result <- taxify("Quercus robur", backbone = "wfo") result |> cite() result |> cite(file = tempfile(fileext = ".bib")) options(old)
Resolves the names, attaches their full higher classification, and assembles a
taxonomy tree (kingdom -> phylum -> class -> order -> family -> genus ->
species) from the shared lineages. Returns the tree as a Newick string and the
underlying classification table; when the ape package is installed, an
ape phylo object is included too.
class2tree(x, backbone = NULL, ..., verbose = TRUE) ## S3 method for class 'taxify_tree' print(x, ...)class2tree(x, backbone = NULL, ..., verbose = TRUE) ## S3 method for class 'taxify_tree' print(x, ...)
x |
Character vector of names, or a |
backbone |
Backend passed to |
... |
Ignored, present for S3 |
verbose |
Logical. Default |
An object of class taxify_tree: a list with
The Newick string (internal nodes labelled by rank value,
tips by species name). Characters Newick reserves, the space among them,
are written as _ (Quercus_robur).
The classification data.frame the tree was built from.
The species at the tips, as named in classification.
An ape phylo object, or NULL if ape is not
installed / the string could not be parsed. Its tip.label and
node.label carry the names themselves, as tip_labels does.
lowest_common(), add_classification(), taxify().
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) tr <- class2tree(c("Quercus robur", "Quercus petraea", "Quercus pyrenaica")) tr$newick options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) tr <- class2tree(c("Quercus robur", "Quercus petraea", "Quercus pyrenaica")) tr$newick options(old)
The reverse of add_common_names(): given a common name, return the accepted
scientific name(s) it refers to. Reads the bundled common_names enrichment
(GBIF, NCBI, and Open Tree vernaculars) offline; the first call may trigger
the one-time download. A common name is frequently ambiguous (several species
share "bluebell", "robin"), so the result can carry more than one row per
query.
comm2sci( x, lang = NULL, output = c("lookup", "result"), backbone = NULL, ..., verbose = TRUE )comm2sci( x, lang = NULL, output = c("lookup", "result"), backbone = NULL, ..., verbose = TRUE )
x |
Character vector of common names. |
lang |
Character. Restrict to one language: an ISO 639-1 code ( |
output |
What to return. |
backbone |
Passed to |
... |
Matching arguments passed to |
verbose |
Logical. Default |
For output = "lookup", a data.frame with one row per
(query, scientific match, language):
The common name as supplied.
The vernacular name as stored in the source (its
casing, which may differ from input_name).
The accepted scientific name.
Language tag of the vernacular name (NA for NCBI/Open Tree).
A query with no match contributes no rows. For output = "result", a
taxify_result with one row per (query, distinct scientific match), with
query_common prepended.
add_common_names() for the forward direction (scientific ->
common), taxify().
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) # The bundled example database maps "example_common_name" to Quercus robur; # against the full download this is where "pedunculate oak" would resolve. comm2sci("example_common_name") # Resolve straight to a taxify_result, ready for add_*() functions comm2sci("example_common_name", output = "result", backbone = "wfo") options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) # The bundled example database maps "example_common_name" to Quercus robur; # against the full download this is where "pedunculate oak" would resolve. comm2sci("example_common_name") # Resolve straight to a taxify_result, ready for add_*() functions comm2sci("example_common_name", output = "result", backbone = "wfo") options(old)
Returns every accepted taxon at downto rank that sits beneath taxon,
for example every species in an order or family. The parent's rank is
detected from the backbone, then descendants are read from the denormalized
classification the backbone stores. children() is the same query for a
genus or family parent.
downstream( taxon, backbone = NULL, downto = "species", kingdom = NULL, verbose = TRUE )downstream( taxon, backbone = NULL, downto = "species", kingdom = NULL, verbose = TRUE )
taxon |
A single higher-taxon name (a genus, family, order, class, phylum, or kingdom). |
backbone |
A single backbone name or a |
downto |
Target rank of the descendants to return ( |
kingdom |
Optional kingdom (or kingdoms) the parent belongs to, as in
|
verbose |
Logical. Default |
A data.frame of accepted descendants, columns: name, authorship,
rank, kingdom_group (the coarse kingdom, as in taxify() output),
family, genus, taxon_id, parent, parent_rank, backbone. Empty
when taxon is not found, its rank is one the backbone does not store as a
column (e.g. subfamily, tribe), or it has no descendants at downto.
children() for a genus or family parent, upstream() for the
ancestors, taxify(), synonyms().
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) # Every species the backbone places in the genus downstream("Quercus", backbone = "col") options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) # Every species the backbone places in the genus downstream("Quercus", backbone = "col") options(old)
Lists the columns available from a published dataset's pre-built .vtr, for
choosing which to attach through the functions that accept a cols argument (such
as add_gift() and add_floraweb()). Read offline from the local .vtr;
the first call may trigger the one-time download.
enrichment_cols(source)enrichment_cols(source)
source |
Character. An enrichment name (see |
A data.frame with one row per column: column (the name) and type
("numeric" or "character").
add_gift(), add_floraweb(), list_enrichments()
old <- options(taxify.data_dir = taxify_example_data()) enrichment_cols("gift") options(old)old <- options(taxify.data_dir = taxify_example_data()) enrichment_cols("gift") options(old)
Some add_<source>() functions attach data per group: GRIIS invasive status by country
(add_griis()), WCVP native ranges by TDWG region (add_wcvp()), vernacular
names by language (add_common_names()), alien first records by location
(add_alien_first_records()). This lists the valid group values for such a
function, the way enrichment_cols() lists a dataset's columns, so a country,
region, or language code need not be guessed. Read offline from the local
.vtr metadata (falling back to the manifest, then a scan of the .vtr); the
first call may trigger the one-time download.
enrichment_groups(source, verbose = TRUE)enrichment_groups(source, verbose = TRUE)
source |
Character. A grouped enrichment name (see |
verbose |
Logical. Print the group column and count. Default |
A character vector of the available group values, sorted. Stops with a
pointer to enrichment_cols() when source is a flat (non-grouped)
enrichment, which has no group values.
enrichment_cols(), list_enrichments(), add_griis(),
add_wcvp(), add_common_names(), add_alien_first_records()
old <- options(taxify.data_dir = taxify_example_data()) enrichment_groups("griis") # ISO country codes GRIIS covers options(old)old <- options(taxify.data_dir = taxify_example_data()) enrichment_groups("griis") # ISO country codes GRIIS covers options(old)
Lists the areas Euro+Med PlantBase states a taxon's status for, with the
ISO 3166-1 alpha-2 country code of the areas that are one country. Areas are
not countries: some combine several ("Italy, with San Marino and Vatican
City"), some are part of one (a region of European Russia, an island group),
and the level-2 areas split a combined area into its countries (Au(A)
Austria and Au(L) Liechtenstein under Au). Only an area that is exactly
one country carries an iso2.
euromed_areas()euromed_areas()
A data.frame with area_code, area_name, area_level and iso2.
old <- options(taxify.data_dir = taxify_example_data()) euromed_areas() options(old)old <- options(taxify.data_dir = taxify_example_data()) euromed_areas() options(old)
Writes a taxify() result (with any enrichments) to disk in one of several
formats. The default .vtr format preserves column types and is fast to
re-read with add_data().
export_data(x, path, overwrite = FALSE)export_data(x, path, overwrite = FALSE)
x |
A data.frame returned by |
path |
Character. Output file path. The format is inferred from the
extension: |
overwrite |
Logical. Overwrite an existing file? Default |
Invisibly returns path.
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) result <- taxify(c("Quercus robur", "Pinus sylvestris")) result |> export_data(tempfile(fileext = ".vtr")) result |> export_data(tempfile(fileext = ".csv")) result |> export_data(tempfile(fileext = ".tsv")) options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) result <- taxify(c("Quercus robur", "Pinus sylvestris")) result |> export_data(tempfile(fileext = ".vtr")) result |> export_data(tempfile(fileext = ".csv")) result |> export_data(tempfile(fileext = ".tsv")) options(old)
A request built from gbif_request() covers several keys per name, so the
records that come back have to be traced to the name that asked for them
before they can be counted or grouped.
gbif_backmatch(records, x, verbose = TRUE)gbif_backmatch(records, x, verbose = TRUE)
records |
A data.frame of occurrence records: what
|
x |
What the keys came from: the object |
verbose |
Logical. Default |
Joining on taxonKey alone loses records, silently. GBIF returns the
records of a key's descendants as well as its own, and a record identified
to a subspecies carries the subspecies key: requesting Pinus nigra
(5284809) returns records whose taxonKey is 5686674, P. nigra subsp.
salzmannii. Those rows match on speciesKey and on nothing else. This
function therefore tries the record's keys from the most specific outwards
and takes the first that is one of the requested keys.
records with three columns added: requested_key (the key that
matched), input_name (the name as queried) and accepted_name. Records
matching no requested key keep NA in all three. The provenance on x
travels with them, so cite() on the result reports the backbone and,
for a download, its DOI.
## Not run: spp <- c("Pinus nigra", "Quercus robur") recs <- gbif_request(spp, method = "search", limit = 100) recs <- gbif_backmatch(recs, recs) table(recs$input_name, useNA = "ifany") ## End(Not run)## Not run: spp <- c("Pinus nigra", "Quercus robur") recs <- gbif_request(spp, method = "search", limit = 100) recs <- gbif_backmatch(recs, recs) table(recs$input_name, useNA = "ifany") ## End(Not run)
Waits for the download gbif_request() submitted, retrieves it, imports it
and returns the records. A request too long for one GBIF query is split
across several downloads, and all of them are waited for and stacked, so a
sharded request is fetched the same way as a single one.
gbif_fetch(x, backmatch = TRUE, path = tempdir(), verbose = TRUE)gbif_fetch(x, backmatch = TRUE, path = tempdir(), verbose = TRUE)
x |
What |
backmatch |
Logical. Attach the queried names with |
path |
Directory to download into. Defaults to a session temp
directory, so nothing is written outside it unless |
verbose |
Logical. Default |
A data.frame of occurrence records, carrying the same keys,
taxa, taxify_meta and gbif_download attributes as x, so cite()
reports the backbone and every download DOI.
gbif_request(), gbif_backmatch(), cite().
## Not run: dl <- gbif_request(c("Quercus robur", "Bellis perennis")) recs <- gbif_fetch(dl) cite(recs) ## End(Not run)## Not run: dl <- gbif_request(c("Quercus robur", "Bellis perennis")) recs <- gbif_fetch(dl) cite(recs) ## End(Not run)
Takes a list of names, matches it against the GBIF backbone and requests
occurrence data for every accepted taxon key the matches resolve to. A name
GBIF files under more than one key (a homonym published by two authors, or
a name held once as accepted and again as a doubtful record) contributes
all of its keys, so the request covers the whole matched concept rather than
whichever key taxify() reported first.
gbif_request( x, method = c("download", "search"), keys = c("taxon", "pick", "all"), limit = 500, format = "SIMPLE_CSV", dry_run = FALSE, ..., verbose = TRUE )gbif_request( x, method = c("download", "search"), keys = c("taxon", "pick", "all"), limit = 500, format = "SIMPLE_CSV", dry_run = FALSE, ..., verbose = TRUE )
x |
A character vector of names, or a |
method |
|
keys |
Which of a name's GBIF keys to request, by their |
limit |
Records per key for |
format |
Download format for |
dry_run |
Logical. If |
... |
Matching arguments passed to |
verbose |
Logical. Default |
The keys themselves are read off taxify_ids(), which resolves each one
against the backbone and carries its occurrence count; call it directly to
see what a request would cover before sending it, or pass dry_run = TRUE
here for the keys alone.
With dry_run = TRUE, an integer vector of GBIF taxon keys, which
prints as the keys alone. With
method = "download", the object rgbif's occ_download() returns (the
download key, to be passed to occ_download_wait()). With
method = "search", a data.frame of occurrence records, empty if none
matched. In every case the keys and the taxify_ids() table behind them
are attached as the keys and taxa attributes, along with the match's
taxify_meta; a download also carries its key as gbif_download, which
is what lets cite() report the download's DOI beside the backbone.
method = "download" submits an asynchronous GBIF download. It has no
record cap and yields a citable DOI, which is what GBIF asks for in
published work, and it needs a GBIF account: set GBIF_USER, GBIF_PWD and
GBIF_EMAIL in ~/.Renviron. The call returns as soon as the request is
queued; wait for it and fetch it with rgbif's occ_download_wait() and
occ_download_get().
method = "search" sends unauthenticated searches and returns the records
directly. It needs no account, and the GBIF search API caps what it will
page through, so it suits a look at a handful of taxa rather than a
checklist-wide pull.
taxify_ids() for the keys and their occurrence counts,
taxify() for the matching itself.
## Not run: # A checklist, matched and requested in one call. Needs the full GBIF # backbone, so it cannot run on a check machine. spp <- c("Quercus robur", "Bellis perennis", "Morus alba") # What would be requested, without contacting GBIF: gbif_request(spp, dry_run = TRUE) # An unauthenticated search: recs <- gbif_request(spp, method = "search", limit = 50) # A citable download (needs GBIF_USER / GBIF_PWD / GBIF_EMAIL): dl <- gbif_request(spp, method = "download") rgbif::occ_download_wait(dl) rgbif::occ_download_get(dl) ## End(Not run)## Not run: # A checklist, matched and requested in one call. Needs the full GBIF # backbone, so it cannot run on a check machine. spp <- c("Quercus robur", "Bellis perennis", "Morus alba") # What would be requested, without contacting GBIF: gbif_request(spp, dry_run = TRUE) # An unauthenticated search: recs <- gbif_request(spp, method = "search", limit = 50) # A citable download (needs GBIF_USER / GBIF_PWD / GBIF_EMAIL): dl <- gbif_request(spp, method = "download") rgbif::occ_download_wait(dl) rgbif::occ_download_get(dl) ## End(Not run)
Returns the species-level trait columns available from the bundled GIFT
dataset, for picking which to attach in add_gift(). Read offline
from the local .vtr (downloaded or built once); the first call may trigger
that one-time download.
gift_traits()gift_traits()
A data.frame with one row per trait column:
The gift_<trait> column name.
"numeric" or "character".
add_gift(), enrichment_cols() for the same listing on any
enrichment.
old <- options(taxify.data_dir = taxify_example_data()) gift_traits() options(old)old <- options(taxify.data_dir = taxify_example_data()) gift_traits() options(old)
Looks up one or more backbone taxon IDs in a backbone and returns the name,
rank, classification, and accepted-name resolution for each. The inverse of
the taxon_id / accepted_id columns taxify() emits.
id2name(id, backbone = NULL, verbose = TRUE)id2name(id, backbone = NULL, verbose = TRUE)
id |
A vector of backbone IDs (e.g. GBIF keys, ITIS TSNs, WoRMS
AphiaIDs), matched as text against the backbone's |
backbone |
A single backbone name (e.g. |
verbose |
Logical. Default |
A data.frame with one row per input ID (in input order), columns:
The queried ID.
Canonical name for that ID (NA if the ID is not in the
backbone).
Authorship of the name.
Taxonomic rank.
Logical. Is this ID a synonym?
The accepted name the ID resolves to (equals name
when the ID is itself accepted).
Family.
Genus.
Backend used.
IDs not found in the backbone yield a row with NA name columns, so the
output stays aligned one-to-one with the input.
taxify() for name -> ID, synonyms(), add_classification().
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) # Round-trip: resolve a name, then look its ID back up r <- taxify("Quercus robur", backbone = "col") id2name(r$taxon_id, backbone = "col") options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) # Round-trip: resolve a name, then look its ID back up r <- taxify("Quercus robur", backbone = "col") id2name(r$taxon_id, backbone = "col") options(old)
A quality-control pass over a name list. By default inspect() does not match
names against backbones: on a plain character vector it runs the checks that
need no matching (the genus register and the rest of the batch) and is fast
and offline. To also surface the match-based anomalies (typo, synonym,
ambiguous, geographic), either set backbones = TRUE (matches against
every installed backbone, listed in the report) or match yourself first and
inspect the result (taxify(x) |> inspect()). Either way it returns only the
rows that look anomalous, each labelled with what stands out and, where known,
the name to use instead.
inspect( x, backbones = FALSE, region = NULL, coords = NULL, range = c("present", "native", "introduced"), min_tier = c("note", "review", "unresolved"), verbose = TRUE )inspect( x, backbones = FALSE, region = NULL, coords = NULL, range = c("present", "native", "introduced"), min_tier = c("note", "review", "unresolved"), verbose = TRUE )
x |
A character vector of names, or a |
backbones |
Logical. When |
region, coords, range
|
Geographic constraint for the |
min_tier |
Lowest tier to report: |
verbose |
Logical. Print progress messages. Default |
Checks that need no matching (run on a character vector or a result):
unknownThe genus is not in the genus register, the union of the genera of every backbone, so no backbone recognises it. The strong "probably not a real name" signal.
near_duplicateA near-twin of a more frequent name in the same list (small edit distance), so probably a misspelling of it. Computed from the list alone, so it catches typos in names no backbone contains.
outlier_groupThe name's kingdom group (from the register) is a tiny minority of an otherwise group-coherent list: the lone animal or fungus among plants, typically a cross-kingdom homonym typo.
Checks read from a taxify() result (only present when the input is one):
typoResolved only after fuzzy correction (match_type = "fuzzy"):
the input most likely contains a spelling error; suggestion is the name.
rank_fallbackAn infraspecific name the backbone does not carry,
resolved to its species (match_type = "rank_fallback").
ambiguousA name the backbone files under more than one accepted
taxon (n_ids > 1) that is not itself the accepted name; the reason lists
the accepted IDs.
geographicThe matched species is real but has no WCVP record in the
declared region / coords (vascular plants only).
out_of_rangeNo region declared, yet the matched species' range falls outside the list's main TDWG continents (skipped for globally spread lists).
caseResolved only after ignoring case (match_type = "exact_ci").
synonymThe input is an outdated synonym, or a name the backbone
keeps unplaced whose basionym it places (match_type = "basionym");
suggestion is the current accepted name.
Rows with no anomaly are dropped.
Each row gets a tier describing what it needs, not how bad it is:
unresolved (no usable name: act on it), review (a name is there but its
identity is uncertain: verify it), or note (correct, optional cleanup).
unknown is unresolved; the identity-uncertain labels are review; case
and synonym are note. An anomaly may be intended, so the tier is a triage
hint, not a verdict.
The list-context labels (near_duplicate, out_of_range, outlier_group)
judge a name against the rest of the batch, so they cannot apply to a single
name: inspect() on one name warns and reports only the per-name labels. The
register checks (unknown, and the register-derived outlier_group) need the
genus register installed, and the range checks need the WCVP range data; a
check that could not run is named in the report header under not checked,
so an empty report is never mistaken for a clean one.
A taxify_inspection data.frame (one row per anomalous name, ordered
most-notable first) with columns input_name, suggestion (the name to use
instead, or NA), anomalies (|-joined labels), tier (ordered factor
note < review < unresolved), reason, fuzzy_dist, and backbone.
Zero rows means nothing stood out among the checks that ran; the header's
not checked line names any that could not.
old <- options(taxify.data_dir = taxify_example_data()) # On raw names: register + list checks (no matching) inspect(c("Quercus robur", "Bogusus fakus", "Carexus mysteriosa", "Carexus mysteriosa", "Carexus mysteryosa")) # Opt in to matching to also get typos, synonyms, ambiguity inspect(c("Quercus robur", "Quercus robus"), backbones = TRUE) # Or match yourself and inspect the result taxify(c("Quercus robur", "Quercus robus")) |> inspect() options(old)old <- options(taxify.data_dir = taxify_example_data()) # On raw names: register + list checks (no matching) inspect(c("Quercus robur", "Bogusus fakus", "Carexus mysteriosa", "Carexus mysteriosa", "Carexus mysteryosa")) # Opt in to matching to also get typos, synonyms, ambiguity inspect(c("Quercus robur", "Quercus robus"), backbones = TRUE) # Or match yourself and inspect the result taxify(c("Quercus robur", "Quercus robus")) |> inspect() options(old)
Downloads the pre-built .vtr for each named backbone into the taxify data
directory (taxify_data_dir()), so subsequent taxify() calls match against
them offline. taxify installs its default set automatically on first use
(COL, GBIF, ITIS); call this to pre-install a specific set, add a backbone to
the default, or refresh to the latest release.
install_backbones(backbones = NULL, verbose = TRUE)install_backbones(backbones = NULL, verbose = TRUE)
backbones |
Character vector of backbone names (see |
verbose |
Logical. Default |
An installed backbone is compared against the manifest by the same check
taxify() runs once per session: by content id where both sides record
one, else by version. A backbone whose build differs from the one the
manifest serves is replaced with the current release; one that is already
current is left as it is. A build pinned by taxify_pin(),
taxify_restore() or taxify_download(content_id = ) is never refreshed,
and a message says so; taxify_pin(backbone, pin = FALSE) releases it. With
options(taxify.offline = TRUE) nothing is compared and installed backbones
are kept.
Invisibly, the backbones now installed (those that downloaded successfully, or were already on disk), in priority order. A backbone whose refresh failed stays in the result with a warning, since its previous build is still usable.
list_backbones() for the full set with sizes, taxify().
## Not run: # Pre-install a marine-focused set before matching: install_backbones(c("col", "worms")) ## End(Not run)## Not run: # Pre-install a marine-focused set before matching: install_backbones(c("col", "worms")) ## End(Not run)
Returns every taxonomic backbone taxify() can match against, its taxonomic
scope, and (once the manifest is reachable) its current version, name count,
download size, and whether it is already installed locally. The counterpart to
list_enrichments() for the backbone side.
list_backbones(verbose = TRUE)list_backbones(verbose = TRUE)
verbose |
Logical. Default |
A data.frame with columns: name, title (the source's full
name), scope, n_names, size_mb, version, source_date,
installed, code, source. code is the
nomenclature the backbone's names follow: "taxon" for the taxonomic
backbones, "syntaxon" for a backbone of vegetation units ("evc", the
EuroVegChecklist), which is matched only when named in
taxify(backbone = ). n_names, size_mb, and
version are NA for any backbone the manifest does not yet describe or
when the manifest cannot be fetched offline.
version is the release that packaged the backbone; source_date is the
date of the upstream data, which can be much earlier. The GBIF backbone is
the case that matters: GBIF froze it at 2023-08-28 and has said it will not
be updated again, so a current release tag there carries a treatment three
years older than the tag suggests. source_date is an ISO date, or
YYYY-MM / YYYY where the source dates its release no finer, and NA
for a backbone whose upstream date has not been recorded.
list_enrichments(), list_traits(), taxify_databases().
## Not run: list_backbones() ## End(Not run)## Not run: list_backbones() ## End(Not run)
Returns a summary of all published datasets available in the taxify manifest, including version, row count, whether the dataset is static, and which trait columns are provided.
list_enrichments(verbose = TRUE)list_enrichments(verbose = TRUE)
verbose |
Logical. Default |
A data.frame with columns: name, version, nrow, static,
trait_cols (comma-separated), and source_url.
## Not run: list_enrichments() ## End(Not run)## Not run: list_enrichments() ## End(Not run)
Returns the traits that add_trait() can attach across sources, with their
kind, canonical unit, and the number and names of contributing sources.
list_traits()list_traits()
A data.frame with one row per trait:
The trait name to pass to add_trait().
Human-readable label.
"numeric" or "categorical".
Canonical unit for numeric traits, NA for categorical.
Number of sources providing the trait.
Comma-separated source names.
list_traits()list_traits()
Returns the register row for the given genus, or NULL if not found.
Auto-loads the register on first call.
lookup_genus(genus)lookup_genus(genus)
genus |
Character scalar. The genus name to look up. |
A one-row data.frame, or NULL if the genus is not in the register
(including NA).
Resolves the names and reports the deepest Linnaean rank at which they all share one classification value: their most recent common ancestor in the backbone's hierarchy. Two congeners return their shared genus; two plants in different families return a shared order or class; unrelated taxa share only a kingdom (or nothing).
lowest_common(x, backbone = NULL, ..., verbose = TRUE)lowest_common(x, backbone = NULL, ..., verbose = TRUE)
x |
Character vector of names (two or more), or a |
backbone |
Backend passed to |
... |
Matching arguments passed to |
verbose |
Logical. Default |
A one-row data.frame with columns rank, name (the shared taxon),
and n_taxa (how many resolved names went into the comparison). rank and
name are NA when the taxa share nothing (e.g. different kingdoms, or
only one resolved).
class2tree(), add_classification(), taxify().
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) lowest_common(c("Quercus robur", "Quercus petraea")) options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) lowest_common(c("Quercus robur", "Quercus petraea")) options(old)
Decomposes each name into genus, specific epithet, infraspecific rank and
epithet, authorship, hybrid status, and any open-nomenclature qualifier,
without matching against a backbone. Where taxify() cleans a name and then
resolves it, parse_name() returns the cleaning step itself (the parts of
the name) for callers who need the decomposition rather than a match (the
role rgbif::name_parse() or gnparser fill). The same cleaning pipeline the
matcher uses drives the parse, so a name breaks apart the way it matches.
parse_name(x, code = c("taxon", "syntaxon"))parse_name(x, code = c("taxon", "syntaxon"))
x |
Character vector of taxonomic names. |
code |
Character. The nomenclature the names follow: |
For code = "taxon", a data.frame with one row per input name and
columns:
The original name as supplied.
The genus (first token), or a single-letter initial for an
abbreviated genus ("Q. robur"). NA for an unresolvable hybrid
formula.
The specific epithet, or NA for a bare genus.
The infraspecific rank marker ("subsp.", "var.",
"f.", ...) when the name has one, else NA.
The infraspecific epithet, else NA.
The authorship the name carries (trailing form, e.g.
"(L.) H.Karst."), or NA.
Any open-nomenclature / uncertainty qualifier ("cf.",
"aff.", "sp.", "agg.", "s.l.", ...), canonicalized, or NA.
Infraspecific rank markers are reported in infrasp_rank, not here.
Logical. Was a hybrid marker detected?
"nothogenus", "nothospecies", "formula", or NA.
"genus", "species", "infraspecies", "hybrid_formula",
or NA for an empty input.
The cleaned name used for matching (genus plus epithets
and any infraspecific rank marker in its canonical spelling, qualifiers
and authorship removed, hybrid sign dropped). NA for a hybrid formula,
which is not a single taxon.
For code = "syntaxon", a data.frame with one row per input name and
columns:
The original name as supplied.
A national or database code written in front of the name
("TDA - Arrhenatherion elatioris", "41BB03 - Tilio-Carpinetum"), or
NA.
The syntaxon name without author or annotations, the form
the matcher looks up. Where a record names several units, the most
specific rank-labelled one ("all. X, ord. Y"), else the first.
The author citation ("(Oberd. 1957) Passarge 1964"),
or NA.
The rank the name's suffix denotes: "class" (-etea),
"order" (-etalia), "alliance" (-ion), "suballiance" (-enion),
"association" (-etum), "subassociation" (a trailing -etosum),
"subclass", "suborder", or NA.
"?" for a doubtful assignment, "cf.", "s.l.",
"s.str.", or NA.
Nomenclatural annotations after the citation
("nom. inval. (5a)", "(syntax.syn.)", "(Regionalverband)"), or
NA.
taxify() to match a name; parse_name() exposes the same internal
cleaning pipeline the matcher runs.
parse_name(c("Quercus robur L.", "Poa annua var. annua", "Q. robur", "Pinus cf. sylvestris", "Salix alba x Salix fragilis")) parse_name(c("Caricenion gracilis (Neuhausl 1959) Oberd. et al. 1967", "TDA - Arrhenatherion elatioris", "Conioselinion tatarici Golub et al. 2003 nom. inval. (5a)"), code = "syntaxon")parse_name(c("Quercus robur L.", "Poa annua var. annua", "Q. robur", "Pinus cf. sylvestris", "Salix alba x Salix fragilis")) parse_name(c("Caricenion gracilis (Neuhausl 1959) Oberd. et al. 1967", "TDA - Arrhenatherion elatioris", "Conioselinion tatarici Golub et al. 2003 nom. inval. (5a)"), code = "syntaxon")
Classifies each name in a list against what a backbone currently accepts, so a
checklist assembled at one time can be checked against the taxonomy as it
stands now. Where taxify() returns the resolved match per name,
reconcile() adds the editorial verdict (unchanged, now a synonym, a
misspelling, ambiguous, or unresolved) and flags names that merge onto a
single accepted taxon.
reconcile(x, backbone = NULL, ..., verbose = TRUE)reconcile(x, backbone = NULL, ..., verbose = TRUE)
x |
Character vector of names (a checklist). |
backbone |
Character vector of backbone names or a |
... |
Matching arguments passed to |
verbose |
Logical. Default |
A data.frame with one row per input name, columns:
The name as supplied.
The name it resolves to now (NA if unresolved).
One of:
"unchanged" (resolves to itself, still accepted),
"synonym" (now a synonym of a different accepted name, including a
name the backbone keeps unplaced but resolves through its basionym),
"misspelling" (resolved by fuzzy/abbrev match to a corrected spelling),
"rank_fallback" (an infraspecific name the backbone does not carry;
accepted_name is the accepted name of its species),
"ambiguous" (a name the backbone files under several accepted taxa,
n_ids > 1, that does not resolve to itself as accepted;
accepted_name is the one it picked, and taxify_ids() lists the
others),
"unresolved" (no match).
Logical, from taxify().
The taxify() match type.
Distinct accepted taxa the backbone files the name under,
from taxify(). Above 1 on an "unchanged" row, the name is accepted
under its own spelling and a homonym record also exists.
Logical. TRUE when two or more input names resolve to this
same accepted name (a many-to-one collapse).
|-joined other input names sharing this accepted name,
or NA.
Backend that matched (NA if unresolved).
taxify(), taxify_ids() to expand the ambiguous rows,
synonyms().
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) # Quercus pedunculata is now a synonym of Quercus robur; "Quercus robus" is a # misspelling of it; a bad name is unresolved. reconcile(c("Quercus robur", "Quercus pedunculata", "Quercus robus", "Notagenus imaginus"), backbone = "wfo", verbose = FALSE) options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) # Quercus pedunculata is now a synonym of Quercus robur; "Quercus robus" is a # misspelling of it; a bad name is unresolved. reconcile(c("Quercus robur", "Quercus pedunculata", "Quercus robus", "Notagenus imaginus"), backbone = "wfo", verbose = FALSE) options(old)
The forward direction of comm2sci(): given a scientific name, return the
common name(s) it is known by. Reads the bundled common_names enrichment
(GBIF, NCBI, and Open Tree vernaculars) offline; the first call may trigger
the one-time download. Where add_common_names() attaches vernaculars to a
taxify() result as columns, sci2comm() takes bare names and returns the
long lookup table, one row per (name, vernacular). A name maps to many
common names (across languages and synonyms), so a query can carry several
rows.
sci2comm(x, lang = NULL, resolve = TRUE, backbone = NULL, ..., verbose = TRUE)sci2comm(x, lang = NULL, resolve = TRUE, backbone = NULL, ..., verbose = TRUE)
x |
Character vector of scientific names. |
lang |
Character. Restrict to one language: an ISO 639-1 code ( |
resolve |
Logical. When |
backbone |
Passed to |
... |
Matching arguments passed to |
verbose |
Logical. Default |
A data.frame with one row per (query, vernacular):
The scientific name as supplied.
The accepted name looked up (equals input_name when
resolve = FALSE or the input_name was already accepted).
A vernacular name.
Language tag (NA for NCBI/Open Tree).
Rank of the name among the taxon's names in that
language, 1 being the one most source records give (the name
add_common_names() reports).
A query with no vernacular contributes no rows.
comm2sci() for the reverse direction (common -> scientific),
add_common_names() to attach vernaculars to a taxify() result.
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) # The bundled example maps Quercus robur -> "example_common_name" (en + de) sci2comm("Quercus robur", resolve = FALSE) options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) # The bundled example maps Quercus robur -> "example_common_name" (en + de) sci2comm("Quercus robur", resolve = FALSE) options(old)
The reverse of the forward resolution taxify() does: each input name is
resolved to its accepted taxon, then every synonym that points to that
accepted taxon in the backbone is returned. Useful for auditing which
historical names collapse onto a current name.
synonyms(x, backbone = NULL, ..., verbose = TRUE)synonyms(x, backbone = NULL, ..., verbose = TRUE)
x |
Character vector of names (accepted names or synonyms; each is resolved to its accepted taxon first). |
backbone |
A single backbone name (e.g. |
... |
Matching arguments passed to |
verbose |
Logical. Default |
A data.frame with one row per (distinct input name, synonym); a name supplied more than once is reported once. Columns:
The queried name.
The accepted name the query resolved to.
A synonym of that accepted taxon.
Authorship of the synonym.
Rank of the synonym.
Backend ID of the synonym.
Backend used.
Names that resolve to an accepted taxon with no synonyms contribute no rows.
taxify() for the forward direction, children() to list the
accepted taxa within a genus or family.
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) # Amphibolurus vitticeps is a synonym of Pogona vitticeps synonyms("Pogona vitticeps", backbone = "reptiledb") options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) # Amphibolurus vitticeps is a synonym of Pogona vitticeps synonyms("Pogona vitticeps", backbone = "reptiledb") options(old)
Matches a vector of taxonomic names against locally stored Darwin Core backbone databases. Returns a data.frame with one row per input name containing the matched name, accepted name, taxonomic hierarchy, and match quality information.
taxify( x, backbone = NULL, fuzzy = TRUE, fuzzy_threshold = 0.2, fuzzy_method = c("dl", "levenshtein", "jw"), aggregates = c("preserve", "collapse"), region = NULL, coords = NULL, range = c("present", "native", "introduced"), kingdom = NULL, mode = c("fallback", "wide", "agreement"), verbose = TRUE )taxify( x, backbone = NULL, fuzzy = TRUE, fuzzy_threshold = 0.2, fuzzy_method = c("dl", "levenshtein", "jw"), aggregates = c("preserve", "collapse"), region = NULL, coords = NULL, range = c("present", "native", "introduced"), kingdom = NULL, mode = c("fallback", "wide", "agreement"), verbose = TRUE )
x |
Character vector of taxonomic names. |
backbone |
Character vector of backbone names (e.g., |
fuzzy |
Logical. Enable fuzzy matching for names that fail exact
match. Default |
fuzzy_threshold |
Numeric. Maximum allowed distance for fuzzy matches. Two modes depending on the value:
|
fuzzy_method |
Character. One of |
aggregates |
Character. How to treat species aggregates (names with an
|
region |
Region(s) to constrain fuzzy matching to, or |
coords |
Coordinates to constrain fuzzy matching to, mapped to region
codes by point-in-polygon and unioned with |
range |
Character. Which range statuses count as in-region when |
kingdom |
Character. Restrict matches to one or more kingdoms, to
disambiguate a name shared across kingdoms (a Prunella that is both a bird
and a plant, an Oenanthe that is both). |
mode |
Character. How to combine results when
|
verbose |
Logical. Print progress messages. Default |
By default taxify() matches against every installed backbone, tried in
priority order as a fallback chain (the COL syntheses, then the domain
authorities, then the broad aggregators). The chain is staged by match
quality: every backbone
is asked for an exact match first, and only the names still unresolved go
round again for a fuzzy one. A name is therefore resolved by the
highest-priority backbone that matches it at the best quality any backbone
reaches, so a near neighbour in an early backbone does not settle a name a
later backbone holds exactly. Names matched earlier are not re-matched later.
On a fresh setup with nothing installed yet, the first call downloads a
default set (COL, GBIF, ITIS) once; pre-install a different set with
install_backbones(). Name a backbone (or several) explicitly to match only
against that one, or those in that order.
A data.frame with one row per input name and the following columns:
The original name as provided.
Full name in the backbone that matched. For an
unresolved hybrid formula (match_type = "hybrid_formula") it holds the
input-parent cross (e.g. "Salix alba x Salix fragilis") when both
parents resolve, else NA.
Resolved accepted name (equals matched_name
if not a synonym). For a hybrid formula it holds the accepted-parent
cross (both parents resolved), else NA.
Backend-specific ID of the matched name.
ID of the accepted name.
Taxonomic rank (species, subspecies, genus, etc.).
Family name.
Genus name.
Specific epithet.
Authorship of the matched name.
Authorship of the accepted name. For a synonym
this is the author of the resolved accepted name, not the synonym's own
author, so accepted_name and accepted_authorship together form the
accepted name's full citation.
Logical. Does the matched name resolve to a different
accepted taxon? TRUE for a synonym record, and for an unplaced record
resolved through its basionym (match_type = "basionym").
The matched record's own status as the backbone
writes it ("ACCEPTED", "SYNONYM", WFO's "UNCHECKED", COL's
"PROVISIONALLY ACCEPTED", ...), so a name the backbone holds without
having placed it can be told from an accepted one. NA when nothing
matched.
Logical. Was a hybrid marker detected in the input?
"nothogenus" ("x Cupressocyparis leylandii"),
"nothospecies" ("Quercus x hispanica"), "formula"
("Salix alba x Salix fragilis"), or NA for a non-hybrid. Nothogenus
and nothospecies resolve to a single backbone taxon in the usual columns.
A formula resolves that way only where the backbone stores the cross;
otherwise match_type is "hybrid_formula", the ID, rank and
classification columns are NA, and matched_name / accepted_name
name the cross by its parents when both parents resolve. The parent
binomials, and their accepted names, are added on demand by
add_hybrid_info().
Canonical taxonomic qualifier found in the input name
("cf.", "aff.", "agg.", "s.l.", "s.str.", "sp.", ...), or
NA. Spelling variants are folded to one token ("aggr.", "agg" and
"sensu lato" all map to "agg."/"s.l.").
"genus" when the qualifier leads the name and
qualifies the whole name (e.g. "Cf. Pinus sylvestris"), "species"
when it qualifies the species (inline cf. or trailing agg.), NA
when there is no qualifier.
Logical. For an aggregate query under
aggregates = "preserve": FALSE when it resolved to the backbone's
dedicated aggregate taxon, TRUE when no such taxon existed and it fell
back to the nominal binomial. NA for non-aggregate queries and under
aggregates = "collapse", where the collapse is explicit.
One of "exact", "exact_ci", "fuzzy", "abbrev"
(an abbreviated genus such as "Q. robur" resolved via genus initial
plus epithet), "hybrid_formula" (a two-parent cross the backbone does
not store; the ID, rank and classification columns are NA,
matched_name / accepted_name name the cross by its parents when both
resolve, and add_hybrid_info() materializes the parents into the
hybrid_parent_* columns), "rank_fallback" (an infraspecific name no
backbone carries, resolved to its species: the ID, rank and name columns
describe the species), "basionym" (a record the backbone keeps
unplaced, resolved to the taxon under which it places the record's
basionym: matched_name, taxon_id and taxonomic_status describe the
unplaced record, the accepted_* columns that taxon; needs a backbone
built with its basionym links), or "none".
Normalized string distance (0–1), NA if exact.
Integer. How many distinct
accepted taxa the backbone files the matched name under, across every
record of it (accepted, doubtful, unplaced, synonym). 1 for a name with
one accepted ID; more for a homonym or a name the backbone holds twice,
e.g. GBIF's Karwinskia mollis, kept both as the accepted Schltdl. name
and as a doubtful Standl. one. NA when nothing matched.
Character. Those accepted IDs, |-joined, the one in
accepted_id first (accepted_id itself for a name with one). Both
columns are in every result; printing leaves them out when no row has
more than one ID. List them with their
names, status and GBIF occurrence counts through taxify_ids().
Which backbone was used (e.g., "wfo", "col",
"gbif").
Backend name, version, and download date
(e.g., "wfo:2024-12 (2026-04-01)"). Useful for reproducibility.
Coarse kingdom-level group of the matched genus, from
the bundled genus register (used for cross-kingdom disambiguation); NA
when the genus is not in the register.
Broad taxonomic group of the matched genus, from the
genus register; NA when unavailable.
Life-form classification of the matched genus, from the
genus register's family-based lookup; NA when unavailable.
A backbone can file one name under several accepted taxa: a homonym (the same
binomial published by two authors), or a name held twice, once accepted and
once as a doubtful or duplicate record. accepted_id holds one of them;
accepted_ids and n_ids hold all of them, and taxify_ids() lists them one
row per ID with name, authorship, status and, for GBIF, occurrence count.
Which one accepted_id holds is decided by fuzzy distance first, then, on a
backbone that carries occurrence counts (GBIF), by whether any GBIF
occurrence records are filed under a key that keeps the name as its own
concept (accepted, doubtful or unplaced), then by taxonomic status
(accepted before doubtful or unplaced before synonym), rank and epithet, and
only then by the number of records, before the remaining tiebreaks. An empty
accepted key thus loses to a doubtful key of the name that has the data,
while a synonym record, whose accepted ID is another taxon, never displaces
the name's own key; it stays listed in accepted_ids.
When any input resolves to more than one accepted ID, taxify() issues one
warning per call, of class taxify_multiple_ids, naming the count and a few
examples. Silence it with options(taxify.warn_multiple_ids = FALSE) or
catch it by class.
Each backbone is an independent taxonomy, and they can legitimately disagree
on which name is accepted and which is a synonym. taxify() returns the
matched backbone's own current treatment; it does not reconcile backbones
against each other by voting (a consensus would regress toward the most
conservative treatment across backbones that copy one another). With the
default multi-backbone fallback, accepted_name is the pick of the
highest-priority backbone that matched at the best quality reached. To see
where backbones disagree, pass
mode = "wide" (or "agreement") for each backbone's accepted_name side by
side; to follow one authority, name a single backbone.
For example, the red and parma kangaroos: the GBIF Backbone Taxonomy
accepts Macropus rufus and Macropus parma, treating Osphranter rufus
and Notamacropus parma as synonyms of them, so
taxify("Osphranter rufus", backbone = "gbif") resolves to Macropus rufus.
The Catalogue of Life splits the genus and does the reverse, so
taxify("Macropus rufus", backbone = "col") resolves to Osphranter rufus.
Both are faithful to their source; the difference is in the backbones, not in
the matching.
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) # Match a few names taxify(c("Quercus robur", "Pinus sylvestris")) # Disable fuzzy matching taxify("Quercus robus", fuzzy = FALSE) # Constrain fuzzy candidates to a geographic region: a TDWG Level 3 code, # or a region name resolved via the bundled WGSRPD crosswalk taxify("Quercus robus", region = "BGM") taxify("Quercus robus", region = "Belgium") # Constrain by coordinates (downloads WGSRPD boundaries on first use) ## Not run: taxify("Quercus robus", coords = c(4.35, 50.85)) ## End(Not run) # Fallback chain: try WFO first, then COL for unmatched taxify(c("Quercus robur", "Panthera leo"), backbone = c("wfo", "col")) # Compare how two backbones resolve the same names, side by side taxify(c("Quercus robur", "Pinus sylvestris"), backbone = c("wfo", "col"), mode = "wide") options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) # Match a few names taxify(c("Quercus robur", "Pinus sylvestris")) # Disable fuzzy matching taxify("Quercus robus", fuzzy = FALSE) # Constrain fuzzy candidates to a geographic region: a TDWG Level 3 code, # or a region name resolved via the bundled WGSRPD crosswalk taxify("Quercus robus", region = "BGM") taxify("Quercus robus", region = "Belgium") # Constrain by coordinates (downloads WGSRPD boundaries on first use) ## Not run: taxify("Quercus robus", coords = c(4.35, 50.85)) ## End(Not run) # Fallback chain: try WFO first, then COL for unmatched taxify(c("Quercus robur", "Panthera leo"), backbone = c("wfo", "col")) # Compare how two backbones resolve the same names, side by side taxify(c("Quercus robur", "Pinus sylvestris"), backbone = c("wfo", "col"), mode = "wide") options(old)
Builds the backbone .vtr for a backend from its upstream Darwin Core source,
delegating to the sibling taxifydb package (which must be installed). This
is the from-source path, for rebuilding a backbone locally.
taxify_build(backend, dest = NULL, verbose = TRUE, ...)taxify_build(backend, dest = NULL, verbose = TRUE, ...)
backend |
A |
dest |
Character. Destination directory. Defaults to
|
verbose |
Logical. Print progress messages. |
... |
Additional arguments passed to methods. |
Everyday use does not need this: taxify() auto-downloads the pre-built
.vtr on first use, and taxify_download() fetches a pre-built backbone
directly without taxifydb.
The path to the .vtr file (invisibly).
taxify_download() to fetch a pre-built backbone, taxify()
which downloads on first use.
Rebuilds genus_register.vtr and backend_coverage.vtr locally instead of
downloading the published pair. The build itself lives in taxifydb, which
resolves every backbone in the register's fixed backbone set and can take
well over an hour; the download takes seconds and yields the same file, so
this is an escape hatch rather than the normal route.
taxify_build_register(verbose = TRUE)taxify_build_register(verbose = TRUE)
verbose |
Logical. Print progress messages. Default |
taxify_download("register") fetches the published pair.
Path to genus_register.vtr (invisibly).
taxify_load_register() to load it into memory,
taxify_register_coverage() to query backbone coverage for a genus.
Removes all loaded backbone handles from memory. The next call to
taxify() will re-load from disk.
taxify_clear_cache()taxify_clear_cache()
No return value, called for side effects.
Returns the directory where taxify stores downloaded backbone and
enrichment .vtr files. By default this is the platform-appropriate
per-user cache returned by tools::R_user_dir() (available since R 4.0).
taxify_data_dir()taxify_data_dir()
The location can be overridden, in order of precedence, by the
taxify.data_dir option (getOption("taxify.data_dir")) or the
TAXIFY_DATA_DIR environment variable. This is useful to point taxify at
a shared cache, or at the small bundled example database returned by
taxify_example_data().
Character string. Path to the data directory.
Stacks the taxonomic backbones (from list_backbones()) and the trait/status
enrichments (from list_enrichments()) into a single frame with a type
column, so a new user can see the full breadth in one call rather than needing
to know three separate discovery verbs. The cross-source trait vocabulary is
summarised in the message footer; browse it with list_traits().
taxify_databases(verbose = TRUE)taxify_databases(verbose = TRUE)
verbose |
Logical. When |
A data.frame with columns: type ("backbone" or "enrichment"),
name, scope (taxonomic scope for backbones; provided trait columns for
enrichments), n_rows, version, source_date (the date of the upstream
data, where recorded, which can be much earlier than the release version
that packaged it), installed, source.
list_backbones(), list_enrichments(), list_traits().
## Not run: taxify_databases() ## End(Not run)## Not run: taxify_databases() ## End(Not run)
Downloads a pre-built .vtr backbone from GitHub Releases using the taxify
manifest. This needs no build tools and does not require taxifydb; it is the
fast path taxify() uses internally on first use. Call it directly to
pre-fetch backbones before an offline session. Progress is always shown; no
prompts are shown, so calling this function is consent.
taxify_download( backbone = "wfo", version = "latest", content_id = NULL, verbose = TRUE )taxify_download( backbone = "wfo", version = "latest", content_id = NULL, verbose = TRUE )
backbone |
Character. A backbone name (e.g. |
version |
Character. |
content_id |
Character or |
verbose |
Logical. Default |
If no pre-built .vtr is available for a backbone, it falls back to building
from source via taxify_build() (which requires taxifydb).
The path(s) to the downloaded .vtr file(s) (invisibly).
taxify_build() to build a backbone from source via taxifydb,
taxify_download_enrichment() for published datasets, taxify_store() for
the builds already on disk.
Downloads pre-built enrichment .vtr files from the taxify manifest.
taxify_download_enrichment( enrichment, version = "latest", content_id = NULL, verbose = TRUE )taxify_download_enrichment( enrichment, version = "latest", content_id = NULL, verbose = TRUE )
enrichment |
Character. One or more enrichment names (e.g.,
|
version |
Character. |
content_id |
Character or |
verbose |
Logical. Default |
Available enrichments:
IUCN conservation status (LC/NT/VU/EN/CR/EW/EX)
GRIIS invasive species status by country
Zanne et al. 2014 woody/herbaceous classification
WCVP native range by TDWG botanical region
EIVE 1.0 ecological indicator values (European plants)
Diaz et al. 2022 seed mass and plant height
EltonTraits 1.0 diet and foraging (birds + mammals)
AVONET bird morphology and migration
PanTHERIA mammal life-history traits
GBIF vernacular names (multi-language)
AmphiBIO amphibian life-history and ecological traits
LEDA Traitbase NW European plant traits (Kleyer et al. 2008)
The path(s) to the downloaded .vtr file(s) (invisibly).
taxify_store() for the builds already on disk, taxify_restore()
to reinstall everything a lockfile pins.
taxify ships a tiny example database (a handful of species per backbone plus matching enrichment tables) so that examples and quick experiments run offline, without downloading the full multi-million-row backbones.
taxify_example_data()taxify_example_data()
Point taxify at it for the current session by setting the
taxify.data_dir option:
old <- options(taxify.data_dir = taxify_example_data())
taxify("Quercus robur") |> add_zanne()
options(old) # restore the real data directory
The example database is read-only and covers only the species used in the package examples; use the full downloaded backbones for real work.
Character string. Path to the bundled example database directory,
or "" if it is not installed.
taxify() returns one accepted ID per name, and, when any name has several,
records in accepted_ids every accepted taxon the backbone files the name
under: a homonym published
by two authors, or a name held twice, once accepted and once as a doubtful or
duplicate record. This verb lays those out one row per (name, accepted ID),
resolved against the backbone, with the ID taxify() picked marked. On the
GBIF backbone each ID carries its occurrence count, so the IDs to request
occurrence data with can be read off directly.
taxify_ids(x, verbose = TRUE)taxify_ids(x, verbose = TRUE)
x |
A |
verbose |
Logical. Default |
A data.frame with one row per (matched input row, accepted ID), in
input order and, within a name, in the order of accepted_ids (the pick
first):
The queried name.
Backbone that matched the name.
An accepted ID the name resolves to.
The legacy GBIF taxon key(s) of that taxon, the keys GBIF
serves occurrence records for: the ID itself on the gbif backbone, and
on a backbone whose build carries a crosswalk (COL XR) the
|-delimited set of GBIF keys for the same name, several when GBIF
files it under more than one. NA on a backbone with no crosswalk.
The name of that accepted taxon.
Its authorship.
Its rank.
Its status in the backbone ("ACCEPTED", GBIF's
"DOUBTFUL", WFO's "UNCHECKED", ...).
Its family.
GBIF occurrence records under this ID, including
those of its synonyms and descendants (what a GBIF download by this key
returns), as counted when the backbone was built. NA on a backbone
without counts, and for an ID whose count was not taken.
Logical. Is this the accepted_id taxify() reported?
What the ID is to the queried name: "pick" (the
accepted_id taxify() reported), "same_name" (another record of the
same taxon, or a record keeping the queried name as its own concept, as
GBIF's doubtful homonym records of Pinus sylvestris do) or
"other_taxon" (the accepted taxon of a synonym record under another
author, a different species: GBIF files Absinthium vulgare Dulac under
Artemisia vulgaris subsp. vulgaris while the pick, Lam., goes to
A. absinthium).
What decided the pick over the name's other accepted
IDs, the same on every row of a name: "status", "priority"
(publication year), "occurrences", "validity", "fuzzy", or "id"
when only the lowest taxon ID separated them, which settles nothing
about the taxon the name denotes; "authorship", "basionym" or
"kingdom" when the input's author, the record's basionym link or the
kingdom argument of taxify() moved the pick. NA
for a name with one ID.
Unmatched names contribute no rows.
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify(c("Quercus robur", "Pinus sylvestris")) |> taxify_ids() options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) taxify(c("Quercus robur", "Pinus sylvestris")) |> taxify_ids() options(old)
Reads genus_register.vtr and caches it as a data.frame in
.taxify_env$register, downloading it on first use. Subsequent calls reuse
the cached version unless force = TRUE.
taxify_load_register(force = FALSE, verbose = TRUE)taxify_load_register(force = FALSE, verbose = TRUE)
force |
Logical. If |
verbose |
Logical. Print progress messages. Default |
The register contains one row per genus with columns genus, kingdom,
phylum, class, order, family, kingdom_group, taxon_group and
life_form.
The register data.frame (invisibly).
Writes a machine-readable lockfile pinning which backbone and enrichment
assets (name, version, and byte-identity, the content id) produced a
taxify() result. Where cite() prints prose citations, taxify_lock()
records the reproducible counterpart, so a manuscript's Methods can state
exactly what was matched against and taxify_restore() can later verify an
install still matches.
taxify_lock(x = NULL, file = NULL, verbose = TRUE)taxify_lock(x = NULL, file = NULL, verbose = TRUE)
x |
A |
file |
Optional path to write the lockfile to (JSON). When |
verbose |
Logical. Default |
A lock list (invisibly when file is written), with elements
taxify_version, created, r_version, backbones, and enrichments.
taxify_restore() to check an install against a lockfile, cite()
for prose citations.
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) res <- taxify("Quercus robur", backbone = "wfo", verbose = FALSE) lock <- taxify_lock(res) lock$backbones[[1]]$name options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) res <- taxify("Quercus robur", backbone = "wfo", verbose = FALSE) lock <- taxify_lock(res) lock$backbones[[1]]$name options(old)
Converts wide-format columns produced by grouped enrichments (e.g.,
invasive_status_AT, invasive_status_DE) back to long format with
one row per species x group combination.
taxify_long(x, cols = NULL, group_col = NULL, drop_na = FALSE)taxify_long(x, cols = NULL, group_col = NULL, drop_na = FALSE)
x |
A data.frame, typically a |
cols |
Character vector of base column names to reshape. These are
the column names without the group suffix (e.g., |
group_col |
Character. Name for the output group column.
If omitted, auto-detected from enrichment metadata (e.g.,
|
drop_na |
Logical. If |
When cols and group_col are omitted, taxify_long() reads the
reshape metadata attached by grouped enrichment functions
(add_griis(), add_alien_first_records(), add_wcvp(),
add_common_names()). If multiple grouped enrichments were applied,
all are reshaped together (they must share the same group column).
Column matching uses the explicit base names in cols to avoid ambiguity.
For example, given cols = c("alien_first_record", "alien_first_record_source"), the column alien_first_record_source_AT
is correctly matched to base alien_first_record_source (not
alien_first_record with suffix source_AT), because longer base names
are matched first.
If the columns in x exactly match cols (no suffixed variants), the
data is already in single-group format. In this case, the data.frame is
returned unchanged with group_col set to NA.
A data.frame in long format. All columns from x that are not
part of the reshape are preserved. The reshaped columns use their base
names (without suffix), and a new group_col column contains the
group code extracted from the suffix.
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) # Auto-detected: no cols or group_col needed taxify("Robinia pseudoacacia") |> add_alien_first_records(location = c("AT", "DE")) |> taxify_long() # Explicit: override auto-detection taxify("Robinia pseudoacacia") |> add_griis(country = c("AT", "DE")) |> taxify_long(cols = "invasive_status", group_col = "country") options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) # Auto-detected: no cols or group_col needed taxify("Robinia pseudoacacia") |> add_alien_first_records(location = c("AT", "DE")) |> taxify_long() # Explicit: override auto-detection taxify("Robinia pseudoacacia") |> add_griis(country = c("AT", "DE")) |> taxify_long(cols = "invasive_status", group_col = "country") options(old)
A pinned build stays active: the version check that taxify(),
install_backbones() and the add_<source>() functions run against the manifest leaves
it in place instead of replacing it with the current release. Pin the builds a
project was run against to keep a shared data directory from moving under it,
and release them when the project is done. The pin is recorded in the build's
meta.json together with its content id (the md5 of its .vtr, as
taxify_lock() records it), so a pinned build can also be named in a
lockfile.
taxify_pin(name, pin = TRUE, kind = NULL, verbose = TRUE)taxify_pin(name, pin = TRUE, kind = NULL, verbose = TRUE)
name |
Character vector of installed backbone and/or enrichment names. |
pin |
Logical. |
kind |
|
verbose |
Logical. Default |
Every name is checked before anything is written: when one is not installed,
or is installed as both a backbone and an enrichment and kind does not say
which, nothing is pinned.
taxify_restore() with install = TRUE pins every build matching a lockfile,
and a build fetched with taxify_download(content_id = ) or
taxify_download_enrichment(content_id = ) is pinned when it is activated.
A data.frame with one row per name: component, type, version,
content_id (the full id of the build pinned or released) and pinned.
taxify_restore() to pin the builds a lockfile records,
taxify_store() to list the builds on disk and whether each is pinned.
## Not run: taxify_pin(c("wfo", "col")) taxify_pin("iucn", kind = "enrichment") taxify_pin(c("wfo", "col"), pin = FALSE) ## End(Not run)## Not run: taxify_pin(c("wfo", "col")) taxify_pin("iucn", kind = "enrichment") taxify_pin(c("wfo", "col"), pin = FALSE) ## End(Not run)
Forces the next fetch_manifest() call to re-fetch from the network.
Useful after the maintainer updates the manifest between R sessions without
restarting R.
taxify_refresh_manifest()taxify_refresh_manifest()
No return value, called for side effects.
region=
Returns every region code and name the region argument of taxify()
resolves, across both vocabularies it accepts, optionally filtered by a
search term matched (case- and accent-insensitively) against the code and
all three level names.
taxify_regions(search = NULL, scheme = c("all", "wgsrpd", "meow"))taxify_regions(search = NULL, scheme = c("all", "wgsrpd", "meow"))
search |
Optional character string. If supplied, only regions whose code or name contains it are returned. |
scheme |
Which vocabulary to list: |
Botanical regions (scheme = "wgsrpd") come from the bundled WGSRPD (World
Geographical Scheme for Recording Plant Distributions) Level 3 crosswalk, and
are also the codes add_wcvp() uses. Marine regions (scheme = "meow") are
the Marine Ecoregions of the World, listed only when the marine_distribution
asset is installed, since that is also when region= resolves them. The two
schemes nest the same way, so they share the three name columns: a MEOW
ecoregion is the name, its province the level2_name, and its realm the
level1_name.
A data.frame with columns code, name, level2_name,
level1_name, and scheme, one row per region.
head(taxify_regions()) taxify_regions("belgium") taxify_regions("Europe")head(taxify_regions()) taxify_regions("belgium") taxify_regions("Europe")
Queries backend_coverage.vtr to determine which backbones contain the
given genus, along with the backbone version at time of indexing.
taxify_register_coverage(genus)taxify_register_coverage(genus)
genus |
Character scalar. The genus name to query. |
A data.frame with columns genus, backbone, version,
date_added. Returns a zero-row data.frame if the genus is not found
in any backbone.
Reads a lockfile written by taxify_lock() and reports, for each backbone
and enrichment it pins, whether the currently installed asset matches (by
version and byte-identity, the content id), has drifted, or is missing.
taxify_restore(file, install = FALSE, verbose = TRUE)taxify_restore(file, install = FALSE, verbose = TRUE)
file |
Path to a lockfile written by |
install |
Logical. |
verbose |
Logical. Default |
With install = TRUE it also fetches the exact build each row pins, from the
immutable copy published beside the rolling asset, and makes it the active
one: the recorded run is put back in place in a single call. The build each
pinned build replaces is kept on disk under its own content id, so restoring
a lockfile is reversible. Every build that matches the lock afterwards is
pinned, including one that already matched and needed no download, so the
next session's version check does not refresh it away from the lock. Release
a pin with taxify_pin().
A build published before taxifydb began uploading an immutable copy cannot be recovered (the re-cut replaced it in place), and its row keeps reporting drift after the install pass.
A data.frame with one row per pinned asset, columns: component,
type ("backbone"/"enrichment"), locked_version, installed_version,
locked_content_id and installed_content_id (short), and status
("ok", "version_drift", "content_drift", "missing", or
"unverified" when what the lock pinned cannot be compared against this
install).
With install = TRUE the statuses describe the install afterwards, a
restored column records which rows were fetched, and a pinned column
which rows are now pinned (every row whose status is "ok").
taxify_lock(), taxify_pin() to pin or release an installed
build without a lockfile, taxify_store() for the builds on disk,
taxify_download_enrichment() to fetch a single build by content id.
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) res <- taxify("Quercus robur", backbone = "wfo", verbose = FALSE) lock <- taxify_lock(res) taxify_restore(lock, verbose = FALSE) options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) res <- taxify("Quercus robur", backbone = "wfo", verbose = FALSE) lock <- taxify_lock(res) taxify_restore(lock, verbose = FALSE) options(old)
taxify keeps every build it has downloaded of an enrichment: the active one
under latest/, and each build it replaced in a directory named for that
build's content id (the md5 of its .vtr, the same string taxify_lock()
records). Backbones are listed the same way, though by default only the
active build of a backbone is kept (see taxify.keep_backbone_versions)
below.
taxify_store(asset = NULL)taxify_store(asset = NULL)
asset |
Character. One or more backbone or enrichment names to list.
|
Use this to see which pinned builds a lockfile could be restored to without a download.
A data.frame with one row per build on disk, columns: component,
type ("backbone"/"enrichment"), slot (the store directory:
"latest" for the active build, else its content id), active,
version, content_id, pinned, size_mb, downloaded_at.
taxify.keep_enrichment_versions (default TRUE) keeps the build an
enrichment refresh replaces; taxify.keep_backbone_versions (default
FALSE) does the same for backbones, off because a superseded backbone is
gigabytes. Restoring a pinned build archives the build it replaces either
way.
taxify_lock() to record a build, taxify_restore() to check or
reinstall one, taxify_download_enrichment() to fetch one by content id.
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) head(taxify_store()) options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) head(taxify_store()) options(old)
Prints the kind, canonical unit, and (for categorical traits) the shared
vocabulary of a trait, and returns a data.frame of the sources
add_trait() draws from: one row per source, with its enrichment, source
column, citation, and the harmonization note (unit conversion or vocabulary
mapping).
trait_info(trait)trait_info(trait)
trait |
Character. A single trait name; see |
A data.frame (invisibly-friendly) with columns source,
enrichment, column, citation, note (unit or vocabulary
harmonization), and caution (a method or definition difference from the
reference source, or NA). The header line (label, kind, unit, default
priority, vocabulary) is printed as a message.
trait_info("woodiness")trait_info("woodiness")
Returns the lineage above taxon (its genus, family, order, class, phylum,
and kingdom, for whichever of those ranks the backbone stores) as a tidy
frame with one row per ancestor rank. Where downstream() reaches down to
descendants, upstream() reaches up to ancestors; where add_classification()
attaches the ranks to an existing taxify() result, upstream() takes a bare
name. A synonym or misspelling is resolved to its accepted taxon first, so the
lineage returned is the accepted taxon's.
upstream(taxon, backbone = NULL, to = NULL, ..., verbose = TRUE)upstream(taxon, backbone = NULL, to = NULL, ..., verbose = TRUE)
taxon |
A single taxonomic name (a species, genus, or higher taxon; synonyms and typos are resolved first). |
backbone |
A single backbone name or a |
to |
Optional rank (or ranks) to restrict the output to, e.g.
|
... |
Matching arguments passed to |
verbose |
Logical. Default |
A data.frame with one row per ancestor rank, columns: input_name (the
name as supplied), accepted_name (what it resolved to), rank, name,
backbone, ordered kingdom -> genus. Empty when taxon does not resolve or
the backbone stores no ranks above it.
downstream() for descendants, add_classification() to attach the
ranks to a taxify() result, lowest_common().
# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) # The lineage above a species (reptiledb carries the full higher hierarchy) upstream("Naja naja", backbone = "reptiledb") # Just the family upstream("Naja naja", backbone = "reptiledb", to = "family") options(old)# Runs offline against the bundled example database. old <- options(taxify.data_dir = taxify_example_data()) # The lineage above a species (reptiledb carries the full higher hierarchy) upstream("Naja naja", backbone = "reptiledb") # Just the family upstream("Naja naja", backbone = "reptiledb", to = "family") options(old)