| Title: | Build Backbones and Enrichments for the 'taxify' Package |
|---|---|
| Description: | Build pipeline for the 'taxify' package. Downloads raw source data from official providers (WFO, COL, GBIF, ITIS, NCBI Taxonomy, Open Tree of Life, WoRMS, Euro+Med PlantBase, Index Fungorum, AlgaeBase, FishBase, SeaLifeBase, the Reptile Database, the World Checklist of Vascular Plants, and the Leipzig Catalogue of Vascular Plants) and a wide set of trait and conservation datasets, normalizes to a unified Darwin Core-like schema, and writes pre-compiled '.vtr' files that the 'taxify' runtime consumes. Separates build-time concerns (network access, parsing, schema normalization) from runtime concerns so that 'taxify' itself stays lean. |
| 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.1.23.9000 |
| Built: | 2026-10-12 06:26:21 UTC |
| Source: | https://github.com/gcol33/taxifydb |
Apply a binary delta to produce a new .vtr
apply_delta(old_path, delta_path, new_path)apply_delta(old_path, delta_path, new_path)
old_path |
Character. Path to the current local .vtr. |
delta_path |
Character. Path to the downloaded .xdelta file. |
new_path |
Character. Output path for the patched .vtr. |
The new path (invisibly), or NULL on failure.
TAXIFYDB_PUBLISH_RESUME=1 reuses whatever .vtr sits in an enrichment's
output directory instead of rebuilding it, which is what lets an interrupted
publish finish cheaply. It also means a .vtr left from an earlier source
release looks exactly like a current one: publishing it uploads stale data
and writes a manifest entry naming a source that build never read. The
meta.json sidecar records the URL and version the build actually used, so
that is what the registry is compared against.
assert_built_matches_registry(name, vtr_path)assert_built_matches_registry(name, vtr_path)
name |
Character. Enrichment name in the build registry. |
vtr_path |
Character. Path to the built |
TRUE, invisibly. Stops when the build and the registry disagree.
Marks df as carrying per-value provenance: its <col>_source columns hold
reference ids that resolve against references. build_enrichment() carries
the table through name resolution and build_enrichment_vtr() publishes it.
attach_references(df, references)attach_references(df, references)
df |
The parser's data.frame, keyed on |
references |
data.frame with a unique character |
df, with the table in its references attribute.
Build the AlgaeBase backbone .vtr
build_algaebase( output_dir = "output/algaebase", version = NULL, verbose = TRUE )build_algaebase( output_dir = "output/algaebase", version = NULL, verbose = TRUE )
output_dir |
Character. |
version |
Character or NULL. |
verbose |
Logical. |
Path to the .vtr file (invisibly).
Locates each backbone in the user's taxify data dir and writes a
{backend}_name_lookup.vtr alongside it.
build_all_name_lookups(backends = list_backends(), overwrite = FALSE)build_all_name_lookups(backends = list_backends(), overwrite = FALSE)
backends |
Character vector. Default: every taxify backbone
( |
overwrite |
Logical. Rebuild even if the lookup .vtr already exists. |
Character vector of paths to the built lookups.
Build the AviList backbone .vtr from source
build_avilist(output_dir = "output/avilist", version = NULL, verbose = TRUE)build_avilist(output_dir = "output/avilist", version = NULL, verbose = TRUE)
output_dir |
Character. Output directory. |
version |
Character or NULL. Defaults to the bundled AviList version. |
verbose |
Logical. |
Path to the .vtr file (invisibly).
.vtr file from sourceSingle entry point for backbone builds. Downloads the raw source,
normalizes to the unified schema, precomputes matching keys, and writes
the final .vtr with indexes and metadata sidecar.
build_backend(name, output_dir = NULL, version = NULL, verbose = TRUE)build_backend(name, output_dir = NULL, version = NULL, verbose = TRUE)
name |
Character. Backend identifier (e.g., "itis"). See
|
output_dir |
Character. Output directory. Default: |
version |
Character or NULL. Version string for the build. If |
verbose |
Logical. |
Path to the built .vtr file (invisibly).
For each backbone in register_backbones() (resolved via
resolve_register_backbone_paths()), extracts the genus list and writes a
long-format backend_coverage.vtr recording which genera are covered by
which backend and at what version/date.
build_backend_coverage( backbone_paths = NULL, output_dir = NULL, version = NULL, manifest_path = "manifest/manifest.json", verbose = TRUE )build_backend_coverage( backbone_paths = NULL, output_dir = NULL, version = NULL, manifest_path = "manifest/manifest.json", verbose = TRUE )
backbone_paths |
Named list/character vector or |
output_dir |
Character or |
version |
Character or |
manifest_path |
Character. Path to |
verbose |
Logical. Print progress messages. Default |
Path to backend_coverage.vtr (invisibly).
.vtr from its frozen matricesConvenience wrapper over build_enrichment() restricted to the per-taxon
assets rebuilt from published BETSI-derived matrices (see
list_betsi_recovery()). The heavy lifting – staging the frozen matrices,
the parse, cross-backbone name resolution, T-SITA + provenance metadata, the
.vtr write – is the shared enrichment pipeline; this only guards the name.
build_betsi_recovery(name, ...)build_betsi_recovery(name, ...)
name |
Character. A recovery enrichment name. |
... |
Passed to |
Path to the built .vtr (invisibly).
Also writes the SpeciesProfile.tsv (extinct/marine flags) as a separate
col_species_profile.vtr next to the main backbone, if present.
build_col(output_dir = "output/col", version = NULL, verbose = TRUE)build_col(output_dir = "output/col", version = NULL, verbose = TRUE)
output_dir |
Character. |
version |
Character or NULL. |
verbose |
Logical. |
Path to the .vtr file (invisibly).
Build the COL XR backbone .vtr
build_colxr( output_dir = "output/colxr", version = NULL, gbif_path = NULL, col_path = NULL, manifest_path = "manifest/manifest.json", verbose = TRUE )build_colxr( output_dir = "output/colxr", version = NULL, gbif_path = NULL, col_path = NULL, manifest_path = "manifest/manifest.json", verbose = TRUE )
output_dir |
Character. Output directory. |
version |
Character or NULL. The COL XR release version, resolved from
ChecklistBank when |
gbif_path |
Character or NULL. The |
col_path |
Character or NULL. The |
manifest_path |
Character. Path to |
verbose |
Logical. |
Path to the .vtr file (invisibly).
.vtr from sourceDownloads the raw source for an enrichment, parses it via the registered
parser, expands names across all 7 taxify backbones via
resolve_enrichment_names(), and writes a .vtr plus meta.json sidecar
via build_enrichment_vtr().
build_enrichment( name, output_dir = NULL, version = NULL, url = NULL, resolve_names = TRUE, strict_names = FALSE, verbose = TRUE )build_enrichment( name, output_dir = NULL, version = NULL, url = NULL, resolve_names = TRUE, strict_names = FALSE, verbose = TRUE )
name |
Character. Enrichment identifier. See |
output_dir |
Character or |
version |
Character or |
url |
Character or |
resolve_names |
Logical. Run |
strict_names |
Logical. Error when a backbone has no
|
verbose |
Logical. Default |
Path to the built .vtr file (invisibly).
Sorts by canonical_name, writes the .vtr, creates hash indexes on
canonical_name (and optionally a group column), and writes a
meta.json sidecar.
build_enrichment_vtr( df, vtr_path, name, version, source_url, source_doi = NULL, source_record = NULL, upstream_id = NULL, license = "unknown", attribution = NULL, group_col = NULL, species_col = NULL, static = TRUE, source_format = NULL, provenance = NULL, references = NULL, resolved_backbones = NULL, batch_size = 50000L )build_enrichment_vtr( df, vtr_path, name, version, source_url, source_doi = NULL, source_record = NULL, upstream_id = NULL, license = "unknown", attribution = NULL, group_col = NULL, species_col = NULL, static = TRUE, source_format = NULL, provenance = NULL, references = NULL, resolved_backbones = NULL, batch_size = 50000L )
df |
A data.frame with at least a |
vtr_path |
Character. Output path for the .vtr file. |
name |
Character. Enrichment identifier (e.g., "zanne"). |
version |
Character. Version string (e.g., "2026.04"). |
source_url |
Character. URL the source data was downloaded from. |
source_doi |
Character or NULL. DOI of the source dataset. |
source_record |
Character or NULL. The host record a download URL
belongs to, where neither the URL nor |
upstream_id |
Character or NULL. The identity the source host gives the
version this build read – a Zenodo record number, a Figshare or Dryad
version number, a |
license |
Character. License string (e.g., "CC0", "CC BY 4.0"). |
attribution |
Character. Human-readable attribution string. |
group_col |
Character or NULL. Column to index for group-based enrichments (e.g., "country_code", "tdwg_code", "lang"). |
species_col |
Character or NULL. Name of the source column the taxa were
keyed on, recorded for the runtime manifest. |
static |
Logical. Whether the enrichment is a frozen snapshot (the default) rather than one the runtime re-checks against a live source. Drives taxify's refresh gate (content-id for static, version for non-static). |
source_format |
Character or NULL. Raw source format (e.g. "csv", "xlsx", "zip"), recorded for the runtime manifest. |
provenance |
Named list or NULL. Per-column provenance: maps each trait
column to its provenance tier, recorded in |
references |
data.frame or NULL. The reference table behind the
enrichment's |
resolved_backbones |
Character vector or NULL. The backbones the cross-backbone name expansion actually reached. Recorded so an asset built against a partial backbone set is distinguishable afterwards from a complete one, which is what a bare warning at build time did not achieve. |
batch_size |
Integer. Row group size for vectra (default 50000). |
The path to the .vtr file (invisibly).
Build the Euro+Med backbone .vtr
build_euromed( output_dir = "output/euromed", version = NULL, local_dir = NULL, verbose = TRUE )build_euromed( output_dir = "output/euromed", version = NULL, local_dir = NULL, verbose = TRUE )
output_dir |
Character. |
version |
Character or NULL. |
local_dir |
Character or NULL. Local crawl snapshot directory (see
|
verbose |
Logical. |
Path to the .vtr file (invisibly).
Build the EuroVegChecklist syntaxon backbone .vtr
build_evc( output_dir = "output/evc", version = NULL, local_dir = NULL, verbose = TRUE )build_evc( output_dir = "output/evc", version = NULL, local_dir = NULL, verbose = TRUE )
output_dir |
Character. |
version |
Character or NULL. The EuroVegChecklist version the unit list carries (default the snapshot's). |
local_dir |
Character or NULL. Local crawl snapshot directory (see
|
verbose |
Logical. |
Path to the .vtr file (invisibly).
Build the FishBase backbone .vtr
build_fishbase(output_dir = "output/fishbase", version = NULL, verbose = TRUE)build_fishbase(output_dir = "output/fishbase", version = NULL, verbose = TRUE)
output_dir |
Character. |
version |
Character or NULL. |
verbose |
Logical. |
Path to the .vtr file (invisibly).
Build the Species Fungorum Plus backbone .vtr
build_fungorum(output_dir = "output/fungorum", version = NULL, verbose = TRUE)build_fungorum(output_dir = "output/fungorum", version = NULL, verbose = TRUE)
output_dir |
Character. |
version |
Character or NULL. |
verbose |
Logical. |
Path to the .vtr file (invisibly).
Build the GBIF backbone .vtr
build_gbif(output_dir = "output/gbif", version = NULL, verbose = TRUE)build_gbif(output_dir = "output/gbif", version = NULL, verbose = TRUE)
output_dir |
Character. |
version |
Character or NULL. |
verbose |
Logical. |
Path to the .vtr file (invisibly).
Collects the keys gbif_count_keys() selects from a built GBIF backbone,
counts their occurrence records, and writes them as a gzipped TSV for
release under gbif-occurrence-counts-<version>.
build_gbif_occurrence_counts(vtr_path, out_dir = "output/gbif", verbose = TRUE)build_gbif_occurrence_counts(vtr_path, out_dir = "output/gbif", verbose = TRUE)
vtr_path |
Character. Path to a built GBIF backbone |
out_dir |
Character. Output directory. |
verbose |
Logical. |
Path to the written .tsv.gz (invisibly).
Reads genus-rank rows from each of register_backbones() (resolved via
resolve_register_backbone_paths()), unions them, resolves classification
conflicts, normalizes non-standard kingdom names, assigns kingdom_group /
taxon_group / life_form (via assign_life_form()), and writes
genus_register.vtr.
build_genus_register( backbone_paths = NULL, output_dir = NULL, version = NULL, manifest_path = "manifest/manifest.json", verbose = TRUE )build_genus_register( backbone_paths = NULL, output_dir = NULL, version = NULL, manifest_path = "manifest/manifest.json", verbose = TRUE )
backbone_paths |
Named list/character vector or |
output_dir |
Character or |
version |
Character or |
manifest_path |
Character. Path to |
verbose |
Logical. Print progress messages. Default |
Every call unions the same fixed backbone set, so the built register is
reproducible: it does not depend on which backbones happen to be installed
on the machine running the build (contrast taxify's runtime
taxify_build_register(), which unions whichever backbones the caller has
installed).
Path to genus_register.vtr (invisibly).
Downloads the ITIS SQLite dump, normalizes it, precomputes matching keys, embeds synonym info, and writes the final .vtr with indexes.
build_itis(output_dir = "output/itis", version = NULL, verbose = TRUE)build_itis(output_dir = "output/itis", version = NULL, verbose = TRUE)
output_dir |
Character. Directory for the output .vtr. |
version |
Character or NULL. If NULL, the |
verbose |
Logical. |
Path to the .vtr file (invisibly).
Build the LCVP backbone .vtr from source
build_lcvp(output_dir = "output/lcvp", version = NULL, verbose = TRUE)build_lcvp(output_dir = "output/lcvp", version = NULL, verbose = TRUE)
output_dir |
Character. Output directory. |
version |
Character or NULL. Defaults to the tagged LCVP release the download is pinned to. |
verbose |
Logical. |
Path to the .vtr file (invisibly).
Build the LPSN backbone .vtr from source
build_lpsn(output_dir = "output/lpsn", version = NULL, verbose = TRUE)build_lpsn(output_dir = "output/lpsn", version = NULL, verbose = TRUE)
output_dir |
Character. Output directory. |
version |
Character or NULL. Defaults to the release ChecklistBank currently serves. |
verbose |
Logical. |
Path to the .vtr file (invisibly).
Build the Mammal Diversity Database backbone .vtr from source
build_mdd(output_dir = "output/mdd", version = NULL, verbose = TRUE)build_mdd(output_dir = "output/mdd", version = NULL, verbose = TRUE)
output_dir |
Character. Output directory. |
version |
Character or NULL. Defaults to the MDD version the downloaded
archive names in its species file ( |
verbose |
Logical. |
Path to the .vtr file (invisibly).
.vtr
Downloads the MEOW ecoregion GeoJSON snapshot (or reads a local copy),
parses it to a long-format vertex table, and writes meow.vtr with an index
on code and a metadata sidecar. taxify downloads this pre-built .vtr and
rebuilds the boundary geometry offline, so the runtime never fetches the
GeoJSON. The marine analogue of build_wgsrpd().
build_meow( output_dir = NULL, version = NULL, source_path = NULL, verbose = TRUE )build_meow( output_dir = NULL, version = NULL, source_path = NULL, verbose = TRUE )
output_dir |
Character. Output directory. Default: |
version |
Character or NULL. Version string. Defaults to the frozen snapshot's version. |
source_path |
Character or NULL. A local GeoJSON to parse instead of downloading (for offline builds and testing). |
verbose |
Logical. |
Path to the built .vtr (invisibly).
Build a name-lookup .vtr from a backbone .vtr
build_name_lookup(bb_path, out_path, verbose = TRUE)build_name_lookup(bb_path, out_path, verbose = TRUE)
bb_path |
Character. Backbone .vtr path. |
out_path |
Character. Lookup .vtr destination. |
verbose |
Logical. |
out_path (invisibly).
Build the NCBI backbone .vtr
build_ncbi(output_dir = "output/ncbi", version = NULL, verbose = TRUE)build_ncbi(output_dir = "output/ncbi", version = NULL, verbose = TRUE)
output_dir |
Character. |
version |
Character or NULL. |
verbose |
Logical. |
Path to the .vtr file (invisibly).
Build the OTT backbone .vtr
build_ott(output_dir = "output/ott", version = NULL, verbose = TRUE)build_ott(output_dir = "output/ott", version = NULL, verbose = TRUE)
output_dir |
Character. |
version |
Character or NULL. |
verbose |
Logical. |
Path to the .vtr file (invisibly).
Convenience wrapper that calls build_genus_register() and
build_backend_coverage() in sequence. Resolves every backbone's .vtr
exactly once (via resolve_register_backbone_paths(), downloading into
output/genus_register/_cache when needed) and passes the fully resolved
paths to both builders as backbone_paths, so a manifest-downloaded
backbone (several hundred MB each, ~5 GB across the set) is fetched once
for both artifacts rather than once per builder.
build_register( backbone_paths = NULL, version = NULL, manifest_path = "manifest/manifest.json", verbose = TRUE )build_register( backbone_paths = NULL, version = NULL, manifest_path = "manifest/manifest.json", verbose = TRUE )
backbone_paths |
Named list/character vector or |
version |
Character or |
manifest_path |
Character. Path to |
verbose |
Logical. Print progress messages. Default |
Named list with paths to genus_register.vtr and
backend_coverage.vtr (invisibly).
Build the Reptile Database backbone .vtr
build_reptiledb( output_dir = "output/reptiledb", version = NULL, verbose = TRUE )build_reptiledb( output_dir = "output/reptiledb", version = NULL, verbose = TRUE )
output_dir |
Character. |
version |
Character or NULL. |
verbose |
Logical. |
Path to the .vtr file (invisibly).
Build the SeaLifeBase backbone .vtr
build_sealifebase( output_dir = "output/sealifebase", version = NULL, verbose = TRUE )build_sealifebase( output_dir = "output/sealifebase", version = NULL, verbose = TRUE )
output_dir |
Character. |
version |
Character or NULL. |
verbose |
Logical. |
Path to the .vtr file (invisibly).
Build the Czech vegetation classification syntaxon backbone .vtr
build_vegcz( output_dir = "output/vegcz", version = NULL, local_dir = NULL, verbose = TRUE )build_vegcz( output_dir = "output/vegcz", version = NULL, local_dir = NULL, verbose = TRUE )
output_dir |
Character. |
version |
Character or NULL. Default the snapshot's. |
local_dir |
Character or NULL. Local crawl snapshot directory (see
|
verbose |
Logical. |
Path to the .vtr file (invisibly).
Sorts by genus (for zone-map pruning), writes the .vtr, creates hash indexes, and writes a metadata sidecar.
build_vtr( df, vtr_path, backend_name, version, source_url, source_date, batch_size = 50000L, block_col = NULL, extra = NULL )build_vtr( df, vtr_path, backend_name, version, source_url, source_date, batch_size = 50000L, block_col = NULL, extra = NULL )
df |
A precomputed backbone data.frame (from |
vtr_path |
Character. Output path for the .vtr file. |
backend_name |
Character. Backend identifier (e.g., "itis"). |
version |
Character. Version string. |
source_url |
Character. URL the source data was downloaded from. |
source_date |
Character. The date the source gives the release it was
built from ( |
batch_size |
Integer. Row group size for vectra (default 50000). |
block_col |
Character or NULL. The column the fuzzy pass blocks
candidates by, which the store is sorted and indexed on: |
extra |
Named character vector of further |
The path to the .vtr file (invisibly).
The streaming counterpart to build_vtr(), for a source too large to
assemble in memory. Rows arrive a chunk at a time from feed; the finished
store is identical to what build_vtr() would have written from the
concatenation of those chunks.
build_vtr_streamed( feed, vtr_path, backend_name, version, source_url, source_date, synonym_pattern = "SYNONYM", meta_extra = NULL, batch_size = 50000L, work_dir = NULL, verbose = TRUE )build_vtr_streamed( feed, vtr_path, backend_name, version, source_url, source_date, synonym_pattern = "SYNONYM", meta_extra = NULL, batch_size = 50000L, work_dir = NULL, verbose = TRUE )
feed |
A function of no arguments returning the next chunk of rows as a
normalized data.frame (the schema |
vtr_path |
Character. Output path for the .vtr file. |
backend_name |
Character. Backend identifier (e.g. |
version |
Character. Version string. |
source_url |
Character. URL the source data was downloaded from. |
source_date |
Character. The source's release date, as for
|
synonym_pattern |
Character. Regex matching the statuses that count as
a synonym, as passed to |
meta_extra |
Named character vector of further |
batch_size |
Integer. Row group size for vectra (default 50000). |
work_dir |
Character. Directory for the staging store. Defaults to a session temporary directory, removed on exit. |
verbose |
Logical. |
The path to the .vtr file (invisibly).
Build the WCVP backbone .vtr from source
build_wcvp(output_dir = "output/wcvp", version = NULL, verbose = TRUE)build_wcvp(output_dir = "output/wcvp", version = NULL, verbose = TRUE)
output_dir |
Character. Output directory. |
version |
Character or NULL. Defaults to the bundled WCVP snapshot tag. |
verbose |
Logical. |
Path to the .vtr file (invisibly).
Build the WFO backbone .vtr from source
build_wfo(output_dir = "output/wfo", version = NULL, verbose = TRUE)build_wfo(output_dir = "output/wfo", version = NULL, verbose = TRUE)
output_dir |
Character. Output directory. |
version |
Character or NULL. Defaults to the edition
|
verbose |
Logical. |
Path to the .vtr file (invisibly).
.vtr
Downloads the WGSRPD Level 3 GeoJSON (or reads a local copy), parses it to a
long-format vertex table, and writes wgsrpd.vtr with an index on code
and a metadata sidecar. taxify downloads this pre-built .vtr and rebuilds
the boundary geometry offline, so the runtime never fetches the GeoJSON.
build_wgsrpd( output_dir = NULL, version = NULL, source_path = NULL, verbose = TRUE )build_wgsrpd( output_dir = NULL, version = NULL, source_path = NULL, verbose = TRUE )
output_dir |
Character. Output directory. Default: |
version |
Character or NULL. Version string. Defaults to the current
|
source_path |
Character or NULL. A local GeoJSON to parse instead of downloading (for offline builds and testing). |
verbose |
Logical. |
Path to the built .vtr (invisibly).
Also writes the SpeciesProfile.tsv (habitat flags) as a separate
worms_species_profile.vtr next to the main backbone.
build_worms(output_dir = "output/worms", version = NULL, verbose = TRUE)build_worms(output_dir = "output/worms", version = NULL, verbose = TRUE)
output_dir |
Character. |
version |
Character or NULL. |
verbose |
Logical. |
Path to the .vtr file (invisibly).
Check all non-static enrichments in a manifest for version freshness
check_all_enrichment_versions(manifest_path = "manifest/manifest.json")check_all_enrichment_versions(manifest_path = "manifest/manifest.json")
manifest_path |
Character. Path to manifest.json. |
Data.frame with columns: name, source_version, built_id, upstream_id, upstream_version, outdated, check_url, note.
The resource is named by /resource/<id> in the URL, else in the source's
host record (a portal whose downloads go through its datastore API).
check_ckan_version(source_url, record = NULL)check_ckan_version(source_url, record = NULL)
source_url |
Character. CKAN resource download URL. |
record |
Character or NULL. CKAN resource URL, when |
Named list with id (the resource's last_modified stamp),
version, date, and url; NULL if the resource cannot be read.
For a host that serves a generated export with no version and no Last-Modified header (a PHP endpoint, a database export). The bytes are the only identity there is, so the probe downloads them; it is listed only for sources small enough to fetch weekly, and only where two downloads hash alike.
check_content_md5(source_url, record = NULL)check_content_md5(source_url, record = NULL)
source_url |
Character. File URL. |
record |
Unused. |
Named list with id (the md5), version (its first 8 characters),
and url; NULL if the file cannot be read.
A published article does not get new versions, it gets corrections and
retractions, which Crossref records against it as updated-by. A source
whose values come from an article is therefore checked by that list.
check_crossref_version(source_url, record = NULL)check_crossref_version(source_url, record = NULL)
source_url |
Character. |
record |
Character or NULL. The article DOI. |
Named list with id (the updating DOIs, or "none"), version,
date (the latest of publication and update), and url; NULL if
Crossref does not know the DOI.
For a host whose own pages give no version but whose DataCite record
carries one. The record's updated stamp moves with any metadata edit, so
as a date it errs late, never early.
check_datacite_version(source_url, record = NULL)check_datacite_version(source_url, record = NULL)
source_url |
Character. Download URL (unused beyond selecting this probe). |
record |
Character. The dataset DOI. |
Named list with id and version (DataCite's version), date,
and url; NULL if the record has no version.
DataONE system metadata links each object to the one that replaced it
(obsoletedBy), so following the chain from the object the URL names
reaches the newest version.
check_dataone_version(source_url, record = NULL)check_dataone_version(source_url, record = NULL)
source_url |
Character. DataONE member-node object URL
( |
record |
Unused. |
Named list with id (the newest identifier), version, date,
pinned (the identifier the URL names), and url; NULL if the system
metadata cannot be read.
The URL either is a Dataverse API call naming the dataset by
persistentId=doi:... or is the dataset DOI itself, in which case the
installation serving it is the host DataCite resolves the DOI to.
check_dataverse_version(source_url, record = NULL)check_dataverse_version(source_url, record = NULL)
source_url |
Character. Dataverse API URL or |
record |
Unused. |
Named list with id and version (major.minor), date, and
url; NULL if the versions cannot be read.
Check a Dryad dataset for the latest version
check_dryad_version(source_url, record = NULL)check_dryad_version(source_url, record = NULL)
source_url |
Character. Dryad download URL containing a DOI, or the
bare Dryad DOI ( |
record |
Unused; the URL names the dataset. |
Named list with id and version (both the newest version number),
date, and url; NULL if the dataset cannot be read.
An EDI (pasta.lternet.edu) data URL names a package revision
(<scope>/<identifier>/<revision>) and usually one data entity in it. An
entity keeps its id across revisions, so an entity URL is compared by the
entity's checksum in the revision it names and in the newest one: a
revision that changes only metadata or other tables leaves it current. A
URL naming the revision alone is compared by revision number.
check_edi_version(source_url, record = NULL)check_edi_version(source_url, record = NULL)
source_url |
Character. EDI package data URL. |
record |
Unused. |
PASTA has required an API key for every call since 2026-07-30, read here
from EDI_API_KEY as download_edi_file() reads it.
Named list with id and pinned (entity checksums, or revision
numbers), version (the newest revision), date (its publication date),
and url; NULL without a key or when PASTA cannot be read.
Freshness is decided by comparing the upstream identity the build read
against the one upstream carries now. Where the source URL pins a version,
that pinned identity is what the build read, whatever was recorded. Where
it floats, the build's identity comes from upstream_id, written into the
entry when the .vtr was built.
check_enrichment_source_version(entry, probe = probe_upstream_identity)check_enrichment_source_version(entry, probe = probe_upstream_identity)
entry |
List. Manifest enrichment entry with |
probe |
Function taking a URL and a host record and returning an
upstream identity. Defaults to |
A floating source with no recorded identity is still answerable when the
newest upstream version is older than the build: the entry's release tag
(latest, YYYY.MM) bounds the build date from below, and a build reads the
newest version there is, so the build read that version.
Where none of these holds the answer is NA, not a guess: the recorded
source_version is this package's own release string and the upstream
version is whatever the host counts in, so comparing the two answers a
different question than the one asked.
Named list with source_version, built_id, upstream_id,
upstream_version, outdated, check_url, and optionally note.
Check the GBIF backbone API for the latest update date
check_gbif_api_version(source_url, record = NULL)check_gbif_api_version(source_url, record = NULL)
source_url |
Character. (Unused; the GBIF backbone dataset ID is fixed.) |
record |
Unused. |
Named list with id (the dataset's modified timestamp), version
(that timestamp as YYYY.MM), date, and url; NULL if the dataset
cannot be read.
The GIFT API lists every database version; each description opens with the date the version was released.
check_gift_version(source_url, record = NULL)check_gift_version(source_url, record = NULL)
source_url |
Character. GIFT host URL. |
record |
Unused. |
Named list with id and version (the newest version), date,
and url; NULL if the versions cannot be read.
A raw.githubusercontent.com URL serves the file at the head of a branch,
so it pins nothing. The identity is the newest commit touching that path.
check_github_version(source_url, record = NULL)check_github_version(source_url, record = NULL)
source_url |
Character. |
record |
Unused; the URL names the file. |
Named list with id (the commit SHA), version (its short form),
date, and url; NULL if the commit cannot be read.
An IPT archive URL names its version (v=); the same URL without it serves
the newest, under a file name carrying that version.
check_ipt_version(source_url, record = NULL)check_ipt_version(source_url, record = NULL)
source_url |
Character. IPT |
record |
Unused. |
Named list with id and version (the newest version), date,
pinned (the version the URL names), and url; NULL if the archive
cannot be read.
Check the Kew Plant DNA C-values database for its newest release
check_kew_cvalues_version(source_url, record = NULL)check_kew_cvalues_version(source_url, record = NULL)
source_url |
Character. A |
record |
Unused. |
Named list with id and version (the release number), date
(the release month), and url; NULL if the release history cannot be
read.
For a host that serves a static file and says when it last changed. The
header stamp is kept whole as the identity and shortened to YYYY.MM only
for display: two files a fortnight apart share a month, and an identity that
cannot tell them apart reports a moved file as unchanged.
check_last_modified(source_url, record = NULL)check_last_modified(source_url, record = NULL)
source_url |
Character. File URL. |
record |
Unused. |
Named list with id (the Last-Modified stamp), version (that
stamp as YYYY.MM), date, and url; NULL if the header is absent.
LCVP is distributed as an R data package; its data version is the Version
field of the package DESCRIPTION on GitHub.
check_lcvp_version(source_url)check_lcvp_version(source_url)
source_url |
Character. LCVP |
Named list with version and url.
NCBI rewrites its rolling new_taxdump daily, and keeps one dump a month in
taxdump_archive/ as new_taxdump_<YYYY-MM-DD>.zip. A source pinned to an
archived dump compares its date against the newest one there.
check_ncbi_archive_version(source_url, record = NULL)check_ncbi_archive_version(source_url, record = NULL)
source_url |
Character. Archive URL naming its dump date. |
record |
Unused. |
Named list with id, version and date (the newest dump's
date), pinned (the date the URL names), and url; NULL if the archive
listing cannot be read.
Check the Open Tree Taxonomy for its newest release
check_ott_version(source_url, record = NULL)check_ott_version(source_url, record = NULL)
source_url |
Character. OTT archive URL naming its release
( |
record |
Unused. |
Named list with id and version (the newest release), pinned
(the release the URL names), and url; NULL if the listing cannot be
read.
A PANGAEA DOI names one dataset, which is replaced by a new DOI rather than edited; the metadata record states the data's last modification, its status, and any DataCite relation to a successor.
check_pangaea_version(source_url, record = NULL)check_pangaea_version(source_url, record = NULL)
source_url |
Character. |
record |
Unused. |
Named list with id (last modification, status and any successor),
version, date, and url; NULL if the record cannot be read.
Phaidra (University of Vienna) objects are immutable; a new version is a new
object listed under the old one's versions. The portal sits behind an
Anubis proof-of-work page, which .anubis_fetch() clears.
check_phaidra_version(source_url, record = NULL)check_phaidra_version(source_url, record = NULL)
source_url |
Character. Phaidra object URL ( |
record |
Unused. |
Named list with id (the newest object), version, date,
pinned (the object the URL names), and url; NULL if the object
cannot be read.
rfishbase reads FishBase and SeaLifeBase snapshots published as release folders of one Hugging Face dataset, and takes the newest by default.
check_rfishbase_version(source_url, record = NULL)check_rfishbase_version(source_url, record = NULL)
source_url |
Character. |
record |
Unused. |
Named list with id and version (the release label), date (the
dataset's last change, an upper bound on the release date), and url;
NULL if the releases cannot be read.
SEANOE updates a dataset in place under one DOI, adding the new files beside the old ones. The set of file names is therefore the dataset's identity: a new version shows up as a file the set did not have.
check_seanoe_version(source_url, record = NULL)check_seanoe_version(source_url, record = NULL)
source_url |
Character. SEANOE dataset URL ( |
record |
Unused. |
Named list with id (the sorted file names), version (the file
count), and url; NULL if the dataset cannot be read.
A snapshot URL (web.archive.org/web/<timestamp>id_/<original>) fixes one
capture of a page that may since have disappeared. Each capture carries a
digest of the bytes it holds, so the capture the URL names and the newest
capture of the same original compare by content: a re-capture of an
unchanged file is not a new version.
check_wayback_version(source_url, record = NULL)check_wayback_version(source_url, record = NULL)
source_url |
Character. Wayback snapshot URL. |
record |
Unused. |
Named list with id (the newest capture's digest), version (its
timestamp), date, pinned (the digest of the capture the URL names), and
url; NULL if the capture index cannot be read.
The database grows by datasets, each uploaded with a date and a record count, so their number, their records and the newest upload together say whether the export would read differently.
check_wst_version(source_url, record = NULL)check_wst_version(source_url, record = NULL)
source_url |
Character. A |
record |
Unused. |
Named list with id, version, date (the newest upload), and
url; NULL if the dataset list cannot be read.
A Zenodo record is immutable, so querying the pinned record reports the day
that record was published however many newer versions its concept has since
gained. The versions/latest endpoint resolves the pinned record to the
newest one in the same concept. A URL naming the concept record itself
floats: Zenodo serves its newest version, so it pins nothing.
check_zenodo_version(source_url, record = NULL)check_zenodo_version(source_url, record = NULL)
source_url |
Character. Zenodo record or file download URL. |
record |
Unused; the URL names the record. |
Where the URL names one file of the record, the identity is that file's
checksum, read from the pinned and the newest record alike: a new version
that only adds a metadata file leaves the data the build reads unchanged. A
file the newest record no longer carries reads as missing:<key>.
Named list with id, version, date, pinned (absent for a
concept record), and url; NULL if the record cannot be read.
COL XR keeps the Base Release's identifiers, so a usage's publication
reference can be read from the COL build by taxon_id. Only rows carrying a
reference are kept.
colxr_col_publications(col_path)colxr_col_publications(col_path)
col_path |
Path to a COL |
A data.frame of taxon_id, canonical_name, authorship,
name_published_in and year.
COL XR replaced the taxonomy behind GBIF.org, but GBIF serves occurrence
records only for the numeric keys of its legacy backbone. This reads the
gbif backbone and groups its usages by canonical name, rank and
authorship (see crosswalk_authorship()). GBIF files the records of a
synonym under its accepted taxon, so a synonym usage contributes its
accepted taxon's key. A name several GBIF usages share (a homonym, or one
name GBIF split itself) maps to the set of their keys, |-delimited in
ascending order.
colxr_gbif_crosswalk(gbif_path)colxr_gbif_crosswalk(gbif_path)
gbif_path |
Character. Path to the |
A colxr_gbif_crosswalk: the key sets grouped by full authorship
and by outer authorship, for colxr_gbif_lookup().
In order: the usage's full authorship against GBIF's, its outer authorship against GBIF's outer authorship, and, where GBIF records no authorship for the name, the name and rank alone. A GBIF usage that names a different author is a different name and is never matched.
colxr_gbif_lookup(crosswalk, canonical_name, authorship, taxon_rank)colxr_gbif_lookup(crosswalk, canonical_name, authorship, taxon_rank)
crosswalk |
|
canonical_name, authorship, taxon_rank
|
Character vectors of the COL XR usages. |
Character vector of |-delimited GBIF keys, NA where none.
Queries ChecklistBank for the most recently issued COL XR dataset whose
Darwin Core export can be downloaded. Each monthly release carries its own
dataset key, so the key is looked up rather than hard-coded. ChecklistBank
generates an export only when a logged-in account asks for one, so when the
newest release has none, one is requested with colxr_request_export().
When that cannot run (no GBIF_USER / GBIF_PWD) or does not finish, the
newest release with an export is built instead.
colxr_latest_release( verbose = TRUE, export_ready = colxr_export_ready, request_export = function(key) { colxr_request_export(key, verbose = verbose) } )colxr_latest_release( verbose = TRUE, export_ready = colxr_export_ready, request_export = function(key) { colxr_request_export(key, verbose = verbose) } )
verbose |
Logical. |
export_ready |
Function of a dataset key returning |
request_export |
Function of a dataset key that requests its export
and returns |
A list with key, alias, version and issued.
ChecklistBank generates a dataset's export only when a logged-in GBIF
account asks for one, so a release can be issued and never become
downloadable. This starts a DwCA export job with the account in
GBIF_USER / GBIF_PWD and polls it until it finishes.
colxr_request_export(key, poll = 30, timeout = 3600, verbose = TRUE)colxr_request_export(key, poll = 30, timeout = 3600, verbose = TRUE)
key |
Character. ChecklistBank dataset key. |
poll |
Seconds between status checks. |
timeout |
Seconds before giving up. |
verbose |
Logical. |
TRUE when the export finished, FALSE when no account is
configured or the job did not finish.
Count GBIF occurrence records per taxon key
count_gbif_occurrences( keys, batch_size = 200L, facet_limit = 50000L, verbose = TRUE )count_gbif_occurrences( keys, batch_size = 200L, facet_limit = 50000L, verbose = TRUE )
keys |
Character vector of GBIF taxon keys. |
batch_size |
Integer. Keys per request. |
facet_limit |
Integer. Facet entries per request; a batch whose facet comes back full is re-counted key by key. |
verbose |
Logical. |
A data.frame with taxon_id and n_occurrences.
Count rows in a .vtr file
count_vtr_rows(vtr_path)count_vtr_rows(vtr_path)
vtr_path |
Character. |
Integer.
Besides the patch, writes <delta_path>.base: one line holding the content
id (md5) of old_path. A patch applies only to the exact bytes it was cut
against, and a release tag does not identify those bytes (a re-cut reuses
it), so the manifest records this id as delta_from_content_id and the
runtime patches only a local build carrying it.
create_delta(old_path, new_path, delta_path)create_delta(old_path, new_path, delta_path)
old_path |
Character. Path to the previous-version .vtr. |
new_path |
Character. Path to the new-version .vtr. |
delta_path |
Character. Output path for the .xdelta file. |
The delta path (invisibly), or NULL if xdelta3 is unavailable.
build_vtr_streamed() a chunk at a timeReads a header once, then hands back successive blocks of rows, so a file larger than memory can be normalized and staged block by block.
delim_chunk_feed( path, normalize, chunk_rows = 500000L, sep = "\t", quote = "", encoding = "UTF-8", select = NULL, na_strings = c("", "NA"), col_names = NULL, file_encoding = NULL, verbose = TRUE )delim_chunk_feed( path, normalize, chunk_rows = 500000L, sep = "\t", quote = "", encoding = "UTF-8", select = NULL, na_strings = c("", "NA"), col_names = NULL, file_encoding = NULL, verbose = TRUE )
path |
Character. Path to the delimited file. |
normalize |
A function taking one raw chunk (a data.frame with the file's own column names) and returning it in the normalized schema. |
chunk_rows |
Integer. Rows to read per chunk. |
sep |
Character. Field separator. |
quote |
Character. Quoting character, or |
encoding |
Character. Passed to |
select |
Character vector of columns to read, or |
na_strings |
Character vector read as |
col_names |
Character vector naming the columns of a file that carries
no header row, in file order, or |
file_encoding |
Character or |
verbose |
Logical. |
quote, encoding and file_encoding must be set to whatever the
backbone's whole-file reader uses. They decide how the text is parsed, not
just how fast it is read: WoRMS ships its TSV with every field wrapped in
double quotes, so reading it with quoting disabled leaves the quote
characters inside the names and breaks every downstream join, while a source
carrying genuine embedded quotes in informal names needs quoting disabled to
keep them.
quote also decides how the file is cut. With quoting disabled a newline
always ends a record, so blocks are taken by row offset and
data.table::fread() reads each directly, which is the faster path and the
one the unquoted sources use.
With quoting enabled that stops holding: a field may contain a newline, and
then a line offset is not a record offset. WoRMS carries 4,626 newlines
inside quoted namePublishedIn fields, and every reader's row argument
counts lines – fread()'s skip does, and so does read.delim(nrows=)
through scan()'s nlines – so a line-offset read is 445 records adrift by
record 200,000 and silently repeats rows. A quoted source is therefore cut
only where the running count of quote characters is even, which is the one
place a record can end, and the number of records that implies is checked
against the number the parser returns.
Lines are taken at the byte level, split on LF alone. R's own line reader
recognizes a lone CR as a terminator as well, and WoRMS holds 59 of them
inside fields: read as text it manufactures 57 lines the file does not have
and drops 49 quote characters, which flips the parity and is why
utils::read.delim() gives up on that file partway through.
A field may also contain "", which RFC 4180 defines as one literal quote.
utils::read.delim() collapses it and fread() returns it doubled
(Rdatatable/data.table#1109); WFO has 4,117 such fields, and leaving them
doubled would put stray quote characters in the published values, which is
the defect worms-2026.07 was cut to fix. Rather than let the choice of reader
decide that, the blocks are parsed with fread() and the unescaping is done
here, so it holds whichever source is being read.
A function of no arguments suitable as the feed of
build_vtr_streamed().
A backbone that denormalizes its higher classification stores foreign keys
rather than names, so normalizing a row needs a name that lives in some other
row. GBIF is the case: kingdom, phylum, class, order and family all arrive as
*_key columns pointing at rows that the build then drops.
delim_fk_lookup( path, id_col, value_col, key_cols, chunk_rows = 1000000L, sep = "\t", quote = "", encoding = "UTF-8", na_strings = c("", "NA"), col_names = NULL, verbose = TRUE )delim_fk_lookup( path, id_col, value_col, key_cols, chunk_rows = 1000000L, sep = "\t", quote = "", encoding = "UTF-8", na_strings = c("", "NA"), col_names = NULL, verbose = TRUE )
path |
Character. Path to the delimited file. |
id_col |
Character. Column holding the row's own identifier. |
value_col |
Character. Column whose value the keys resolve to. |
key_cols |
Character vector of foreign-key columns. |
chunk_rows |
Integer. Rows to read per scan chunk. |
sep, quote, encoding, na_strings, col_names
|
As in |
verbose |
Logical. |
The whole id -> name map would be as large as the backbone, but only the ids
actually referenced are ever looked up, and those are the few thousand rows
at the ranks the keys point to. Two scans find them without holding the map:
the first collects the distinct keys, the second keeps the id/value pair
of each row a key names. What comes back is small enough to sit beside a
chunk, which makes the rest of the normalization row-local.
The result is exactly the lookup a whole-table self-join would produce; it is restricted by which ids are referenced, never by an assumption about the rank a key points at.
A named character vector of value, named by id.
Fetch all AlgaeBase records via /nameusage/search
download_algaebase(verbose = TRUE)download_algaebase(verbose = TRUE)
verbose |
Logical. |
A list of record objects (raw JSON list-of-lists).
Downloads url to dest_dir/source.zip (if not cached), extracts into
dest_dir/extracted/, and returns the first file matching pattern. If
pattern is NULL, returns the extraction directory itself.
download_and_unzip(url, dest_dir, pattern = NULL)download_and_unzip(url, dest_dir, pattern = NULL)
url |
Character. URL to a ZIP archive. |
dest_dir |
Character. Directory for download and extraction. |
pattern |
Character or |
Path to the matched file, or the extraction directory if pattern
is NULL.
Download the AviList extended checklist workbook
download_avilist(dest = tempdir(), verbose = TRUE)download_avilist(dest = tempdir(), verbose = TRUE)
dest |
Character. Destination directory. |
verbose |
Logical. |
Path to the downloaded .xlsx.
Downloads url into dest_dir/filename with a browser TLS impersonation
that passes Cloudflare's "Just a moment" challenge. A host running a
JavaScript challenge, which no impersonation can satisfy, is instead cleared
once in a visible Chrome window and the resulting cookies reused for 12h;
that rung needs the Python package nodriver. Cached: skips if the
destination exists and is non-empty.
download_cf_file(url, dest_dir, filename)download_cf_file(url, dest_dir, filename)
url |
Character. URL to download. |
dest_dir |
Character. Directory to save into. Created if missing. |
filename |
Character. Output filename. |
Path to the downloaded file.
Download and extract the COL DwC-A
download_col(dest = tempdir(), verbose = TRUE)download_col(dest = tempdir(), verbose = TRUE)
dest |
Character. Destination directory. |
verbose |
Logical. |
Path to the extracted COL directory.
Download and extract the COL XR Darwin Core Archive
download_colxr(dest = tempdir(), key = NULL, verbose = TRUE)download_colxr(dest = tempdir(), key = NULL, verbose = TRUE)
dest |
Character. Destination directory. |
key |
Character or NULL. ChecklistBank dataset key. Resolved from
|
verbose |
Logical. |
Path to the extracted TSV.
Downloads url into dest_dir/filename if the destination does not
already exist (or is empty). Follows redirects, sets a User-Agent header,
and optionally a Referer.
download_curl_file( url, dest_dir, filename, referer = NULL, user_agent = NULL, extra_headers = NULL, max_tries = 4L )download_curl_file( url, dest_dir, filename, referer = NULL, user_agent = NULL, extra_headers = NULL, max_tries = 4L )
url |
Character. URL to download. |
dest_dir |
Character. Directory to save into. Created if missing. |
filename |
Character. Output filename. |
referer |
Character or |
user_agent |
Character or |
extra_headers |
Named character vector or |
max_tries |
Integer. Download attempts before giving up. Large live exports (e.g. the World Spider Trait database) intermittently drop the TLS connection mid-transfer; each retry uses exponential backoff. |
Path to the downloaded file.
Resolves the newest version of a Dryad dataset DOI to a data file matching
file_pattern, then downloads it through .anubis_fetch(). Cached: skips the
download if dest_dir/filename already exists and is non-empty.
download_dryad_file(doi, dest_dir, filename, file_pattern = "\\.csv$")download_dryad_file(doi, dest_dir, filename, file_pattern = "\\.csv$")
doi |
Character. Dryad dataset DOI (e.g. |
dest_dir |
Character. Directory to save into. Created if missing. |
filename |
Character. Output filename. |
file_pattern |
Character. Regex to pick the file from the version's file list (matched against the file path, case-insensitive). |
Path to the downloaded file.
EDI has required authentication for all REST API access since 2026-07-30
(an anti-DoS/scraping measure; see edirepository.org/news/news-20260727.00).
Anonymous requests to pasta.lternet.edu now get a 403 ("Public Access is
not authorized"). This wraps download_curl_file() with EDI's documented
auth: an API Access Key appended as a ?key= query parameter (the
supported mechanism for "coded workflows, automated scripts, and other
integrations", per https://edirepository.org/resources/iam), read from
the EDI_API_KEY env var. EDI_EDI_TOKEN (a raw edi-token session JWT,
from a logged-in browser) is an interactive fallback – it expires in days,
so it is not suitable for a scheduled/CI rebuild.
download_edi_file(url, dest_dir, filename, max_tries = 4L)download_edi_file(url, dest_dir, filename, max_tries = 4L)
url |
Character. URL to download. |
dest_dir |
Character. Directory to save into. Created if missing. |
filename |
Character. Output filename. |
max_tries |
Integer. Download attempts before giving up. Large live exports (e.g. the World Spider Trait database) intermittently drop the TLS connection mid-transfer; each retry uses exponential backoff. |
Path to the downloaded file.
Fetches the crawler's NDJSON snapshot and node-path table from the release. If a local crawl directory already holds both files (the machine that ran the crawl), they are used directly.
download_euromed(dest = tempdir(), local_dir = NULL, verbose = TRUE)download_euromed(dest = tempdir(), local_dir = NULL, verbose = TRUE)
dest |
Character. Destination directory. |
local_dir |
Character or NULL. A local crawl output directory to use
instead of downloading (default |
verbose |
Logical. |
Named list with jsonl and nodes paths.
Fetches the unit list and the harvested synonymy from the
evc-snapshot-<version> release. A local crawl directory holding both
files (the machine that ran the crawl) is used directly.
download_evc(dest = tempdir(), local_dir = NULL, verbose = TRUE)download_evc(dest = tempdir(), local_dir = NULL, verbose = TRUE)
dest |
Character. Destination directory. |
local_dir |
Character or NULL. A local crawl output directory to use
instead of downloading (default |
verbose |
Logical. |
Named list with synonyms, units and synonyms_2016 paths.
Download and extract the Species Fungorum Plus ColDP archive
download_fungorum(dest = tempdir(), verbose = TRUE)download_fungorum(dest = tempdir(), verbose = TRUE)
dest |
Character. Destination directory. |
verbose |
Logical. |
Path to the directory containing the extracted ColDP files.
Download the GBIF backbone simple.txt.gz
download_gbif(dest = tempdir(), verbose = TRUE)download_gbif(dest = tempdir(), verbose = TRUE)
dest |
Character. Destination directory. |
verbose |
Logical. |
Path to the .gz file.
Pages through a GBIF API endpoint that uses offset + limit and an
endOfRecords flag. Returns a combined data.frame of $results payloads.
download_gbif_api_pages(base_url, params, limit = 1000L, max_pages = 100L)download_gbif_api_pages(base_url, params, limit = 1000L, max_pages = 100L)
base_url |
Character. GBIF API endpoint. |
params |
Named list. Query parameters (excluding |
limit |
Integer. Page size. |
max_pages |
Integer. Maximum pages to fetch. |
A data.frame of combined results. Empty data.frame if the endpoint returned no rows.
Download the published GBIF occurrence-count snapshot
download_gbif_occurrence_counts(dest = tempdir(), verbose = TRUE)download_gbif_occurrence_counts(dest = tempdir(), verbose = TRUE)
dest |
Character. Destination directory. |
verbose |
Logical. |
Path to the downloaded .tsv.gz.
The aggregate drives every trait; the full version is needed to repair
specific_root_area (see parse_groot()). The full download is best-effort:
if it fails, the aggregate SRA is used as-is.
download_groot(url, dest)download_groot(url, dest)
url |
Character. The aggregate ZIP URL (from the registry). |
dest |
Character. Download directory. |
Named character vector c(aggregate = <csv>, full = <csv or NA>).
Download and extract the ITIS SQLite database
download_itis(dest = tempdir(), verbose = TRUE)download_itis(dest = tempdir(), verbose = TRUE)
dest |
Character. Destination directory. |
verbose |
Logical. |
Path to the extracted SQLite database file.
tab_lcvp data fileDownload the LCVP tab_lcvp data file
download_lcvp(dest = tempdir(), verbose = TRUE)download_lcvp(dest = tempdir(), verbose = TRUE)
dest |
Character. Destination directory. |
verbose |
Logical. |
Path to the downloaded tab_lcvp.rda.
Download the LPSN ColDP archive from ChecklistBank
download_lpsn(dest = tempdir(), verbose = TRUE)download_lpsn(dest = tempdir(), verbose = TRUE)
dest |
Character. Destination directory. |
verbose |
Logical. |
Path to the directory holding the extracted NameUsage.tsv.
Download and unpack the Mammal Diversity Database archive
download_mdd(dest = tempdir(), verbose = TRUE)download_mdd(dest = tempdir(), verbose = TRUE)
dest |
Character. Destination directory. |
verbose |
Logical. |
Path to the directory holding the extracted CSVs.
Download the MEOW ecoregion GeoJSON snapshot
download_meow(dest = tempfile(fileext = ".geojson"), verbose = TRUE)download_meow(dest = tempfile(fileext = ".geojson"), verbose = TRUE)
dest |
Character. Output path for the downloaded GeoJSON. |
verbose |
Logical. |
The path to the downloaded GeoJSON (invisibly).
Download and extract NCBI taxdump
download_ncbi(dest = tempdir(), verbose = TRUE)download_ncbi(dest = tempdir(), verbose = TRUE)
dest |
Character. Destination directory. |
verbose |
Logical. |
Path to the extraction directory.
Download and extract OTT taxonomy
download_ott(dest = tempdir(), verbose = TRUE)download_ott(dest = tempdir(), verbose = TRUE)
dest |
Character. Destination directory. |
verbose |
Logical. |
Path to the extraction directory containing taxonomy.tsv.
Download the Reptile Database bulk files
download_reptiledb(dest = tempdir(), verbose = TRUE)download_reptiledb(dest = tempdir(), verbose = TRUE)
dest |
Character. Destination directory. |
verbose |
Logical. |
Named list with paths: taxa, synonyms, checklist.
Download the frozen Pladias vegetation snapshot
download_vegcz(dest = tempdir(), local_dir = NULL, verbose = TRUE)download_vegcz(dest = tempdir(), local_dir = NULL, verbose = TRUE)
dest |
Character. Destination directory. |
local_dir |
Character or NULL. A local crawl output directory to use
instead of downloading (default |
verbose |
Logical. |
Named list with synonyms and units paths.
Download and extract the WCVP names file
download_wcvp(dest = tempdir(), verbose = TRUE)download_wcvp(dest = tempdir(), verbose = TRUE)
dest |
Character. Destination directory. |
verbose |
Logical. |
Path to the extracted wcvp_names.csv.
Download and extract the WFO classification file
download_wfo(dest = tempdir(), verbose = TRUE, url = NULL)download_wfo(dest = tempdir(), verbose = TRUE, url = NULL)
dest |
Character. Destination directory. |
verbose |
Logical. |
url |
Character or NULL. Backbone archive URL; the newest edition's,
from |
Path to the extracted classification file.
Download the WGSRPD Level 3 GeoJSON
download_wgsrpd(dest = tempfile(fileext = ".geojson"), verbose = TRUE)download_wgsrpd(dest = tempfile(fileext = ".geojson"), verbose = TRUE)
dest |
Character. Output path for the downloaded GeoJSON. |
verbose |
Logical. |
The path to the downloaded GeoJSON (invisibly).
Wiley's supplement endpoint (/action/downloadSupplement) returns 403 to a
cold request: it requires session cookies set by first loading the article
page and an article Referer. The bundled cf_fetch.py wiley mode primes the
session and sends the correct headers through a browser TLS impersonation,
clearing both the Cloudflare tier and the cookie/Referer check. Cached: skips
if the destination exists and is non-empty.
download_wiley_supplement(article_url, doi, sup_file, dest_dir, filename)download_wiley_supplement(article_url, doi, sup_file, dest_dir, filename)
article_url |
Character. The article landing-page URL (used to prime the
session and as Referer), e.g. a |
doi |
Character. The article DOI. |
sup_file |
Character. The supplement file name, e.g.
|
dest_dir |
Character. Directory to save into. Created if missing. |
filename |
Character. Output filename. |
Path to the downloaded file.
Download and extract WoRMS DwC-A
download_worms(dest = tempdir(), verbose = TRUE)download_worms(dest = tempdir(), verbose = TRUE)
dest |
Character. Destination directory. |
verbose |
Logical. |
Path to the extracted DwC-A directory.
Same as build_enrichment() but returns the parsed data.frame instead of
writing a .vtr file. Useful when the runtime needs the raw data in
memory (e.g. emergency fallback wired into taxify).
enrichment_emergency_fallback(name, verbose = TRUE)enrichment_emergency_fallback(name, verbose = TRUE)
name |
Character. Enrichment identifier. |
verbose |
Logical. Default |
data.frame with canonical_name + trait columns.
The columns taxify's runtime exposes from an enrichment .vtr: every column
except the join keys (canonical_name, accepted_name, genus) and the
group column, which is surfaced through available_groups and the door's
group argument rather than as a trait. This is what a manifest entry's
trait_cols records.
enrichment_trait_cols(columns, group_col = NULL)enrichment_trait_cols(columns, group_col = NULL)
columns |
Character vector of |
group_col |
Character or |
Character vector of trait column names, in .vtr order.
Taxon keys whose occurrence count can decide a GBIF pick
gbif_count_keys(vtr_path)gbif_count_keys(vtr_path)
vtr_path |
Character. Path to a built GBIF backbone |
Character vector of taxon keys: every record sharing a matching key with a record of another accepted taxon, plus the accepted targets of those records.
The BETSI-derived code-keyed matrices (INRAE UU2FQT / UCYSLH, Bonfanti 2022)
encode a species as the first three letters of the genus and the first three
of the specific epithet, uppercased and joined by an underscore:
"Brachystomella parvula" becomes "BRA_PAR". Hyphens in the epithet are
dropped before the first three letters are taken. Returns NA for anything
that is not a capitalised Genus species binomial.
gen_spe(binomial)gen_spe(binomial)
binomial |
Character vector of |
Character vector of GEN_SPE codes, NA where the input is not a
capitalised Genus species binomial.
gen_spe(c("Brachystomella parvula", "Allacma gallica", "Onychiurus"))gen_spe(c("Brachystomella parvula", "Allacma gallica", "Onychiurus"))
A chunked reader seeks by row offset, and every seek into a .gz restarts
the decompression, so a gzipped source is expanded once up front instead.
gunzip_file(gz_path, out_path, verbose = TRUE)gunzip_file(gz_path, out_path, verbose = TRUE)
gz_path |
Character. Path to the |
out_path |
Character. Path to write the decompressed file to. |
verbose |
Logical. |
out_path, invisibly.
CKAN's elasticsearch-backed datastore caps offset at max_result_window
(10000); the helper pages the full table via the after (search_after)
cursor, through Cloudflare, writing one JSON record per line. Cached.
harvest_ckan_datastore(api_base, resource_id, dest_dir, filename)harvest_ckan_datastore(api_base, resource_id, dest_dir, filename)
api_base |
Character. CKAN action root, e.g.
|
resource_id |
Character. Datastore resource id. |
dest_dir |
Character. Directory to save into. Created if missing. |
filename |
Character. Output filename (a |
Path to the downloaded JSONL file.
Plazi republishes each marked-up paper as its own GBIF checklist dataset, so
a taxon's treatments are spread over hundreds of small archives rather than
one bulk file. Discovery is the union of two GBIF dataset-search filters
because neither is complete alone: taxonKey depends on GBIF having indexed
the dataset's taxonomic coverage, and the free-text query depends on the
paper's title or abstract naming the taxon. For class Collembola the two
return 210 and 489 datasets and their union is 508.
harvest_plazi_dwca(taxon_key, dest_dir, query = NULL, max_datasets = 20000L)harvest_plazi_dwca(taxon_key, dest_dir, query = NULL, max_datasets = 20000L)
taxon_key |
Integer. GBIF backbone key of the taxon (10713444 is class Collembola). |
dest_dir |
Character. Directory to cache the archives in. Created if missing. |
query |
Character or |
max_datasets |
Integer. Safety bound on the number of datasets. |
Each dataset is resolved to its DWC_ARCHIVE endpoint and cached as
<dataset key>.zip, so a re-run only fetches what is new.
Path to the directory holding the cached archives.
Check if xdelta3 is available on PATH
has_xdelta3()has_xdelta3()
Logical.
The verified TOKEN -> genus mapping for the bespoke genus abbreviations in
the INRAE UU2FQT / UCYSLH code-keyed matrices, read from
inst/extdata/betsi/inrae_genus_abbr.csv. Each token is confirmed by a named
Collembola species in COLTRAIT (Salmon et al. 2014) or the built reference
pool; unconfirmable tokens are omitted so resolve_betsi_codes() leaves them
unresolved. Suitable to pass as the genus_dict argument.
inrae_genus_dict()inrae_genus_dict()
Named character vector mapping token to genus.
The taxonomic backbones only. This is the set enrichment name resolution
unions over, so reference geometry (list_geometry()) is not part of it even
though build_backend() builds both.
list_backends()list_backends()
Character vector of backend identifiers.
The per-taxon assets rebuilt from published BETSI-derived matrices. Each is a
normal entry in the enrichment build registry; this lists the recovery subset
build_betsi_recovery() accepts.
list_betsi_recovery()list_betsi_recovery()
Character vector of recovery enrichment names.
build_betsi_recovery(), parse_betsi_recovery()
Candidate enrichment sources that taxifydb deliberately does not build
into a .vtr, record in manifest.json, or place in the cross-source trait
registry, because each source's own current licence permits citation and
personal/scientific use only, not third-party redistribution. Unlike the
scrape-only sources in list_scrape_only_enrichments() (which taxify still
reaches at runtime on the user's own machine), these have no runtime
accessor. The catalog records the verified licence decision so a source that
resurfaces is not re-evaluated from scratch; a source moves into the build
registry only if its live licence is relicensed to permit redistribution.
list_build_only_enrichments()list_build_only_enrichments()
A data.frame with columns name, source, organism_groups,
candidate_trait, source_url, license, access, reason,
attribution, and issue.
list_scrape_only_enrichments(), list_enrichments()
List available enrichment builders
list_enrichments()list_enrichments()
Character vector of enrichment identifiers.
Boundary polygons taxify reads for the region= / coords= constraint.
Published and versioned like a backbone, but they carry no taxonomic names.
list_geometry()list_geometry()
Character vector of geometry identifiers.
taxifydb builds no .vtr for these sources because they cannot be
redistributed. Pignatti's values originate in a copyrighted publication and
are accessed on demand by taxify's add_pignatti() through the TR8 package
(which ships a copy under its own licence). This returns the catalog of
those sources.
list_scrape_only_enrichments()list_scrape_only_enrichments()
A data.frame with columns name, tr8_db, taxify_fn, license,
and reason.
Renames source-specific columns to canonical names and ensures consistent types and formatting (uppercase ranks/statuses, trimmed whitespace, etc.).
normalize_backbone(df, col_map, extra_cols = NULL)normalize_backbone(df, col_map, extra_cols = NULL)
df |
The raw data.frame from a backend's download/parse step. |
col_map |
A named list mapping canonical names to source column names:
|
extra_cols |
Optional named list of additional columns to keep
( |
A data.frame with standardized column names and formatting.
Split out of read_colxr() so the streaming build can apply it to a chunk
at a time. Nothing here depends on rows outside the block.
normalize_colxr(df, gbif_crosswalk = NULL, publications = NULL, verbose = TRUE)normalize_colxr(df, gbif_crosswalk = NULL, publications = NULL, verbose = TRUE)
df |
A data.frame of raw COL XR rows, with the export's own column names. |
gbif_crosswalk |
A |
publications |
A |
verbose |
Logical. |
A normalized data.frame.
Split out of read_gbif() so the streaming build can apply it to a chunk at
a time. Everything here depends only on the row in hand once higher is
supplied, which is the whole reason that lookup is a separate argument: the
*_key columns point at rows anywhere in the file.
normalize_gbif(df, higher, counts = NULL, verbose = TRUE)normalize_gbif(df, higher, counts = NULL, verbose = TRUE)
df |
A data.frame of raw GBIF rows, named by .gbif_col_names. |
higher |
Named character vector of canonical names by id, from
|
counts |
Named numeric vector of occurrence counts by taxon key, from
|
verbose |
Logical. |
A normalized data.frame ready for precompute_backbone().
Split out of read_wcvp() so the streaming build can apply it to a chunk at
a time. Acceptance is read from a comparison of two columns of the same row,
so nothing here depends on rows outside the block.
normalize_wcvp(df, verbose = TRUE)normalize_wcvp(df, verbose = TRUE)
df |
A data.frame of raw WCVP rows. |
verbose |
Logical. |
A normalized data.frame ready for precompute_backbone().
Split out of read_wfo() so the streaming build can apply it to a chunk at a
time. Nothing here depends on rows outside the block.
normalize_wfo(df, verbose = TRUE)normalize_wfo(df, verbose = TRUE)
df |
A data.frame of raw WFO rows, with the file's own column names, decoded from UTF-8. |
verbose |
Logical. |
A normalized data.frame.
Split out of read_worms() so the streaming build can apply it to a chunk at
a time. Nothing here depends on rows outside the block.
normalize_worms(df, verbose = TRUE)normalize_worms(df, verbose = TRUE)
df |
A data.frame of raw WoRMS rows, with the archive's own column names. |
verbose |
Logical. |
A normalized data.frame.
Parse AlgaeTraits macroalgal traits (WoRMS ZIP export)
parse_algae_traits(path)parse_algae_traits(path)
path |
Character. Directory holding CSV/TXT/XLSX files extracted from the AlgaeTraits archive. |
data.frame with canonical_name + algae trait columns.
Reads the public dataset table and reduces it to one row per species x
location. The release's locations are non-overlapping: countries, and
islands or other parts of a country recorded as regions of their own. A
location that is a whole country is keyed on its ISO 3166-1 alpha-2 code and
a sub-national one on its own name (.seebens_location_key()), in the
location column; country_code carries the ISO code of the country every
location lies in, so a roll-up to countries is an explicit choice made on
that column. Folding the parts into their country would date the country's
first record from an island's: in v4.0 that moved 665 species x country
years earlier (Hawaii alone 337, by a median of 25 years) and credited 3,541
pairs to a country whose own location has no record of the species.
parse_alien_first_records(path)parse_alien_first_records(path)
path |
Character. Path to the |
Every location the source names must map. The map is keyed on wording, so a
release that renames a place would otherwise drop its records and return a
smaller table rather than an error: v4.0 alone renamed 24 locations, among
them "United States" to "United States of America", which is 8,050 records.
A name the map does not hold is therefore a hard error, and the entries that
resolve to no single country (a record spanning several, "USACanada") are
recorded in the map as NA so they read as known rather than missing.
Where a species has several records for one location the earliest year wins,
but a record asserting the species is present is preferred to one recording
it as absent, uncertain or captive whatever the years are, so the retained
row does not date a country's occurrence from a record denying it. That
record's own status is published beside its year as
alien_first_record_status, since the remaining columns are reduced over
every record for the pair and a status reduced that way would describe some
record other than the one the year came from. The same earliest-wins
reduction (.keep_earliest_first_record()) runs again after cross-backbone
name resolution, at the accepted-species grain, so synonyms collapsing onto
one concept take its earliest observed year rather than an arbitrary one.
The two convention markers (.alien_first_record_sentinels) are dropped to
NA here so neither can win that reduction or be served as a year.
data.frame with canonical_name + location + country_code + first-record cols.
Traits.csv from the Dryad deposit behind Chamberlain et al.'s study of
carabid occurrence along Alpine elevation gradients: 185 species recorded at
416 sites between 697 and 2840 m in the Italian Alps, semicolon-delimited.
parse_alpine_carabids(path)parse_alpine_carabids(path)
path |
Character. Path to the downloaded |
The widest European carabid trait block after the German table, and the one that reaches the Alpine fauna the lowland compilations miss. Its body sizes share the carabids.org ancestry every European carabid source has (23.9% exactly equal to the German table over 92 shared species), so agreement with those is not corroboration; it runs 1.03 against them, close enough to be the same quantity and far enough from 1.000 not to be a verbatim copy in the way the Eberswalde table is.
The wing column ships as bare letters with no legend, so the codes were read
off the data rather than assumed: crossed against the German table's words,
b is short-winged (16 of 18), m long-winged (50 of 55) and d dimorphic
(18 of 19), which is brachypterous, macropterous and dimorphic.
data.frame with canonical_name, body_length_mm, wing_morph.
One row per species across birds, mammals and reptiles. The dataset codes missing values as -999; these are converted to NA on every numeric trait.
parse_amniote(path)parse_amniote(path)
path |
Character. Path to |
data.frame with canonical_name + life-history traits.
Parse AmphiBIO amphibian traits (CSV from ZIP)
parse_amphibio(path)parse_amphibio(path)
path |
Character. Path to the AmphiBIO CSV. |
data.frame with canonical_name + trait columns.
Parse AnAge longevity and life-history traits (TSV from ZIP)
parse_anage(path)parse_anage(path)
path |
Character. Path to anage_*.txt. |
data.frame with canonical_name + AnAge trait columns.
Parse AnimalTraits observations CSV (aggregate to species medians)
parse_animaltraits(path)parse_animaltraits(path)
path |
Character. Path to observations.csv. |
data.frame with canonical_name + body_mass_kg + metabolic_rate_w.
Long-format fuzzy-coded traits (taxon x trait x category affinity); each trait is reduced to its dominant category per species, using the database's own category labels.
parse_arctic(path)parse_arctic(path)
path |
Path to the Arctic Traits CSV. |
data.frame with canonical_name + benthic traits.
Parse NW European Arthropod DwC-A (taxon + measurement + description)
parse_arthropod_traits(dir_path)parse_arthropod_traits(dir_path)
dir_path |
Character. Directory holding the DwC archive. |
data.frame with canonical_name + arthropod trait columns.
Reads the long traits.csv from the plain-text release and pivots a set of
high-coverage functional traits to one row per taxon, aggregating across all
records (numeric by median, categorical by mode). Numeric traits such as leaf
mass per area are recorded mostly at population/individual level, so records
of every entity type are aggregated up to the taxon.
parse_austraits(path)parse_austraits(path)
path |
Character. Path to the extracted release directory or to
|
Every trait column <col> has a <col>_source column naming the AusTraits
datasets (dataset_id) behind the value: for a categorical trait the
datasets whose records state the reported value, for a numeric trait every
dataset whose records enter the median. The ids resolve against the
reference table attached with attach_references(), built from the
release's methods.csv (each dataset's primary source citation) and
sources.bib (its DOI).
data.frame with canonical_name + plant traits.
Parse AVONET bird morphology XLSX
parse_avonet(path)parse_avonet(path)
path |
Character. Path to AVONET_BirdLife.xlsx. |
data.frame with canonical_name + morphology columns.
Reads the gzipped JSONL of full strain records, extracts phenotypic and growth-condition traits per strain, and aggregates to one row per species (categorical by mode, numeric by median). Temperature and pH prefer the optimum measurement, falling back to the growth measurement; ranges are reduced to their midpoint.
parse_bacdive(path)parse_bacdive(path)
path |
Character. Path to |
data.frame with canonical_name + microbial trait columns.
Reads the baseflor sheet of Julve's baseflor.xlsx, builds a clean
binomial canonical_name from the nomH/nomB/nomA columns, splits the
floraison flowering-period field into begin/end months, and recodes the
French categorical traits (pollination vector, dispersal mode, breeding
system, flower colour, fruit type, woody growth form) to English. Also keeps
the two Ellenberg-style axes absent from EIVE: continentality and salinity.
parse_baseflor(path)parse_baseflor(path)
path |
Character. Path to the downloaded |
Indicator values L/T/M/R/N are intentionally not emitted here (the
European-calibration EIVE enrichment already covers them); Raunkiaer life
form is left to the leda enrichment for the same flora; maximum vegetative
height is omitted because the source column is empty.
data.frame with canonical_name + 10 trait columns.
Long-format Darwin Core measurement table; reduced to one row per species.
verbatimAcceptedNameUsage carries authorship and subgenera, so the join key
is reduced to a clean binomial.
parse_bee_ostwald(path)parse_bee_ostwald(path)
path |
Path to the morphological dataset CSV. |
data.frame with canonical_name + bee morphometrics.
One row per species. The source is R write.table output (space-separated,
quoted strings, leading row-id column). Ellenberg-style indicator values use
"x" for indifferent, which is mapped to NA. The six one-hot substrate class
flags are also collapsed into a pipe-delimited substrate set
(e.g. "soil|rock|bark") over soil, rock, bark, wood,
living_plants and dung_carcass.
parse_bet(path)parse_bet(path)
path |
Character. Path to |
data.frame with canonical_name + bryophyte traits.
Reads the Zenodo BETSI body-length export and reduces its per-source
measurements to one row per Collembola species. betsi_body_length_mm is the
median of the recorded measurements (mm); betsi_body_length_min_mm /
betsi_body_length_max_mm bound them; betsi_body_length_n and
betsi_body_length_sources are the number of measurements and of distinct
literature sources behind the species' value.
parse_betsi_collembola_body_length(path)parse_betsi_collembola_body_length(path)
path |
Character. Path to the BETSI body-length |
data.frame with canonical_name and the betsi_body_length_*
columns, one row per species.
Reads the frozen matrices for the sources feeding enrichment and returns one
row per species. Fuzzy sources (species,trait,class,pct) are checked for the
fuzzy-coding invariant (each species-by-trait affinity block sums to 100,
tolerating +-1 from integer rounding) and pivoted to one numeric column per
<trait>__<modality> bin (0-100). Hard sources (one value per trait) are read
into one column per trait. Provenance is not a data column here; it is written
to meta.json from the descriptor by the build.
parse_betsi_recovery(enrichment, path)parse_betsi_recovery(enrichment, path)
enrichment |
Character. A per-taxon recovery enrichment name (see
|
path |
Character. Directory holding the source |
data.frame with canonical_name and the trait columns, one row per
species.
Per-region records (one row per species x marine region) reduced to species-level values (numeric by median, categorical by mode).
parse_beukhof(path)parse_beukhof(path)
path |
Path to the Beukhof trait xlsx. |
data.frame with canonical_name + marine-fish traits.
Like fishbase via rfishbase, BIEN is queried directly: a single bulk pull of
the selected traits across all species (one query per trait list), filtered
to public-access records, then pivoted to one row per species (numeric by
median, categorical by mode). The path argument is unused (kept for a
uniform parser interface). Curated numeric columns are checked against the
unit each BIEN record carries and converted to the unit in the column name
(leaf dry mass is recorded in g and written in mg).
parse_bien(path)parse_bien(path)
path |
Unused. |
data.frame with canonical_name + plant traits.
Reads the Data sheet (real header is the second physical row). Presence-coded columns (island, restricted-range) use a blank for absent, mapped to 0. Traits redundant with AVONET morphology are not carried. One row per species.
parse_birdbase(path)parse_birdbase(path)
path |
Character. Path to the BIRDBASE xlsx. |
data.frame with canonical_name + bird traits.
Genus-level ant traits with codes defined in the source headers; the clearly defined ones are mapped to their labels. Columns are read by position because the source header cells embed long code legends.
parse_blanchard(path)parse_blanchard(path)
path |
Path to the ant traits xlsx (header on row 3). |
data.frame with canonical_name (genus) + ant traits.
Long-format trait records reduced to one row per species. Numeric units follow the standardised BROT 2.0 conventions (seed mass mg, SLA mm2/mg, height m, leaf area mm2).
parse_brot(path, sources = file.path(dirname(path), "brot_sources.csv"))parse_brot(path, sources = file.path(dirname(path), "brot_sources.csv"))
path |
Path to BROT2_dat.csv. |
sources |
Path to BROT2_sou.csv. Defaults to |
Every trait column <col> has a <col>_source column naming the BROT
sources (SourceID) behind the value: for a categorical trait the sources
whose records state the reported value, for a numeric trait every source
whose records enter the median. The ids resolve against BROT's own sources
file (BROT2_sou.csv: ID, FullSource), attached with
attach_references().
data.frame with canonical_name + plant traits.
One row per moss, liverwort or hornwort taxon. Retained traits are the five Ellenberg indicator values (light, moisture, reaction, nitrogen, salt), and the source's life-form, plant-group (moss / liverwort / hornwort) and status codes (kept verbatim).
parse_bryoatt(path)parse_bryoatt(path)
path |
Path to |
data.frame with canonical_name + British/Irish bryophyte attributes.
Somatic chromosome numbers for plants, taken from the CCDB statistics
service (one server-side per-taxon reduction per major plant group). Names
are collapsed to the binomial (infraspecific and authorship qualifiers are
dropped) and reduced to one row per species: the median chromosome number
(2n) with its minimum and maximum across the aggregated records. The service
reports gametic numbers, which are doubled to the somatic 2n the columns
name; the spread between minimum and maximum is real ploidy variation among
a species' cytotypes.
parse_ccdb(path)parse_ccdb(path)
path |
Directory of per-group CCDB statistics CSVs (or a single CSV). |
data.frame with canonical_name + chromosome-number traits.
Fuzzy-coded biological traits of North-West European benthic invertebrates,
distributed as a flat one-row-per-taxon matrix at genus rank and above. Each
of the ten biological traits is split across several modality columns holding
a 0-3 fuzzy score (0 = no evidence ... 3 = strong evidence); each trait is
collapsed to the single modality with the highest score. The traits are body
size (mm class), morphology, lifespan (year class), egg development, larval
development, living habit, sediment position, feeding mode, mobility and
bioturbation mode. The WoRMS AphiaID is present in the source but the
Genus-rank name is used as the resolution key.
parse_cefas_btrait(path)parse_cefas_btrait(path)
path |
Path to the Trait Matrix CSV (or a directory containing it). |
data.frame with canonical_name + benthic biological traits.
Reads the data sheet (real header is the second physical row), treats the literal "NA" as missing, and parses "min-max" text ranges to their midpoint. One row per species.
parse_chelonians(path)parse_chelonians(path)
path |
Character. Path to |
data.frame with canonical_name + turtle traits.
Supporting Information Data S1 of "Widespread Decline of Ground Beetles in Germany" (Diversity and Distributions, doi:10.1111/ddi.70112). One row per species: 383 rows, of which 382 carry trait values (Ocys tachysoides has none), which makes this by a wide margin the largest lawfully reachable carabid trait block.
parse_chowdhury(path)parse_chowdhury(path)
path |
Character. Path to the downloaded |
Trait values are kept verbatim rather than normalized here. The source
vocabularies are small and self-describing, and taxify's cross-source trait
registry is where a vocabulary is mapped, so the .vtr keeps what the
authors wrote and the registry decides what it means.
Read off the file rather than the paper: trophicLevel has three values
(Predator 274, Herbivore 80, Omnivore 28) and no mycetophage category, and
habitatPref has seven classes, not eight.
Alongside the traits the table carries the paper's own result, a modelled two-year occupancy trend per species. Nothing else in taxify holds a national population trend, so those columns are kept.
data.frame with canonical_name plus trait and trend columns.
One row per species for 29 traits of clonal growth, bud banks and lifespan. Names are collapsed to the binomial (authorship and infraspecific rank are dropped, hybrid markers kept), so infraspecific records are aggregated to the species. Numeric traits (growth-form flags, bud-bank sizes/depths, persistence, offspring, spread, clonal index) are reduced by median; the nominal coded traits (branching, cyclicity, clonal-growth-organ type, regenerative-bud position and role) by mode. Coded fields are kept verbatim as in the source; consult the CLO-PLA metadata to decode them.
parse_clopla(path)parse_clopla(path)
path |
Path to |
data.frame with canonical_name + CLO-PLA clonal / bud-bank traits.
Uses the reported (observed/compiled) trait table, not the phylogenetically imputed one, so gap-filled numbers are never shipped as observed. Keyed on the IUCN 2020 binomial.
parse_combine(path)parse_combine(path)
path |
Character. Path to |
data.frame with canonical_name + mammal traits.
Merges vernacular names from three sources:
GBIF: VernacularName.tsv (has ISO 639-1 language codes)
NCBI: names.dmp where name_class == "common name" (no language)
OTT: synonyms.tsv where type == "common name" (no language)
parse_common_names(dir_path)parse_common_names(dir_path)
dir_path |
Character. Directory containing |
NCBI and OTT common names have no language tag, so lang is set to NA.
data.frame with canonical_name + lang + common_name.
Species-level functional traits of marine copepods, distributed as a
multi-sheet PANGAEA workbook (one sheet per trait family). Each trait sheet
is melted to (taxon, trait, value); the binary feeding-mode and
spawning-strategy flags are first collapsed to a single categorical label per
record. Records are then reduced to one row per taxon (numeric traits by
median, categorical by mode). Subgenus qualifiers in parentheses
(Acartia (Acartiura) clausi) are stripped so the name matches a backbone
binomial or genus. Retained traits: body length (mm), egg outer diameter
(micrometres), clutch size (egg count), feeding mode, feeder type, spawning
strategy, presence of myelination and of resting eggs.
parse_copepod_traits(path)parse_copepod_traits(path)
path |
Path to the |
data.frame with canonical_name + copepod traits.
The release is long format (one row per observation). This pivots a set of high-coverage functional traits to one row per species, aggregating numeric traits by median and categorical traits by mode.
parse_coral_traits(path)parse_coral_traits(path)
path |
Character. Path to the extracted release directory or to
|
data.frame with canonical_name + coral trait columns.
Parse Diaz et al. 2022 supplementary traits (XLSX)
parse_diaz_traits(path)parse_diaz_traits(path)
path |
Character. Path to the Diaz 2022 XLSX. |
data.frame with canonical_name + seed_mass_mg + plant_height_m.
Genus-level fuzzy-coded traits. Each fuzzy trait group (body size, life cycle,
reproductive cycles, dispersal strategy, adult life span, female wing length,
wing-pair type, fecundity) is reduced to its dominant modality, labelled with
the database's own modality descriptions. Modality labels are ASCII-normalized
(<=, >=, -), and the three binned physical-magnitude ordinals
(disperse_body_size_cm, disperse_female_wing_mm, disperse_fecundity)
also get a coarse _mid numeric-midpoint column for numeric joins; the
count/time ordinals stay categorical.
parse_disperse(path)parse_disperse(path)
path |
Path to the DISPERSE xlsx. |
data.frame with canonical_name (genus) + dominant-modality traits +
the three _mid midpoint columns.
EWcarabids1999-2022_species_trends_traits.csv from the Leuphana deposit
behind the 24-year drought study of Weiss, von Wehrden and Linde: 27 species
from 13 forest plots near Eberswalde, semicolon-delimited with German
decimal commas.
parse_eberswalde(path)parse_eberswalde(path)
path |
Character. Path to the downloaded |
Two of its columns are carabids.org verbatim, which the deposit's own README states outright ("size = mean size (body length, mm) ... Source: Homburg et al. (2014) / carabids.org", likewise wings and latitude). The data confirm it: over the 19 species shared with the Chowdhury table every single size is exactly equal and every wing class agrees. They are kept because a door should surface what its source carries, and they are excluded from the cross-source trait registry, where they would double-count one lineage.
What belongs to this deposit alone: a 24-year local abundance trend, a sensitivity to the 72-month SPEI drought index, and a feeding guild refined by the authors' field observations to name the prey (Gastropoda, Collembola). The humidity preference is Sustek's (2004) 1-8 scale, an independent source.
data.frame with canonical_name plus trait columns.
Reads the per-species Ecoflora scrape (results.csv, one row per species,
trait columns named by their Ecoflora short codes) and returns a clean wide
data.frame keyed on canonical_name. Numeric fields (heights, seed weight,
flowering months) take the median of any multiple scraped values;
categorical fields keep the unique values joined with "; ". Ecoflora records
height in cm ("Height: 3. typical maximum (cm)", "Height: 4. typical minimum
(cm)") and seed weight in mg ("Seed weight: 3. mean (mg)"); heights are
written in mm, seed weight as recorded. Every trait
column carries a _uk suffix to mark the British-flora calibration and to
avoid collisions when chained with other plant-trait enrichments.
parse_ecoflora(path)parse_ecoflora(path)
path |
Character. Path to the Ecoflora |
Ecoflora (Fitter & Peat 1994) has no bulk download or API; the snapshot was collected one species at a time and is redistributed under the source licence (CC BY-NC-SA 4.0).
data.frame with canonical_name + 18 _uk trait columns.
Reads the Zenodo ecomorphosis species list and returns one row per species known to display ecomorphosis.
parse_ecomorphosis(path)parse_ecomorphosis(path)
path |
Character. Path to |
Columns:
ecomorphosis – TRUE for every listed species (a presence list).
ecomorphosis_area – geographical area the record applies to.
ecomorphosis_reference – the literature record establishing it.
data.frame with canonical_name and the ecomorphosis* columns,
one row per species.
Per-culture nitrogen (nitrate, ammonium) and phosphorus utilization traits (maximum growth rate, half-saturation constants for growth and uptake, minimum subsistence quota, maximum quota, maximum uptake rate) from Edwards et al. (2015, Ecological Archives E096-202). Each source row is one culture measurement; rows are reduced to one per species (numeric traits by median, taxon group and freshwater/marine system by mode). Experimental conditions (temperature, irradiance, daylength) and per-measurement citations are not carried. Nutrient-trait column names are kept verbatim from the source: units are documented in the source metadata, and the source is internally inconsistent on the V_max time unit, so no unit is asserted in the name.
parse_edwards_phyto(path)parse_edwards_phyto(path)
path |
Directory holding Table1.csv (or a path to Table1.csv itself). |
data.frame with canonical_name + phytoplankton nutrient traits.
Parse EIVE 1.0 ecological indicator values (XLSX)
parse_eive(path)parse_eive(path)
path |
Character. Path to EIVE_1.0.xlsx. |
data.frame with canonical_name + indicator columns.
Reads the CC0 Collembola_trait_data.csv (Ellers et al. 2018) and returns
one row per species. Ordinal codes whose levels are named in the source are
decoded (reproduction, moisture preference); the biogeographic
temperature-zone class and the thermal-niche-breadth count are kept as their
source ordinal codes.
parse_ellers_collembola(path)parse_ellers_collembola(path)
path |
Character. Path to |
Columns:
ellers_vertical_distribution – soil, subsurface or surface.
ellers_body_size_mm – body size (mm).
ellers_reproduction – asexual or sexual.
ellers_moisture_pref – xerophilous, xero-mesophilous, mesophilous,
hygro-mesophilous or hygrophilous.
ellers_temperature_pref – biogeographic temperature-zone class, ordinal
1-5 (1 = boreal zone only ... 5 = Mediterranean zone only) per the source
codebook.
ellers_thermal_niche_breadth – number of biogeographic zones occupied,
ordinal 1-3.
data.frame with canonical_name and the ellers_* trait columns,
one row per species.
Parse EltonTraits 1.0 birds + mammals TSVs
parse_elton_traits(birds_path, mammals_path)parse_elton_traits(birds_path, mammals_path)
birds_path |
Character. Path to BirdFuncDat.txt. |
mammals_path |
Character. Path to MamFuncDat.txt. |
data.frame with canonical_name + diet/foraging/body mass columns.
Ecological and life-history traits of North-American freshwater
macroinvertebrates, read from the transposed distribution (one row per taxon
and source citation). A curated set of interpretable primary trait columns is
melted to (taxon, trait, value) and reduced to one row per taxon by mode, so
the multiple per-taxon citation records collapse to the dominant state. The
retained traits are primary feeding mode, habit, voltinism, thermal
preference, maximum body-size class, body shape, rheophily, primary
oviposition behaviour and diapause. Other (specify in comments) placeholder
entries are dropped. The taxon grain is mixed (species and genus); the ITIS
TSN is present in the source. This dataset shares its lineage (USGS Data
Series 187, Vieira et al. 2006) with freshwater_insects_conus, which is at
genus grain; the species-grain records here are the net-new contribution.
parse_epa_freshwater(path)parse_epa_freshwater(path)
path |
Path to the transposed traits |
data.frame with canonical_name + freshwater macroinvertebrate traits.
Long-format Darwin Core measurement-or-fact table joined to the taxon core (genus + specific epithet) for clean binomials; reduced to one row per species for a curated set of morphological, biogeographic and ecological traits.
parse_eupolltrait(path)parse_eupolltrait(path)
path |
Directory holding mof.csv and taxon.csv. |
data.frame with canonical_name + pollinator traits.
Species-level traits of European bats spread across thematic Darwin Core
measurement-or-fact tables (morphology, life history, diet, foraging habitat,
roost type). Each table is melted to (species, trait, value), stacked, and
reduced to one row per species (numeric traits by median, categorical by
mode). Underscored source names (Genus_species) are normalised to a
binomial.
parse_eurobat(path)parse_eurobat(path)
path |
Directory holding the thematic trait CSVs. |
data.frame with canonical_name + European bat traits.
Reads euromed_distribution.jsonl and emits one row per (accepted taxon,
Euro+Med area): the status class, the term as the portal states it, the area
with its ISO 3166-1 alpha-2 country code where the area is one country, the
taxon's CDM UUID and the ids of the references behind the reported status.
A retracted report (reported in error) is dropped; a former presence is
extinct. Where records of one taxon-area disagree the status follows
.euromed_status_order and the references are those stating it.
parse_euromed_distribution(path)parse_euromed_distribution(path)
path |
Character. Path to |
Areas whose name is not in .euromed_area_iso and is not a combined area or
part of a country are reported so the table can be extended.
data.frame with canonical_name, area_code, area_name,
area_level, iso2, euromed_status, euromed_status_detail,
euromed_status_source and taxon_id, with a reference table
(ref_id, citation, doi) attached by attach_references().
FAPROTAX.txt from the release zip (Louca et al. 2016, Science
353:1272-1277): 92 metabolic and ecological function groups, each listing the
prokaryotic taxa known to perform it, compiled from IJSEM and Bergey's
Manual.
parse_faprotax(path)parse_faprotax(path)
path |
Character. Path to the unpacked release directory or to
|
The file is a grouped list rather than a table. A group begins with its name
plus a tab-separated attribute string; the lines under it are member taxa
written as taxonomic path suffixes (*Proteobacteria*Nitrosomonas*,
*Escherichia*coli*). A group may also inherit or exclude another group's
members through add_group: / subtract_group:, which are resolved here in
file order – a referenced group is always defined earlier.
Members are annotated at whatever rank the evidence supports, so the file
mixes species, genera and higher taxa in one list. taxify joins an enrichment
on a species name or a genus, so each member is reduced to whichever of those
it carries: the last genus-plus-epithet pair in the path if there is one, else
the last plain capitalised name. Strain designations (107, 4_3_47FAA,
2.4.3) carry neither and are dropped. Rows keyed on a rank above genus are
kept as written – they simply never match a genus, at the cost of a few
hundred rows.
The result is one row per taxon with the function groups it belongs to as a pipe-delimited set, the same shape the NestTrait modality columns use: a prokaryote genuinely performs several of these, and collapsing to one would be a choice the source does not make.
data.frame with canonical_name, faprotax_functions,
faprotax_n_functions.
Species_traits_zenodo.xlsx from the Zenodo deposit behind Finand & Kotze's
urban forest fragmentation study: 34 species from 25 remnant forests in
Helsinki, with body length measured from the specimens the authors caught
rather than compiled from a database.
parse_finand(path)parse_finand(path)
path |
Character. Path to |
That independence is the reason to carry a table this small. Every other reachable carabid trait source traces back to carabids.org (Homburg et al. 2014), so none of them can check another. This one can: its body lengths run at a median ratio of 0.9946 against arthropod_traits over 28 shared species (IQR 0.985-1.008) with only 7.1 percent exactly equal, and at ~1.00 against the Chowdhury table over 14. Values such as 6.066667 mm are means over individuals, not a rounded lookup.
Body_length is a whole-body length, not the elytra length the name might
suggest: elytra would sit near 0.6 of these values, and the published body
lengths agree directly (Cychrus caraboides 16.9 mm against 14-19 in the
literature, Carabus glabratus 28.6 against 22-34).
The wing column is the same three-state trait the German table carries. On the 25 species they share there is no long-versus-short disagreement at all, but seven species the German table calls dimorphic get a definite morph here, because this records the morph of the beetles actually caught in Helsinki while the German table states the species' capacity.
data.frame with canonical_name plus trait columns.
Parse FishBase species traits (via rfishbase)
parse_fishbase(path)parse_fishbase(path)
path |
Character. Not used (rfishbase fetches data directly), kept for interface consistency. |
data.frame with canonical_name + body/depth/diet columns.
Parse FISHMORPH freshwater fish morphological traits (CSV)
parse_fishmorph(path)parse_fishmorph(path)
path |
Character. Path to FISHMORPH_Database.csv. |
data.frame with canonical_name + morphology columns.
Species-level traits of United States freshwater fishes, one row per species
in a legacy Excel workbook. The table is already at the species grain, so it
is read wide and a curated, documented subset of columns is retained: the
binary trophic-guild indicators, life-history quantities (maximum total
length in cm, age at maturity and longevity in years, maximum fecundity,
spawning-season length), salinity and temperature tolerances (30-year mean
January minimum and July maximum at the range centroid, in degrees C), and
conservation flags. The 25 Balon reproductive-guild indicator columns are
collapsed to a single repro_guild code (the flagged guild). The ITIS TSN is
carried as a cross-reference. Field meanings follow the dataset's
AttributeDefinitions.
parse_fishtraits(path)parse_fishtraits(path)
path |
Path to |
data.frame with canonical_name + US freshwater-fish traits.
Reads the long-format FloraWeb scrape (results_long.csv, one row per
species/page/label/value) and pivots it to a clean wide data.frame keyed on
canonical_name. German "no data" placeholders are dropped, multiple values
for one trait are collapsed to unique values joined with "; ", and the
German trait labels are mapped to English column names (each with a _de
suffix). Covers morphology, reproductive biology, the nine Ellenberg
indicator values, ploidy and chromosome number, and chorological
distribution.
parse_floraweb(path)parse_floraweb(path)
path |
Character. Path to the FloraWeb |
FloraWeb (Bundesamt fuer Naturschutz) is the live portal carrying the BiolFlor trait data (Klotz, Kuehn & Durka 2002) plus Rothmaler morphology and Ellenberg indicator values. It has no bulk export or API, so the snapshot was scraped per species; the access date is its version.
data.frame with canonical_name + the mapped _de trait columns.
Combines the "simple" mammal and bird tables on a shared core (diet, body size/mass, longevity, generation time) with a taxon_group discriminator.
parse_frugivoria(path)parse_frugivoria(path)
path |
Directory holding mammal.csv and bird.csv. |
data.frame with canonical_name + traits.
Reads the Polme et al. (2020) supplementary XLSX, selects the most
informative trait columns, and returns a data.frame keyed on genus.
parse_fungal_traits(path)parse_fungal_traits(path)
path |
Character. Path to the downloaded XLSX file. |
data.frame with genus + 9 trait columns.
Reads the FungalRoot occurrence core (occurrences.csv) and its
MeasurementOrFact extension (measurements.csv), keeps the per-observation
Mycorrhiza type measurements, standardizes them to a small set of type
tokens, and reduces them to one row per plant genus by
majority consensus. Mycorrhizal type is phylogenetically conserved at the
genus level, which is the resolution FungalRoot itself recommends for
inference; the per-genus value here is the most frequent standardized type
across that genus's observations (taxifydb's own aggregation, not
FungalRoot's published per-genus assignment).
parse_fungalroot(path)parse_fungalroot(path)
path |
Character. Directory holding the extracted FungalRoot DwC-A. |
data.frame keyed on genus (also copied to canonical_name) with
mycorrhizal_type, mycorrhizal_status, and mycorrhizal_records.
Reads the JSON array returned by the FUNGuild API, filters to genus and
species-level entries, and returns a clean data.frame with canonical_name
and trait columns.
parse_funguild(path)parse_funguild(path)
path |
Character. Path to the downloaded JSON/HTML file. |
data.frame with canonical_name + trophic_mode + guild + growth_morphology + confidence_ranking.
Genus-level ecological and life-history traits of North American freshwater insects, distributed in long form (one row per genus and trait group). Pivoted to one row per genus; every trait group is categorical (the source ships the abbreviated modality codes, kept verbatim).
parse_fw_insects_conus(path)parse_fw_insects_conus(path)
path |
Path to the "Insect Traits by Genus" CSV. |
data.frame with canonical_name (genus) + freshwater-insect traits.
Parse GBIF vernacular names (VernacularName.tsv + Taxon.tsv)
parse_gbif_common_names(dir_path)parse_gbif_common_names(dir_path)
dir_path |
Character. Directory holding VernacularName.tsv and Taxon.tsv. |
data.frame with canonical_name + lang + common_name.
Reads the GIDIAS machine-readable impact records and reduces them to
per-species environmental- and socio-economic-impact indicators. The .vtr
carries these derived aggregates; for the individual impact records, use the
GIDIAS figshare download.
parse_gidias(path)parse_gidias(path)
path |
Character. Path to the GIDIAS machine-readable |
gidias_eicat_category is the species' EICAT category: the most severe
magnitude among its negative (harmful) environmental-impact records, mapped
from the GIDIAS 0-3 magnitude scale to the IUCN levels MC/MN/MO/MR/MV (the
per-record global-extinction flag splits magnitude 3 into local MR and global
MV); a species with negative records but no scored magnitude is "DD".
gidias_seicat_category applies the same rule to the constituents-of-
well-being block (SEICAT, MC/MN/MO/MR). The remaining columns summarise the
evidence: the driving mechanism(s), affected well-being constituents, the
species' functional group and realms, and record/source counts.
Nature's Contributions to People (NCP) is reported as a direction rather than
a category: gidias_ncp_direction gives the direction(s) recorded
("Negative", "Positive", "Neutral", or a combination for the 16% of
species with a mixed record) and gidias_ncp_affected the contributions
affected. GIDIAS scores no magnitude scale for this block, so no IUCN-style
category is derived; the two columns are not paired, so use the source
records where the direction of a specific contribution matters.
Each species is aggregated twice. affected_taxon = "Any" summarises every
record, and is the grain to use unless you want one affected group. The
other rows summarise the species' impacts on one affected native taxon
("Plant", "Invertebrate", "Vertebrate", "Microbe", "Fungi"), which
28% of species split across two or more. Only the "Any" row carries SEICAT
and the negative records with no affected taxon recorded: the affected-taxon
axis slices the environmental-impact block, so the SEICAT columns are NA on
a per-taxon row.
data.frame with canonical_name, affected_taxon, and the
gidias_* aggregate columns.
Downloads GIFT's full catalogue of species-level traits from the live API
(batched over all trait IDs) and pivots them to one row per species. GIFT
aggregates records to a single value per species (mean for numeric traits,
most frequent entry for categorical ones). Only the redistributable subset
the API returns is kept; restricted references are excluded by the default
call. The species name is GIFT's work_species.
parse_gift(path = NULL, agreement = 0.66, batch_size = 12L, verbose = TRUE)parse_gift(path = NULL, agreement = 0.66, batch_size = 12L, verbose = TRUE)
path |
Ignored; the GIFT package fetches data directly. Present so the interface matches the file-based parsers. |
agreement |
Numeric in |
batch_size |
Integer. Number of trait IDs per API request. Default |
verbose |
Logical. Default |
Every trait column <col> has a <col>_source column holding the GIFT
reference ids (ref_ID) GIFT lists for the aggregated value (the
references field GIFT::GIFT_traits() returns beside it). For a
categorical trait these are the references that state the reported value;
for a numeric trait the references entering the mean. GIFT prefixes some ids
with - or +, a marking its documentation does not define. The sign is
dropped from the cell and kept per reference in the table as
listed_negative / listed_positive. A negatively listed reference never
appears among the records GIFT_traits_raw(bias_ref = FALSE) returns (the
tree-only GlobalTreeSearch is one), which fits GIFT's bias_ref flag. The
reference table comes from GIFT::GIFT_references(); an id GIFT lists but
does not serve there has NA citation and a note saying so. It is attached
with attach_references().
data.frame keyed on canonical_name with one gift_<trait> column
per GIFT trait. Numeric traits are doubles; the rest are character.
Reads the crawled distinct (source, type, target) edges, resolves both
endpoints to their cross-backbone accepted names, and counts, per accepted
species, the number of distinct interaction partners (undirected), distinct
interaction types, and total interaction records. Degree is a distinct-count,
so it is aggregated at the accepted grain (both endpoints resolved) rather
than per raw name; the registry entry therefore sets resolve_names = FALSE.
parse_globi(path)parse_globi(path)
path |
Character. Path to |
data.frame with canonical_name, interaction_degree,
n_interaction_types, n_interaction_records.
One row per species, wide format with two measurement blocks (upper/heat and lower/cold limit), each carrying its own metric definition. The metric columns are kept because a temperature value is ambiguous without them (CTmax, LT50 and upper thermoneutral zone are different quantities).
parse_globtherm(path)parse_globtherm(path)
path |
Character. Path to |
data.frame with canonical_name + thermal-limit traits.
Parse GloNAF taxon-region data (multiple CSVs/XLSXs from ZIP)
parse_glonaf(dir_path)parse_glonaf(dir_path)
dir_path |
Character. Directory containing the GloNAF files. |
data.frame with canonical_name + region_id + naturalized.
Host-parasite association records for wild ungulates, carnivores and primates, aggregated to one row per host species. Reported traits are the parasite richness (distinct parasite species), the distinct-parasite count by parasite type (helminth, virus, bacteria, protozoan, arthropod, fungus, prion), the mean reported prevalence and the host group.
parse_gmpd(path)parse_gmpd(path)
path |
Path to |
data.frame with canonical_name (host) + parasite-summary traits.
Parse GRIIS Country Compendium CSV
parse_griis(path)parse_griis(path)
path |
Character. Path to GRIIS_Country_Compendium_V1_0.csv. |
data.frame with canonical_name + country_code + invasive_status.
GRooT ships a long-format CSV (GRooTAggregateSpeciesVersion.csv): one row
per species x trait, with per-species mean, median and quartiles. This
pivots the nine best-populated key traits to wide format, one row per
species, using the per-species mean (meanSpecies). The species name is
the TNRS-resolved genusTNRS + speciesTNRS.
parse_groot(path)parse_groot(path)
path |
Character. Path to |
data.frame keyed on canonical_name with nine root-trait columns.
Reads the species-aggregated file (one row per species). Wood density is reported as wood specific gravity (oven-dry mass / green volume), dimensionless and numerically equal to g/cm3. Bark density is not present in the aggregated files and is not included.
parse_gwdd(path)parse_gwdd(path)
path |
Character. Path to |
data.frame with canonical_name + wood density traits.
Per-individual home-range records reduced to species medians (home range in km2, body mass in kg).
parse_homerange(path)parse_homerange(path)
path |
Path to HomeRangeData CSV. |
data.frame with canonical_name + home_range_km2 + body_mass_kg.
Reads the harvested datastore JSONL (one record per line) and rolls up per accepted insect name to the number of distinct hostplant binomials and distinct hostplant families.
parse_hosts(path)parse_hosts(path)
path |
Character. Path to the |
data.frame with canonical_name, host_plant_count,
host_family_count.
Three per-order files (Anura, Caudata, Gymnophiona) of per-specimen morphometrics; reduced to species-level medians for the measurements common and comparable across orders (snout-vent length, head length/width, eye diameter, fore/hind-limb length). Order-specific measurements are not carried because column meanings differ between clades.
parse_huang_amph(path)parse_huang_amph(path)
path |
Directory holding Anura.csv / Caudata.csv / Gymnophiona.csv. |
data.frame with canonical_name + morphometrics + taxon_order.
HydraEvol2020.csv from the figshare deposit behind "Adaptation and
coordinated evolution of plant hydraulic traits" (Ecology Letters
23:1599-1610): 2027 seed-plant species with the four traits the paper
analyses – xylem specific conductivity (Ks), xylem resistance to embolism
(P50), sapwood allocation relative to leaf area (the Huber value Hv) and
drought exposure (the minimum midday water potential) – alongside a
WorldClim/SoilGrids block describing where each species grows.
parse_hydraulics(path)parse_hydraulics(path)
path |
Character. Path to the downloaded |
A genealogy warning that matters for the trait registry: this is a literature compilation, and so are AusTraits and BROT. 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, and 42% of the P50 values shared with BROT. Agreement between them is therefore not independent corroboration. The overlap is small against what this source adds (74 of its 894 P50 species are in either incumbent), which is why it is registered rather than rejected the way FISHMORPH's max body length was.
The Huber value is the one column needing a conversion, and the overlap is
what pins it: 79 of the 208 species shared with AusTraits are equal to the
last digit after multiplying by 1e-4, so the source is cm2 sapwood per m2
leaf where AusTraits is m2/m2. The .vtr keeps the source unit and the
registry applies the factor.
Only the hydraulic block and the mean annual temperature are kept. The rest of the climate and soil columns describe a site, not the plant.
data.frame with canonical_name plus hydraulic trait columns.
BeetleMeasurements.csv from the 2018-NEON-beetles deposit: 39,064
measurements taken from images of pinned individuals across 86 species at 30
NEON sites, reduced here to a per-species median.
parse_imageomics_neon(path)parse_imageomics_neon(path)
path |
Character. Path to |
These are North American species measured from specimens, so they are independent of the carabids.org lineage every European carabid source shares, and they reach a fauna the European sources do not cover at all.
The source measures the elytron rather than the whole animal and stores
centimetres in dist_cm, so values are converted to the millimetres the
elytra_length trait uses. Sanity holds within the source and against it: the
length-to-width ratio has a median of 1.79 (range 1.34-2.25), the shape of a
carabid elytron, and Carabus nemoralis reads 14.87 mm against the 23.4 mm
body length the Finnish specimens give, a ratio of 0.64.
lying_flat = "No" marks a specimen photographed at an angle, where a
projected length is foreshortened; those measurement pairs are dropped.
data.frame with canonical_name plus elytra measurements.
Reads the InvaCost v4.1 workbook and reduces the individual cost estimates to
three per-species economic-impact indicators. The .vtr carries these derived
aggregates; for the individual cost estimates, use the invacost package.
parse_invacost(path)parse_invacost(path)
path |
Character. Path to |
cost_total_usd is the InvaCost-convention cumulative cost: each estimate's
standardised annual cost (Cost_estimate_per_year_2017_USD_exchange_rate, in
2017 USD at the exchange rate) is expanded across the number of years its
documented impact period spans (Probable_ending_year_adjusted -
Probable_starting_year_adjusted + 1, floored at one year where the period is
a single year or unrecorded) and summed across every estimate for the species.
Temporally or spatially overlapping estimates are not de-duplicated (the
invacost package's summarizeCosts() is the tool for a rigorous cost
analysis); cost_total_usd is a coarse economic-impact indicator, not an
audited figure. cost_type is the merged cost type (damage / management /
mixed / unspecified) that accounts for the largest share of the species'
cumulative cost.
data.frame with canonical_name, cost_total_usd (2017 USD),
cost_n (number of cost estimates), cost_type (dominant cost type).
Reads the crawled NDJSON (one taxon per line) and emits one row per species with the four structured lichen traits scraped from each taxon page. Names carry authorship and are resolved against the backbones by the build pipeline.
parse_italic(path)parse_italic(path)
path |
Character. Path to |
data.frame with canonical_name + lichen trait columns.
Reads the IUCN Red List archive published on GBIF (taxon.txt core plus the
Distribution extension that carries threatStatus) and returns one global
Red List category per accepted species-rank name. Reading the archive
directly avoids the GBIF species/search endpoint, whose threat facet spans
every checklist (so a name picks up conflicting categories from regional or
erroneous lists) and whose offset ceiling truncates the large categories.
parse_iucn(dir_path)parse_iucn(dir_path)
dir_path |
Character. Directory holding the extracted IUCN archive
( |
data.frame with canonical_name + conservation_status.
Genome-size estimates for plants, scraped from the paginated Kew C-values
search interface as one HTML page per 100 records (the source exposes no bulk
export). The data table on each page (Family, Genus, Species, chromosome
number, ploidy, 1C DNA amount) is read; the Mean/Min/Max summary-statistic
tables are ignored. Records are keyed on the binomial and reduced to one row
per taxon: genome size as the 1C DNA amount in picograms, plus chromosome
number (2n) and ploidy level where a clean numeric value is given. The 1C DNA
amount is reduced by median; the chromosome number and ploidy level are
discrete counts whose repeated records are cytotype variants of one species,
so they are reduced to the base cytotype by minimum, with _min / _max
carrying the range.
parse_kew_cvalues(path)parse_kew_cvalues(path)
path |
Directory of downloaded C-values HTML pages (or a single page). |
Each record names the paper the value was measured in and the method used, so
both are kept: original_reference and estimation_method list every
distinct value a species' records carry, joined by "; ". The method matters
for interpreting the 1C amount, since Feulgen densitometry and flow cytometry
are different measurements.
data.frame with canonical_name + genome-size traits.
Reduces the per-record SER-SID tables (many measurements per species) to one row per species: seed weight and nutrient contents by median, storage behaviour and fruit type by mode, with a record count for the seed-weight evidence.
parse_kew_sid(path)parse_kew_sid(path)
path |
Character. Directory holding the per-table RDS files written by
the registry download function ( |
data.frame with canonical_name and the trait columns
thousand_seed_weight (grams per 1000 seeds, median),
n_seed_weight_records, storage_behaviour, oil_content_pct,
protein_content_pct, lifeform (Raunkiaer code), and fruit_type.
Each LEDA text dump is a query export: an SQL preamble closed by an
on <date> . line, then a ;-separated table whose first line is the header.
.read_leda_table() reads that structure, and every output column is taken
from one named header field of one file, listed in .leda_trait_spec(). A
named field missing from its file stops the parse rather than falling back to
another column.
parse_leda(dir_path)parse_leda(dir_path)
dir_path |
Character. Directory containing the LEDA *.txt files. |
Numeric traits read LEDA's single value field. LEDA fills it for every
record as the record's value: the mean where one was reported, otherwise the
median, otherwise the reported extreme or the midpoint of the reported range.
Records are reduced to the species median, with the gated <col>_min /
<col>_max / <col>_n spread of .num_group_spread(). Categorical traits
report the species' most frequent value. Units are LEDA's own (Knevel et al.
2003, Collecting and measuring standards of life-history traits of the
Northwest European flora): seed mass mg, seed length mm, canopy height m,
leaf mass mg, leaf size mm2, SLA mm2/mg, LDMC mg/g, terminal velocity m/s,
releasing height m.
Two traits need more than a field:
stem specific density (ssd.txt) has no single value field, so a record
reads its mean, else its median, else the midpoint of its range. The
header says g/cm3 and LEDA's validity range is 0-1.5 g/cm3, but most
records carry wood densities in kg/m3 (Quercus robur 689); a value above
1.5 is read as kg/m3 and divided by 1000.
floating capacity (buoyancy.txt) is the percentage of diaspores still
floating after a given time; floating_capacity_1week_pct reads the records
at LEDA's standard final interval, T6 - 1 week.
Each trait column <col> read from a file that records its references has a
<col>_source column naming the references behind the value: for a
categorical trait the records that state the reported value, for a numeric
trait every record entering the median. A record's reference is its
original reference where LEDA gives one (the publication the value was
taken from), with the contributing reference kept as via; otherwise its
reference. Ids are the first 12 hex digits of the md5 of the citation and
via, and resolve against the table attached with attach_references().
dispersal_type.txt is an aggregated query export with no reference field,
so dispersal_type has no provenance column.
data.frame with canonical_name + LEDA trait columns.
Parse LepTraits 1.0 butterfly consensus CSV
parse_leptraits(path)parse_leptraits(path)
path |
Character. Path to consensus.csv. |
data.frame with canonical_name + butterfly trait columns.
Reads the species-aggregated condensed_species_NCBI.csv (one row per
species). Carries the NCBI taxonomy id as a cross-reference.
parse_madin(path)parse_madin(path)
path |
Character. Path to |
data.frame with canonical_name + microbial trait columns.
Reads the frozen WoRMS distribution snapshot and the MRGID -> MEOW ecoregion
crosswalk from dir_path, drops records WoRMS flags as doubtful or
inaccurate along with those reporting non-presence, expands each remaining
distribution record to every MEOW ecoregion its MRGID maps to, and collapses
to one row per (species, ecoregion) with a native/introduced status.
parse_marine_distribution(dir_path)parse_marine_distribution(dir_path)
dir_path |
Character. Directory containing |
data.frame with canonical_name, region_code (MEOW ECO_CODE as a
string), ecoregion, province, realm, and native_status.
Reads the plain text of one Collembola monograph and returns a body length
per species, using the source's layout spec to attach each measurement to a
name. The measurement classification is the same core the
plazi_collembola_body_length enrichment uses. <prefix>_body_length_mm is the median of the recorded
values, <prefix>_body_length_min_mm / <prefix>_body_length_max_mm bound
them, and <prefix>_body_length_n is the number of measurements behind the
species' value.
parse_monograph_body_length(path, source)parse_monograph_body_length(path, source)
path |
Character. Path to the monograph text file (an OCR export), or a
directory holding one |
source |
Character. Which monograph, one of |
data.frame with canonical_name and the <prefix>_body_length_*
columns, one row per species.
Reads the long-format frozen extraction (canonical_name, source, and the
body_length_* columns; one row per species per monograph, as
parse_monograph_body_length() produces for each book) and aggregates across
the source monographs to one row per species. This is the build reader for the
monograph_collembola_body_length enrichment: the source monographs are
copyrighted, so the mining runs once and only the extracted values – facts,
not the book text – are frozen and redistributed. monograph_body_length_mm
is the median of the per-monograph medians, monograph_body_length_min_mm /
monograph_body_length_max_mm bound the recorded values,
monograph_body_length_n is the total measurement count and
monograph_body_length_sources the number of monographs behind the value.
parse_monograph_collembola(path)parse_monograph_collembola(path)
path |
Character. Path to the frozen extraction |
data.frame with canonical_name and the monograph_body_length_*
columns, one row per species.
Parse NCBI common names from names.dmp
parse_ncbi_common_names(dir_path)parse_ncbi_common_names(dir_path)
dir_path |
Character. Directory containing names.dmp. |
data.frame with canonical_name + lang (NA) + common_name.
Wide table, one row per bird species, with binary presence flags for nest
site, nest structure and nest attachment plus mound-builder and brood-parasite
flags. The 0/1 indicators are kept, and each of the three flag groups is also
collapsed to a single pipe-delimited categorical column
(nest_structure, nest_site, nest_attachment) so the taxify trait verb
can consume them; multi-modal species carry every set modality
(e.g. "tree|nontree|cliff_bank").
parse_nesttrait(path)parse_nesttrait(path)
path |
Path to NestTrait_v2.csv. |
data.frame with canonical_name + nest trait flags + the three collapsed categorical columns.
NodDB database v1.3b.xlsx from the PlutoF deposit behind Tedersoo et al.
(2018, Journal of Vegetation Science 29:560-568). Nodulation is recorded per
plant genus, not per species, so this is a genus-keyed source in the same
shape as FungalRoot: canonical_name carries the genus and taxify joins it
on genus.
parse_noddb(path)parse_noddb(path)
path |
Character. Path to the downloaded |
The sheet puts its citation on row 1 and the header on row 2, so the header
is read positionally rather than by read.csv's first-row assumption.
Consensus estimate is the authors' verdict and is kept verbatim. The
canonical nodulation_type collapses it to the symbiont actually involved.
The collapse is an exact lookup rather than a regex because the vocabulary
contains Rhizobia, likely_Rhizobia and unlikely_Rhizobia, each of which
contains the one before it – a pattern match in the wrong order would read
every negative verdict as a positive one. unlikely_* is the authors'
judgement that the genus does not nodulate and reads as none.
data.frame with canonical_name (genus) plus nodulation columns.
Two-row header (trait category + modality) with fuzzy affinity scores; each trait category is reduced to its dominant modality (with the source labels), one row per species.
parse_nztd(path)parse_nztd(path)
path |
Path to the NZTD xlsx. |
data.frame with canonical_name + benthic traits.
Long-format trait table; reduced to one row per species. Geographic and bioregion fields are dropped; biological traits (colony morphology, polyp, skeleton, symbiosis, feeding) are kept (numeric by median, categorical by mode).
parse_octocoral(path)parse_octocoral(path)
path |
Path to OctocoralTraits_v2_2.csv. |
data.frame with canonical_name + traits.
Multi-row table (several records per species); reduced to one row per species (mode) for behavioural and ecological categorical traits. Multi-valued cells are kept verbatim.
parse_odonata(path)parse_odonata(path)
path |
Path to the OPD CSV. |
data.frame with canonical_name + odonate traits.
Parse OTT common names from synonyms.tsv + taxonomy.tsv
parse_ott_common_names(dir_path)parse_ott_common_names(dir_path)
dir_path |
Character. Directory containing synonyms.tsv + taxonomy.tsv. |
data.frame with canonical_name + lang (NA) + common_name.
Parse PanTHERIA mammal life-history traits (TSV)
parse_pantheria(path)parse_pantheria(path)
path |
Character. Path to PanTHERIA.txt. |
data.frame with canonical_name + life-history columns.
Each species carries one trophic-guild code per contributing expert; the cross-expert consensus (mode) is taken as the species trophic guild.
parse_parravicini(path)parse_parravicini(path)
path |
Path to converted_experts_classification.csv. |
data.frame with canonical_name + trophic_guild.
Wide table, one row per pelagic species (fish, cephalopods, gelatinous), of depth/temperature envelope, size, habitat, defence and gregariousness traits.
parse_pelagic(path)parse_pelagic(path)
path |
Path to the pelagic trait CSV. |
data.frame with canonical_name + traits.
One row per mammal species (including recently and prehistorically extinct).
The binomial is stored with an underscore (Genus_species) and is converted
to a space-separated canonical name.
parse_phylacine(path)parse_phylacine(path)
path |
Character. Path to |
Mass.g is partly modelled: PHYLACINE gap-fills data-poor and extinct
species. The source Mass.Method flag is kept verbatim as mass_method,
alongside a coarse mass_method_class (reported / estimated / imputed)
so a modelled mass is never served as a measurement where PHYLACINE is the
sole source for a species.
data.frame with canonical_name + mammal traits.
One row per vascular-plant taxon. Retained traits are the five Ellenberg indicator values (light, moisture, reaction, nitrogen, salt), maximum height (cm), and the source's life-form, woodiness and native-status codes (kept verbatim).
parse_plantatt(path)parse_plantatt(path)
path |
Path to |
data.frame with canonical_name + British/Irish plant attributes.
Reads the Darwin Core archives harvested by harvest_plazi_dwca(), keeps the
Collembola taxa, and extracts body length (mm) from the prose of their
treatments. plazi_body_length_mm is the median of the recorded values,
plazi_body_length_min_mm / plazi_body_length_max_mm bound them, and
plazi_body_length_n / plazi_body_length_sources are the number of
measurements and of distinct treatment papers behind the species' value.
parse_plazi_collembola_body_length( path, sections = c("description", "diagnosis", "type_taxon", "discussion", "biology_ecology", "materials_examined", "distribution", "etymology") )parse_plazi_collembola_body_length( path, sections = c("description", "diagnosis", "type_taxon", "discussion", "biology_ecology", "materials_examined", "distribution", "etymology") )
path |
Character. Directory holding the harvested |
sections |
Character. Treatment section types to read. The default set
is every section that was measured to carry body lengths; narrowing it to
|
data.frame with canonical_name and the plazi_body_length_*
columns, one row per species.
Per-measurement upper thermal-limit records reduced to species medians.
parse_pottier(path)parse_pottier(path)
path |
Path to Curated_data.csv. |
data.frame with canonical_name + thermal/size traits.
Wide table, one row per reef-fish species; a curated set of size, ecology, depth, trophic and behavioural traits is kept.
parse_quimbayo(path)parse_quimbayo(path)
path |
Path to the Fish_aspects CSV. |
data.frame with canonical_name + reef-fish traits.
Morphological, behavioural and ecological traits of marine protists,
keyed on the finest determined name (Last), which is genus-level or higher.
The three source tables share the same taxa with overlapping trait columns;
they are stacked and reduced to one row per genus (numeric traits – cell
size, in micrometres – by median, categorical traits by mode). Undetermined
entries and keys that are not a taxon name are dropped; a higher-rank name is
kept but never matches the genus of a taxify result.
parse_ramond(path)parse_ramond(path)
path |
Directory holding the three source CSVs. |
data.frame with canonical_name (genus) + protist traits.
ReptTraits is the global ecological-trait dataset for reptiles, built on the Reptile Database taxonomy. The header names are mapped explicitly (not by fuzzy pattern) so the distribution/environment block and the morphology block resolve to the correct source columns. Columns surface a per-species range signal (biogeographic realm, elevation, climate) plus body-size and life-history traits across all reptiles (not lizards only).
parse_repttraits(path)parse_repttraits(path)
path |
Character. Path to the ReptTraits XLSX (or CSV/TSV). |
data.frame with canonical_name + reptile trait columns.
Wide table, one row per taxon, of cell and colony morphometrics. Cell-level size/volume/area metrics are kept.
parse_rimet_phyto(path)parse_rimet_phyto(path)
path |
Path to the phytoplankton metrics xlsx. |
data.frame with canonical_name + cell metrics.
Wide table, one row per deadwood-beetle species (underscore names), of body and appendage morphometrics.
parse_saproxylic(path)parse_saproxylic(path)
path |
Path to the trait CSV. |
data.frame with canonical_name + morphometrics.
Non-fish companion to parse_fishbase() (molluscs, crustaceans,
echinoderms, marine mammals, reptiles, etc.). Shares the same trait columns.
parse_sealifebase(path)parse_sealifebase(path)
path |
Ignored; rfishbase fetches data directly. |
data.frame keyed on canonical_name with eight trait columns.
Long-format trait table (one row per observation); reduced to one row per species (numeric traits by median) for a curated set of growth, length, age and reproduction traits.
parse_sharkipedia(path)parse_sharkipedia(path)
path |
Path to the Sharkipedia traits CSV. |
data.frame with canonical_name + traits.
Wide species trait matrix, one row per mussel species.
parse_sheld(path)parse_sheld(path)
path |
Path to the SHELD species trait matrix xlsx. |
data.frame with canonical_name + mussel traits.
The full export is long format with ~36% access-restricted rows (value = "access restricted") that are dropped. A set of high-coverage morphometric and ecological traits is pivoted to one row per species.
parse_spider_traits(path)parse_spider_traits(path)
path |
Character. Path to the WST CSV export. |
data.frame with canonical_name + spider trait columns.
SppOccData_sWorm_<date>.csv from the sWorm data release (Phillips et al.
2021, Scientific Data 8:136), the sDiv-funded compilation behind the global
earthworm diversity synthesis.
parse_sworm(path)parse_sworm(path)
path |
Character. Directory holding the unpacked sWorm release. |
The release is a community dataset – species occurrences with abundance and biomass at 10,840 sites – and one column of it is a species trait: the Bouche ecological group each earthworm was assigned from its feeding and burrowing behaviour. That column is constant within a species across the whole compilation (171 of 172 species carry exactly one group and none carries two), so collapsing it to one row per species loses nothing.
Abundance and wet biomass are deliberately left out. Both ship in mixed units in the same 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 has a unit that survives aggregation to the species. The native/non-native column is left out for a different reason: it is a status at a site rather than a property of the species, and a species is native in one place and introduced in another.
Earthworms are otherwise absent from the bundled trait sources.
data.frame with canonical_name and ecological_group.
Per-record population densities reduced to species medians. Only the dominant
ind/km2 unit is kept (mixing with pairs/km2 or ind/ha would be incorrect).
parse_tetradensity(path)parse_tetradensity(path)
path |
Path to TetraDENSITY CSV. |
data.frame with canonical_name + density_ind_km2.
Per-test critical thermal limits (Bayat et al.) for freshwater fish,
invertebrates and amphibians. Each source row is one tolerance test; the
processed tests are joined to the taxonomy table on tax_id, restricted to
species-level taxa, and reduced to one row per species (median per metric).
The retained metrics are the critical thermal maximum (ctmax), minimum
(ctmin), the median lethal temperature (lt50) and the lethal maximum /
minimum (ltmax, ltmin); all values are in degrees Celsius.
parse_thermofresh(path)parse_thermofresh(path)
path |
Directory holding the extracted archive (with a |
The archive ships the peer-reviewed tables as data/*_final.csv and keeps
the pre-review submission beside them under data/initial_submission/, so
the readers below match the _final names exactly.
data.frame with canonical_name + freshwater thermal-limit traits.
Row-binds the three sub-tables on a common core keyed on Genus species,
adding a taxon_group discriminator. Group-specific traits (selfing for
plants, environmental sex determination for vertebrates, haplodiploidy for
invertebrates) are kept and are NA for the other groups.
parse_tree_of_sex(path)parse_tree_of_sex(path)
path |
Character. Directory holding the three Tree of Sex CSVs. |
data.frame with canonical_name + sex-determination traits.
Rolls up the USDA National Fungus Collections fungus->host table to one row per accepted fungus name with the number of distinct host binomials and distinct host genera.
parse_usda_fungus_host(path)parse_usda_fungus_host(path)
path |
Character. Path to the Fungus-Host CSV. |
data.frame with canonical_name, fungus_host_count,
fungus_host_genus_count.
The checklist is published only as a typeset PDF. Each species is a name line
followed by a data line <IPNI LSID> | <space-separated use codes> | [CWR] | [sources]. The ten Level-1 use codes are exploded into boolean columns and a
crop-wild-relative flag is set from the optional CWR token.
parse_useful_plants(path)parse_useful_plants(path)
path |
Character. Path to the WCUP PDF. |
data.frame with canonical_name + use-category booleans.
virion.csv.gz plus tax_table.csv.gz from the VIRION data package (Carlson
et al. 2022, mBio 13:e0298521), the merged host-virus association network.
The association table keys hosts and viruses by hash, so the taxonomy table
supplies the names.
parse_virion(path)parse_virion(path)
path |
Character. Directory holding the downloaded VIRION files. |
Only per-host aggregates are written: the number of distinct viruses recorded from the host, the number of distinct virus families, and the number of association records behind those counts. The association records themselves are not redistributed, the same treatment GloBI and InvaCost get.
Counts are association breadth as recorded, not a biological property of the host: sampling effort dominates, which is why Homo sapiens leads with 936 distinct viruses. The record count travels alongside so the effort behind a number is visible.
data.frame with canonical_name plus virus association counts.
Parse WCVP names + distribution (from extracted ZIP directory)
parse_wcvp(dir_path)parse_wcvp(dir_path)
dir_path |
Character. Directory containing wcvp_names + wcvp_distribution. |
data.frame with canonical_name + tdwg_code + native_status.
Parse Zanne et al. 2014 woodiness CSV
parse_zanne(path)parse_zanne(path)
path |
Character. Path to GlobalWoodinessDatabase.csv. |
data.frame with canonical_name + woodiness.
Long-format trait records reduced to one row per species (numeric by median, categorical by mode). Binary one-hot decompositions of the categorical traits are not carried (the categorical parent is kept instead).
parse_zooplankton(path)parse_zooplankton(path)
path |
Path to the level-2 trait CSV. |
data.frame with canonical_name + zooplankton traits.
Adds the matching-key columns and embedded synonym info that taxify's
runtime expects. Operates on a normalized backbone (column names from
normalize_backbone()).
precompute_backbone(df, synonym_pattern = "SYNONYM")precompute_backbone(df, synonym_pattern = "SYNONYM")
df |
A normalized backbone data.frame. |
synonym_pattern |
Regex for synonym detection. |
The data.frame ready for build_vtr().
The single entry point to the probes: a build calls it to record what it read, and the weekly check calls it to see what upstream now offers. Both therefore speak in the same identity, which is what makes the two comparable.
probe_upstream_identity(source_url, record = NULL)probe_upstream_identity(source_url, record = NULL)
source_url |
Character. The URL a build downloads its source from. |
record |
Character or NULL. The source's host record (registry
|
The probe's result (id, version, date, optionally pinned,
url), or NULL when no probe covers the host or the host cannot be
reached (for a multi-URL source: any of its hosts).
.vtr files to the rolling enrichment releaseEvery enrichment is published under one shared, rolling release tag
(enrichment-<version>), unlike backbones which get a tag each. The release
is therefore created only when missing and never deleted: assets are uploaded
with --clobber, which replaces only the same-named file and leaves every
other enrichment's .vtr in place. Deleting and recreating the tag (as the
per-backbone workflow does) would wipe all the other enrichments' assets.
publish_enrichment_release( version, vtr_paths, repo = "gcol33/taxifydb", notes = NULL )publish_enrichment_release( version, vtr_paths, repo = "gcol33/taxifydb", notes = NULL )
version |
Character. Rolling release version (the |
vtr_paths |
Character vector. Paths to the enrichment |
repo |
Character. GitHub repo (e.g. "gcol33/taxifydb"). |
notes |
Character or NULL. Release notes, used only when the release is created for the first time. |
The release tag (invisibly).
Uses the gh CLI. Assumes gh is authenticated and on PATH.
publish_release( backend_name, version, vtr_path, delta_path = NULL, meta_path = NULL, extras = character(0L), repo = "gcol33/taxifydb", notes = NULL )publish_release( backend_name, version, vtr_path, delta_path = NULL, meta_path = NULL, extras = character(0L), repo = "gcol33/taxifydb", notes = NULL )
backend_name |
Character. Backend identifier. |
version |
Character. The source release the build recorded in its
|
vtr_path |
Character. Path to the main |
delta_path |
Character or NULL. Path to the |
meta_path |
Character or NULL. Path to the |
extras |
Character vector. Paths to additional sidecar artifacts
(e.g., |
repo |
Character. GitHub repo (e.g., "gcol33/taxifydb"). |
notes |
Character. Release notes. |
The release is created when missing and never deleted. Publishing again under
an existing tag replaces the rolling assets in place (--clobber) and adds
the new build's content-addressed copy beside those of earlier cuts, so every
content_url a manifest has recorded for the tag keeps resolving. A rolling
.vtr published before those copies existed is preserved under its own
content-addressed name before it is replaced.
The release tag (invisibly).
Read and normalize a fetched list of AlgaeBase records
read_algaebase(records, verbose = TRUE)read_algaebase(records, verbose = TRUE)
records |
A list of raw search records (from |
verbose |
Logical. |
A normalized data.frame.
Read and normalize the AviList checklist
read_avilist(xlsx_path, verbose = TRUE)read_avilist(xlsx_path, verbose = TRUE)
xlsx_path |
Character. Path to the AviList extended workbook. |
verbose |
Logical. |
A normalized data.frame ready for precompute_backbone().
Read and normalize the COL Taxon.tsv
read_col(col_dir, verbose = TRUE)read_col(col_dir, verbose = TRUE)
col_dir |
Character. Path to the extracted COL directory. |
verbose |
Logical. |
A normalized data.frame.
Read and normalize the COL XR export
read_colxr(tsv_path, verbose = TRUE)read_colxr(tsv_path, verbose = TRUE)
tsv_path |
Character. Path to the extracted COL XR TSV. |
verbose |
Logical. |
A normalized data.frame ready for precompute_backbone().
Read a pipe-delimited NCBI .dmp file
read_dmp(path, col_names)read_dmp(path, col_names)
path |
Character. Path to the .dmp file. |
col_names |
Character vector of column names. |
A data.frame.
Read and normalize the Euro+Med CDM snapshot
read_euromed(jsonl_path, nodes_path, verbose = TRUE)read_euromed(jsonl_path, nodes_path, verbose = TRUE)
jsonl_path |
Character. Path to |
nodes_path |
Character. Path to |
verbose |
Logical. |
A normalized data.frame in the unified backbone schema.
One row per accepted unit (class, order, alliance) and one per synonym. A
synonym is every name the unit's Nomenclature page lists, plus the name the
original EuroVegChecklist (Mucina et al. 2016) used where the current
version renamed the unit. Every row carries the lineage of its accepted unit
in class / order / alliance, so a match at any rank rolls up.
read_evc(synonyms_path, units_path, synonyms_2016_path = NULL, verbose = TRUE)read_evc(synonyms_path, units_path, synonyms_2016_path = NULL, verbose = TRUE)
synonyms_path |
Path to |
units_path |
Path to the unit list |
synonyms_2016_path |
Path to |
verbose |
Logical. |
A data.frame: taxon_id, canonical_name, authorship,
taxon_rank, taxonomic_status, accepted_name_usage_id, evc_code,
nomenclatural_note, remark, class, order, alliance,
association (always NA: the EVC stops at alliances), evc_mnemonic,
description.
Read and normalize the Species Fungorum Plus ColDP files
read_fungorum(fungorum_dir, verbose = TRUE)read_fungorum(fungorum_dir, verbose = TRUE)
fungorum_dir |
Character. Directory containing Taxon.tsv, Name.tsv, Synonym.tsv. |
verbose |
Logical. |
A normalized data.frame.
Read and normalize the GBIF backbone
read_gbif(gz_path, counts = NULL, verbose = TRUE)read_gbif(gz_path, counts = NULL, verbose = TRUE)
gz_path |
Character. Path to simple.txt.gz. |
counts |
Named numeric vector of occurrence counts by taxon key, from
|
verbose |
Logical. |
A normalized data.frame ready for precompute_backbone().
Read a GBIF occurrence-count snapshot
read_gbif_occurrence_counts(path)read_gbif_occurrence_counts(path)
path |
Character. Path to the |
Named numeric vector of counts by taxon key.
Read and normalize the ITIS SQLite database
read_itis(sqlite_path, verbose = TRUE)read_itis(sqlite_path, verbose = TRUE)
sqlite_path |
Character. Path to the ITIS .sqlite file. |
verbose |
Logical. |
A normalized data.frame ready for precompute_backbone().
Read and normalize the LCVP reference table
read_lcvp(rda_path, verbose = TRUE)read_lcvp(rda_path, verbose = TRUE)
rda_path |
Character. Path to |
verbose |
Logical. |
A normalized data.frame ready for precompute_backbone().
Read and normalize the LPSN checklist
read_lpsn(lpsn_dir, verbose = TRUE)read_lpsn(lpsn_dir, verbose = TRUE)
lpsn_dir |
Character. Directory holding |
verbose |
Logical. |
A normalized data.frame ready for precompute_backbone().
Read and normalize the Mammal Diversity Database
read_mdd(dir, verbose = TRUE)read_mdd(dir, verbose = TRUE)
dir |
Character. Directory holding the extracted MDD CSVs. |
verbose |
Logical. |
A normalized data.frame ready for precompute_backbone().
One row per polygon vertex. code is the MEOW ecoregion code (ECO_CODE),
geom indexes the polygon within a feature (a MultiPolygon has several),
ring indexes the ring within a polygon (1 is the outer boundary, 2+
are holes), and seq is the vertex order within a ring. This captures the
full polygon topology so the runtime can rebuild native, terra, or sf
geometry from the same source, exactly like read_wgsrpd().
read_meow(path)read_meow(path)
path |
Character. Path to a MEOW ecoregion GeoJSON file. |
The ecoregion code property is matched case-insensitively, preferring
ECO_CODE; falling back to ECO_CODE_X, then any eco*code property.
A data.frame with columns code, geom, ring, seq, lon,
lat, sorted by code, geom, ring, seq.
Read and normalize the NCBI taxonomy dump
read_ncbi(dump_dir, verbose = TRUE)read_ncbi(dump_dir, verbose = TRUE)
dump_dir |
Character. Path to the extracted taxdump directory. |
verbose |
Logical. |
A normalized data.frame ready for precompute_backbone().
Read and normalize the OTT taxonomy
read_ott(ott_dir, verbose = TRUE)read_ott(ott_dir, verbose = TRUE)
ott_dir |
Character. Path to the extracted OTT directory. |
verbose |
Logical. |
A normalized data.frame.
Read and normalize the Reptile Database
read_reptiledb(paths, verbose = TRUE)read_reptiledb(paths, verbose = TRUE)
paths |
Named list from |
verbose |
Logical. |
A normalized backbone data.frame.
One row per accepted unit (class, alliance, association) and one per name
its Pladias Nomenclature page lists as a synonym. A name cited in another
author's sense (sensu ... non ..., a pseudonym) is MISAPPLIED. Every row
carries the lineage of its accepted unit in class / alliance /
association (order is NA: the national classification does not use
orders).
read_vegcz(synonyms_path, units_path, verbose = TRUE)read_vegcz(synonyms_path, units_path, verbose = TRUE)
synonyms_path |
Path to |
units_path |
Path to the unit list |
verbose |
Logical. |
A data.frame in the shape of read_evc(), with vegcz_code,
description_cz and description_en for its own columns.
Read and normalize the WCVP names file
read_wcvp(names_path, verbose = TRUE)read_wcvp(names_path, verbose = TRUE)
names_path |
Character. Path to |
verbose |
Logical. |
A normalized data.frame ready for precompute_backbone().
Read and normalize the WFO classification file
read_wfo(txt_path, verbose = TRUE)read_wfo(txt_path, verbose = TRUE)
txt_path |
Character. Path to the WFO classification.txt file. |
verbose |
Logical. |
A normalized data.frame ready for precompute_backbone().
One row per polygon vertex. geom indexes the polygon within a feature
(a MultiPolygon has several), ring indexes the ring within a polygon
(1 is the outer boundary, 2+ are holes), and seq is the vertex order
within a ring. This captures the full polygon topology so the runtime can
rebuild native, terra, or sf geometry from the same source.
read_wgsrpd(path)read_wgsrpd(path)
path |
Character. Path to a WGSRPD Level 3 GeoJSON file. |
A data.frame with columns code, geom, ring, seq, lon,
lat, sorted by code, geom, ring, seq.
Read and normalize the WoRMS taxonomy
read_worms(worms_dir, verbose = TRUE)read_worms(worms_dir, verbose = TRUE)
worms_dir |
Character. Path to the extracted DwC-A directory. |
verbose |
Logical. |
A normalized data.frame.
Names of the backbones the genus register and backend coverage union
register_backbones()register_backbones()
Character vector of backend identifiers.
The code-keyed BETSI-derived matrices (INRAE UU2FQT / UCYSLH, Bonfanti 2022)
key traits on a TOKEN_SPP code with no published legend, where SPP is the
first three letters of the specific epithet and TOKEN abbreviates the genus.
This decodes each code against a reference pool of binomials: the token
selects one or more pool genera and the epithet prefix selects the species
within them. A single pool species resolves directly; a collision is split by
body length when both the code and its candidates carry one; a genus-level
_X code, an unmapped token, or a code with no pool candidate is left
unresolved for the caller to tag and drop rather than guess (label, never
decide).
resolve_betsi_codes( codes, pool, code_bl = NULL, pool_bl = NULL, genus_dict = NULL )resolve_betsi_codes( codes, pool, code_bl = NULL, pool_bl = NULL, genus_dict = NULL )
codes |
Character vector of |
pool |
Character vector of candidate binomials. |
code_bl |
Named numeric mapping code -> estimated body length (mm), or
|
pool_bl |
Named numeric mapping binomial -> body length (mm), or |
genus_dict |
Named character vector (or list) mapping a genus token to
its genus name(s), or |
The token is resolved two ways. Bonfanti 2022 uses the plain first three
letters of the genus (ISO_PAL for Isotomurus palustris), and with
genus_dict = NULL a three-letter token matches every pool genus sharing
those three letters. INRAE instead disambiguates colliding genera with bespoke
abbreviations – the Iso* genera split into ISO = Isotomiella, ISA =
Isotoma, ISU = Isotomurus, ISODES = Isotomodes – so pass that
mapping as genus_dict and a listed token resolves to exactly its genus, with
the three-letter rule kept only as the fallback for unlisted three-letter
tokens. A token that is neither listed nor a plain three-letter prefix is left
unresolved rather than forced onto a near-match; INRAE's verified mapping is
shipped in inst/extdata/betsi/inrae_genus_abbr.csv.
The reference pool is supplied by the caller; in practice it is the union of
accepted binomials across taxifydb's built Collembola assets
(betsi_collembola_body_length, ellers_collembola, betsi_collembola_traits,
the monograph and Plazi length sources), with pool_bl their body lengths.
A data.frame with one row per input code: code, binomial (NA
when unresolved) and method (why it resolved or did not).
Takes an enrichment data.frame with canonical_name + trait columns and
expands it so that each source name maps to all unique accepted_name
values across the requested backends.
resolve_enrichment_names( df, group_cols = NULL, backends = list_backends(), verbose = TRUE, use_lookup = TRUE, reverse_hop = TRUE, strict = FALSE, reduce_fn = NULL, grain = c("species", "genus"), kingdom = NULL )resolve_enrichment_names( df, group_cols = NULL, backends = list_backends(), verbose = TRUE, use_lookup = TRUE, reverse_hop = TRUE, strict = FALSE, reduce_fn = NULL, grain = c("species", "genus"), kingdom = NULL )
df |
A data.frame with at least a |
group_cols |
Character vector of grouping columns. Deduplication uses
|
backends |
Character vector of backend names. Default: every taxify
backbone ( |
verbose |
Logical. |
use_lookup |
Logical. Try the hash-join fast path first. Default |
reverse_hop |
Logical. Add the reverse hop; see |
strict |
Logical. Error, rather than warn, when a requested backbone
has no |
reduce_fn |
Function |
grain |
|
kingdom |
Character vector or |
By default tries the fast hash-join path against per-backend
name_lookup.vtr files in the user's taxify data directory (built by
build_all_name_lookups()); falls back to per-name-per-backend
taxify::taxify() if no lookup files are found.
The expanded data.frame, carrying a resolved_backbones attribute
naming the backbones the expansion actually reached.
Many backends (ITIS, NCBI, OTT) store taxonomy as a parent-child tree without explicit family/genus columns. This function walks up the tree to find the nearest ancestor at each target rank.
resolve_hierarchy(df, target_ranks = c("family", "genus"), max_depth = 20L)resolve_hierarchy(df, target_ranks = c("family", "genus"), max_depth = 20L)
df |
A data.frame with columns |
target_ranks |
Character vector of ranks to resolve (e.g.,
|
max_depth |
Maximum number of hops (default 20). |
The input data.frame with new columns named after target_ranks, containing the resolved ancestor name at that rank.
Resolves a vector of source names to every distinct accepted name they map
to across the requested taxify backends, returning the long
(input_name, accepted_name) mapping used by resolve_enrichment_names().
Names that resolve nowhere are self-mapped (accepted_name == input_name).
resolve_name_map( names, backends = list_backends(), verbose = TRUE, use_lookup = TRUE, reverse_hop = TRUE, strict = FALSE, grain = c("species", "genus"), kingdom = NULL )resolve_name_map( names, backends = list_backends(), verbose = TRUE, use_lookup = TRUE, reverse_hop = TRUE, strict = FALSE, grain = c("species", "genus"), kingdom = NULL )
names |
Character vector of source names. |
backends |
Character vector of backend names. Default: every taxify
backbone ( |
verbose |
Logical. |
use_lookup |
Logical. Try the hash-join fast path first. Default |
reverse_hop |
Logical. Add the reverse hop that reaches an accepted
name only one backbone keeps. |
strict |
Logical. Error, rather than warn, when a requested backbone
has no |
grain |
|
kingdom |
Character vector or |
Exposed so that rollup enrichments (host breadth, interaction degree) can aggregate at the accepted-name grain – unioning records across synonyms before counting – instead of pre-aggregating per source name and losing counts when several synonyms later collapse onto one accepted name.
data.frame with columns input_name, accepted_name.
rfishbase serves FishBase and SeaLifeBase as dated snapshots named YY.MM
("26.06" is June 2026). The newest is resolved once per build and passed to
every table read, so the taxa and synonyms come from the snapshot the version
names.
rfishbase_release(server = c("fishbase", "sealifebase"))rfishbase_release(server = c("fishbase", "sealifebase"))
server |
Either "fishbase" or "sealifebase". |
A list with release (rfishbase's YY.MM label), version
(YYYY.MM) and date (YYYY-MM, the snapshot's month).
Compute SHA-256 checksum of a file
sha256(path)sha256(path)
path |
Character. Path to the file. |
Character. Hex-encoded SHA-256 hash.
Several sources publish a name without the parsed parts the unified schema carries, so the genus, specific epithet and infraspecific epithet are taken from the name itself.
split_scientific_name(name, genus = NULL)split_scientific_name(name, genus = NULL)
name |
Character vector of scientific names. |
genus |
Character vector of known genus names (same length as |
When genus is supplied and the name begins with it, the split is anchored
there; otherwise the first word of the name is taken as the genus. Anchoring
on a known genus rather than on a rank vocabulary means a rank spelling this
function has never seen still resolves, and it keeps a two-word genus from
being read as a binomial.
The infraspecific epithet is the last word following the specific epithet,
so a name carrying a rank marker (Poa annua subsp. exilis) and a bare
trinomial (Larus fuscus graellsii) both resolve to the epithet itself. A
free-standing hybrid multiplication sign is dropped rather than read as an
epithet, and so is a subgenus in parentheses after the genus.
The caller decides which rows to apply this to: a name above genus rank
still returns its first word as genus, so a source that stores family and
order rows in the same table gates on rank itself.
A list of three character vectors: genus, specific and
infraspecific, each the length of name. Absent parts are NA.
split_scientific_name("Poa annua subsp. exilis") split_scientific_name("Larus fuscus graellsii") split_scientific_name("Quercus", genus = "Quercus")split_scientific_name("Poa annua subsp. exilis") split_scientific_name("Larus fuscus graellsii") split_scientific_name("Quercus", genus = "Quercus")
Loads inst/extdata/tsita_crosswalk.csv and resolves each tsita_label to
its concept URI against tsita_vocab(), failing loudly if a label is not a
known T-SITA concept. Each row maps one enrichment column onto a T-SITA
concept: a row with an empty raw_value maps the column (the trait axis); a
row with a raw_value maps one categorical value of that column onto an
attribute concept.
tsita_crosswalk(enrichment = NULL)tsita_crosswalk(enrichment = NULL)
enrichment |
Character or |
A data.frame with columns enrichment, column, raw_value
(NA for an axis mapping), tsita_label, tsita_uri.
Loads the frozen T-SITA vocabulary (inst/extdata/tsita_vocab.csv): one row
per concept, with its stable ARK URI, prefLabel, the top concept it sits
under (Trait or Ecological_preference), its depth below that top, the
broader parent URI, and the definition / scopeNote. prefLabel is
unique across the thesaurus, which is what lets the crosswalk key on labels
and resolve URIs from here. The result is cached for the session.
tsita_vocab()tsita_vocab()
A data.frame with columns uri, id, prefLabel, top, depth,
broader, definition, scopeNote.
Enrichment .vtr files are published under a single rolling release tag
(e.g. enrichment-2026.06) regardless of the dataset's own version. The
manifest entry therefore records two distinct versions: latest holds the
rolling release version (matching the enrichment-<latest> download tag)
while source_version holds the dataset's own version (from the meta
sidecar). Pass release_version to set the release tag explicitly; when
omitted it falls back to the dataset version (correct only when the two
happen to coincide).
update_enrichment_manifest( manifest_path, name, vtr_path, release_version = NULL, repo = "gcol33/taxifydb", runtime = FALSE )update_enrichment_manifest( manifest_path, name, vtr_path, release_version = NULL, repo = "gcol33/taxifydb", runtime = FALSE )
manifest_path |
Character. Path to manifest.json. |
name |
Character. Enrichment identifier. |
vtr_path |
Character. Path to the built .vtr file. |
release_version |
Character or NULL. Rolling release version used in the
download URL tag ( |
repo |
Character. GitHub repo for URL construction. |
runtime |
Logical. When |
The updated manifest (invisibly).
latest is the release tag the download URL points at, and it is the source
release the build recorded in its .meta sidecar (WFO 2026.06, OTT
3.7.3), so one field names both the download and the data.
update_manifest( manifest_path, backend_name, version, vtr_path, delta_path = NULL, delta_from = NULL, delta_from_content_id = NULL, extras = NULL, repo = "gcol33/taxifydb", source_url = NULL )update_manifest( manifest_path, backend_name, version, vtr_path, delta_path = NULL, delta_from = NULL, delta_from_content_id = NULL, extras = NULL, repo = "gcol33/taxifydb", source_url = NULL )
manifest_path |
Character. Path to manifest.json. |
backend_name |
Character. |
version |
Character. The source release the build recorded in its
|
vtr_path |
Character. |
delta_path |
Character or NULL. |
delta_from |
Character or NULL. Previous version the delta is from. |
delta_from_content_id |
Character or NULL. Content id (md5) of the exact
build the delta was cut against, as |
extras |
Character vector or NULL. Paths to sidecar artifacts uploaded
with the release. Recorded as |
repo |
Character. GitHub repo for URL construction. |
source_url |
Character or NULL. Original data source URL. When |
The updated manifest (invisibly).
Several backbones read a pinned or frozen source and rebuild to the same bytes every time – Euro+Med from a frozen snapshot release, GBIF from its last backbone, LCVP from a tagged data release. Publishing those again would re-upload a file every taxify user already holds. A build is therefore a change when its bytes differ from the published asset, or when the manifest records it under a different version than the source release the build names: the second case re-releases identical bytes under the tag that says what they are.
vtr_changed(manifest_path, backend_name, vtr_path, version = NULL)vtr_changed(manifest_path, backend_name, vtr_path, version = NULL)
manifest_path |
Character. Path to |
backend_name |
Character. Backend identifier. |
vtr_path |
Character. Path to the freshly built |
version |
Character or |
Fails open: anything that cannot be determined – no manifest, no entry for this backbone, no recorded hash, a first-ever build – counts as changed, so an uncertain case still publishes.
Logical scalar. TRUE when a release is warranted.
Zenodo answers a concept record with its latest version. The edition label
that version carries (2026-06) is the release the backbone is built as.
wfo_latest_edition(verbose = TRUE)wfo_latest_edition(verbose = TRUE)
verbose |
Logical. |
A list with record (Zenodo record id), edition (as WFO labels
it), version (YYYY.MM) and url (the Darwin Core backbone archive).