You have probably, or will, run into problems with taxonomic names. For example, you may think you know how a taxonomic name is spelled, but then GBIF will not agree with you. Or, perhaps GBIF will have multiple versions of the taxon, spelled in slightly different ways. Or, the version of the name that they think is the right one does not match what yo think is the right one.
This isn't really anyone's fault. It's a result of there not being one accepted taxonomic source of truth across the globe. There are many different taxonomic databases. GBIF makes their own backbone taxonomy that they use as a source of internal truth for taxonomic names. The accepted names in the backbone taxonomy match those in the database of occurrences - so do try to figure out what backbone taxonomy version of the name you want.
Another source of problems stems from the fact that names are constantly changing. Sometimes epithets change, sometimes generic names, and sometimes higher names like family or tribe. These changes can take a while to work their way in to GBIF's data.
The following are some examples of confusing name bits. We'll update these if GBIF's name's change. The difference between each pair of names is highlighted in bold.
library("rgbif")
To reduce code duplication, we'll use a little helper function to make a call
to name_backbone()
for each input name, then rbind
them together:
name_rbind <- function(..., rank = "species") {
columns <- c('usageKey', 'scientificName', 'canonicalName', 'rank',
'status', 'confidence', 'matchType', 'synonym')
df <- lapply(list(...), function(w) {
name_backbone(w, rank = rank)[, columns]
})
data.frame(do.call(rbind, df))
}
And another function to get the taxonomic data provider
taxon_provider <- function(x) {
tt <- name_usage(key = x)$data
datasets(uuid = tt$constituentKey)$data$title
}
We use taxon_provider()
below to get the taxonomy provider in the bulleted list of details
for each taxon (even though you don't see it called, we use it, but the code isn't shown :)).
(c1 <- name_rbind("Pinus sylvestris", "Pinus silvestris"))
#> usageKey scientificName canonicalName rank status
#> 1 5285637 Pinus sylvestris L. Pinus sylvestris SPECIES ACCEPTED
#> 2 5285637 Pinus sylvestris L. Pinus sylvestris SPECIES ACCEPTED
#> confidence matchType synonym
#> 1 97 EXACT FALSE
#> 2 94 FUZZY FALSE
(c2 <- name_rbind("Macrozamia platyrachis", "Macrozamia platyrhachis"))
#> usageKey scientificName canonicalName
#> 1 2683551 Macrozamia platyrhachis F.M.Bailey Macrozamia platyrhachis
#> 2 2683551 Macrozamia platyrhachis F.M.Bailey Macrozamia platyrhachis
#> rank status confidence matchType synonym
#> 1 SPECIES ACCEPTED 96 FUZZY FALSE
#> 2 SPECIES ACCEPTED 98 EXACT FALSE
(c3 <- name_rbind("Cycas circinalis", "Cycas circinnalis"))
#> usageKey scientificName canonicalName rank status
#> 1 2683264 Cycas circinalis L. Cycas circinalis SPECIES ACCEPTED
#> 2 2683264 Cycas circinalis L. Cycas circinalis SPECIES ACCEPTED
#> confidence matchType synonym
#> 1 98 EXACT FALSE
#> 2 95 FUZZY FALSE
(c4 <- name_rbind("Isolona perrieri", "Isolona perrierii"))
#> usageKey scientificName canonicalName rank status
#> 1 6308376 Isolona perrierii Diels Isolona perrierii SPECIES ACCEPTED
#> 2 6308376 Isolona perrierii Diels Isolona perrierii SPECIES ACCEPTED
#> confidence matchType synonym
#> 1 96 FUZZY FALSE
#> 2 98 EXACT FALSE
(c5 <- name_rbind("Wiesneria", "Wisneria", rank = "genus"))
#> usageKey scientificName canonicalName rank status confidence
#> 1 2864604 Wiesneria Micheli Wiesneria GENUS ACCEPTED 96
#> 2 7327444 Wisneria Micheli, 1881 Wisneria GENUS SYNONYM 95
#> matchType synonym
#> 1 EXACT FALSE
#> 2 EXACT TRUE
name_