fao_data_info() shows the release you use and how
to cite it.
The FAO capture statistics give the catch of each species item, with its English and scientific name from the ASFIS list, but nothing about its biology. FishBase (fishes) and SeaLifeBase (other aquatic animals and plants) give these traits: trophic level, preferred temperature, habitat, maximum length, vulnerability to fishing, resilience and prior r. The package uses them in two places: the preferred temperature for the mean temperature of the catch, and the resilience and prior r for the CMSY++ priors.
The data come from fixed copies (releases) of the FishBase and SeaLifeBase tables, which the rfishbase project of rOpenSci publishes as parquet files (Boettiger et al. 2012; source code at https://github.com/ropensci/rfishbase, files at https://data.source.coop/cboettig/fishbase/). The package matches them to the FAO species items only by published rules, and every match carries the links needed to check it.
| Function | What it does | Internet |
|---|---|---|
check_fishbase_update() |
Lists the newest release online and the releases downloaded | Yes |
download_fishbase_data() |
Downloads the tables of a release | Yes |
fishbase_table() |
Reads one table of a release | Only if the table has not been downloaded |
fishbase_match() |
Matches the FAO species items to FishBase and SeaLifeBase | No with version = "builtin" or a downloaded
release |
fishbase_sources() |
Lists sources, licences, tables and matching rules | No |
📦 Releases, folders and the built-in table
A release is named by its year and month, e.g. "26.06"
(June 2026). Releases are fixed snapshots, so a table downloaded once is
identical to the one online. They are published at https://data.source.coop/cboettig/fishbase/, and the
package saves the tables it downloads in the fishbase
folder of fao_data_dir():
Path in fao_data_dir()
|
Content |
|---|---|
fishbase/fb/<release>/<table>.parquet |
FishBase tables,
e.g. fishbase/fb/26.06/estimate.parquet
|
fishbase/slb/<release>/<table>.parquet |
SeaLifeBase tables |
fishbase/fb/<release>/files.csv (and
slb/) |
URL, size and download date of each table |
fishbase/corrections.csv |
Your corrections of matches (see Check and correct the matches) |
fishbase/worms_lookup.csv |
Names looked up in WoRMS, reused when the computer is offline |
fao_data_dir() is the user data folder of R unless it is
changed with fao_settings(data_dir = ...), for example to a
folder shared by a team. Each function also has a data_dir
argument. Reading the parquet files needs the nanoparquet package, which
is installed with faofishingreport.
The version argument chooses the release:
version |
Release used |
|---|---|
"latest" (default) |
Online: the newest release online; its tables are downloaded the
first time they are needed. Offline, or with
fao_settings(online = FALSE): the newest downloaded
release, with a message. Offline with nothing downloaded:
fishbase_match() uses the built-in table;
fishbase_table() stops with an error |
A release, e.g. "26.06"
|
This release, downloaded if needed |
"builtin" |
The built-in table, without connecting to the internet
(fishbase_match() and the functions that call it) |
The built-in table
The package includes the result of fishbase_match() for
every species item of the FAO data bundled with the package, without
manual corrections. It is the file
inst/extdata/fishbase_traits.rda, made by
data-raw/build_fishbase_traits.R, and its attributes give
the releases it was made from:
load(system.file("extdata", "fishbase_traits.rda", package = "faofishingreport"))
attr(fishbase_traits, "fishbase_version") # FishBase and SeaLifeBase releases
#> fishbase sealifebase
#> "26.06" "26.06"
attr(fishbase_traits, "fao_release") # FAO release whose species items were matched
#> [1] "2026.1.0"
attr(fishbase_traits, "built") # date the table was made
#> [1] "2026-10-10"
nrow(fishbase_traits)
#> [1] 3797
table(fishbase_traits$match_type)
#>
#> class exact family
#> 17 3030 170
#> genus not matched order
#> 358 76 25
#> phylum plant (TL 1) synonym
#> 7 71 38
#> WoRMS valid name (exact) WoRMS valid name (family) WoRMS valid name (genus)
#> 3 1 1With version = "builtin" nothing is downloaded and the
results are the same on every computer. This article uses it, so the
website can be built without downloads. Items that are not in the
built-in table, such as new items of a later FAO release, are marked as
“pending online check”. version = "latest" gives the values
of the newest release, which can differ slightly once FishBase publishes
a new one.
Licence. FishBase and SeaLifeBase data are licensed
CC BY-NC
4.0 by the FishBase.org team: they can be used with attribution, but
not for commercial purposes. Cite FishBase (Froese and Pauly, Eds.) and
SeaLifeBase (Palomares and Pauly, Eds.) with the release used. The same
licence applies to the built-in table and to the trait values in the
results of these functions. Valid names from WoRMS are licensed CC BY.
fishbase_sources() lists every source.
🔄 Check for new releases: check_fishbase_update()
check_fishbase_update() lists the releases published
online and compares the newest with the releases downloaded on this
computer. It contacts the data server, so it is not run here. On a
computer where nothing has been downloaded yet, it prints:
check_fishbase_update()
#> FishBase
#> Latest online release: 26.06 (222 tables)
#> Downloaded locally: none
#> Run download_fishbase_data("fishbase") to download the latest release (or the tables of it that are missing).
#> SeaLifeBase
#> Latest online release: 26.06 (202 tables)
#> Downloaded locally: none
#> Run download_fishbase_data("sealifebase") to download the latest release (or the tables of it that are missing).| Argument | Meaning | Default |
|---|---|---|
server |
"fishbase", "sealifebase" or both |
both |
data_dir |
Folder where downloaded data is stored | fao_data_dir() |
quiet |
If TRUE, no message is printed |
FALSE |
It returns, invisibly, a data frame with one row per database:
| Column | Meaning |
|---|---|
server |
"fishbase" or "sealifebase"
|
latest_online |
Newest release online (NA when offline) |
newest_local |
Newest release downloaded (NA if none) |
tables_online |
Number of tables in the newest online release |
tables_local |
Number of tables downloaded of the newest local release |
update_available |
TRUE when a newer release is online, or when the newest
release is downloaded but not all of its tables |
Because of the second condition, update_available stays
TRUE after the default download of six tables (next
section). To see whether a newer release exists, compare
latest_online with newest_local.
⬇️ Download a release: download_fishbase_data()
download_fishbase_data() downloads the tables of a
FishBase and/or SeaLifeBase release to data_dir, so they
can be used offline. Downloading beforehand is optional: with
version = "latest", fishbase_match() and
mean_temperature_catch() download the four tables they need
the first time they run (about 23 MB for both databases with release
26.06). Download beforehand to work offline later, to keep one release
for a whole project, or to get every table.
download_fishbase_data() # the six tables the package uses, both databases
download_fishbase_data(tables = "all") # every table of FishBase and SeaLifeBase
download_fishbase_data("fishbase", tables = c("species", "estimate"))
download_fishbase_data(version = "25.04") # an earlier release| Argument | Meaning | Default |
|---|---|---|
server |
"fishbase", "sealifebase" or both |
both |
version |
The release to download, e.g. "26.06". A release that
is not online gives an error listing the releases that are |
"latest" |
tables |
"needed" for the six tables the package uses,
"all" for every table, or table names,
e.g. c("species", "estimate")
|
"needed" |
data_dir |
Folder where the tables are saved | fao_data_dir() |
overwrite |
If TRUE, tables already downloaded are downloaded
again |
FALSE |
quiet |
If TRUE, progress messages are not printed |
FALSE |
Sizes of release 26.06:
| Tables | FishBase | SeaLifeBase |
|---|---|---|
tables = "needed" (6 tables) |
15.8 MB | 13.2 MB |
The 4 tables used by fishbase_match()
|
12.6 MB | 10.3 MB |
tables = "all" |
222 tables, about 140 MB | 202 tables, about 108 MB |
The six tables of tables = "needed":
| Table | Content | Used by |
|---|---|---|
species |
Genus, species, family code, habitat (DemersPelag),
maximum length (Length), vulnerability to fishing
(Vulnerability) |
fishbase_match() |
estimate |
Trophic level (Troph, seTroph), preferred
temperature (TempPrefMean), prior r (prior_r,
lcl_r, ucl_r) |
fishbase_match(); the built-in CMSY++ prior table |
families |
Family, order, class and phylum | fishbase_match() |
synonyms |
Other names of each species with their status (accepted name, synonym, misapplied name, ambiguous synonym) | fishbase_match() |
stocks |
Resilience (High, Medium, Low, Very low) | the built-in CMSY++ prior table |
faoareas |
Occurrence of each species by FAO major fishing area |
Before downloading, the function prints what it will download, from
where, under which licence and to which folder. Each table is first
written as a .part file and renamed when it is complete.
Tables already downloaded (with the same size as online) are skipped, so
an interrupted download continues when the function is run again; tables
that fail give a warning.
It returns, invisibly, a data frame with one row per table:
server, version, table,
size (bytes) and status
("downloaded", "already downloaded" or
"failed").
📋 Read a table: fishbase_table()
fishbase_table() returns one table of FishBase or
SeaLifeBase as a data frame, read from the copy on this computer. When
the computer is online, it first looks up the newest release and
downloads the table if it is not there yet. When it is offline, or with
fao_settings(online = FALSE), it uses the newest downloaded
release that has the table, and says so. It is not run here, since it
needs downloaded tables; the output shown is that of release 26.06:
estimate <- fishbase_table("estimate")
#> Using FishBase release 26.06 (the latest online release).
attr(estimate, "fishbase_version")
#> [1] "26.06"
# European pilchard (Sardina pilchardus) is SpecCode 1350 in FishBase
estimate[estimate$SpecCode == 1350, c("SpecCode", "Troph", "seTroph", "TempPrefMean", "prior_r", "lcl_r", "ucl_r")]
#> SpecCode Troph seTroph TempPrefMean prior_r lcl_r ucl_r
#> 1243 1350 3.06 0.1 10.3 0.6281019 0.4145473 0.9421529
slb_species <- fishbase_table("species", server = "sealifebase", version = "26.06")| Argument | Meaning | Default |
|---|---|---|
table |
The table name, e.g. "species",
"estimate", "ecology", "synonyms"
or "families"
|
(required) |
server |
"fishbase" or "sealifebase"
|
"fishbase" |
version |
The release, e.g. "26.06"
|
"latest" |
data_dir |
Folder where downloaded data is stored | fao_data_dir() |
It returns the whole table, with every column (the FishBase 26.06
estimate table has 36,761 rows and 70 columns), and three
attributes: fishbase_server, fishbase_version
and source_url, the address of the parquet file. A table
that has been read is kept in memory for the rest of the R session.
check_fishbase_update() shows how many tables a release
has; the rfishbase
documentation describes what they contain.
🔗 Match the FAO species items: fishbase_match()
fishbase_match() goes through the FAO species items of
the data one by one. It looks each up in FishBase or SeaLifeBase by its
scientific name in the FAO species list, and returns the matched record
with its trophic level, preferred temperature, habitat, maximum length
and vulnerability to fishing. Each row gives the rule used and its
source, and links to the FishBase, SeaLifeBase or WoRMS pages, so that
the match can be checked. Items that no rule matches are left empty and
marked as failed, with links for searching the name online.
fb27 <- fishbase_match(FAO27$area_data, version = "builtin", corrections = FALSE)
#> FAO species items: 1029; matched 1001, failed 28, pending online check 0. Matched items cover 98.3% of the catch.corrections = FALSE leaves out any corrections saved on
this computer, so the example gives the same result everywhere. The
items are sorted by catch, so the first rows cover most of it:
main <- head(fb27, 15)
main$page <- ifelse(is.na(main$url), "", paste0("[open](", main$url, ")"))
show_table(main[, c("species_name", "fao_scientific_name", "catch_pct", "match_type", "database",
"temp_pref_mean", "trophic_level", "page")], n = 15)| species_name | fao_scientific_name | catch_pct | match_type | database | temp_pref_mean | trophic_level | page |
|---|---|---|---|---|---|---|---|
| Atlantic herring | Clupea harengus | 18.55 | exact | FishBase | 6.6 | 3.38 | open |
| Atlantic cod | Gadus morhua | 13.94 | exact | FishBase | 6.6 | 4.09 | open |
| Capelin | Mallotus villosus | 10.02 | exact | FishBase | 2.7 | 3.15 | open |
| Blue whiting(=Poutassou) | Micromesistius poutassou | 7.09 | exact | FishBase | 7.0 | 4.13 | open |
| Atlantic mackerel | Scomber scombrus | 6.19 | exact | FishBase | 10.2 | 3.63 | open |
| Sandeels(=Sandlances) nei | Ammodytes spp | 4.65 | genus | FishBase | NA | 3.16 | open |
| European sprat | Sprattus sprattus | 3.95 | exact | FishBase | 9.5 | 3.01 | open |
| Saithe(=Pollock) | Pollachius virens | 3.85 | exact | FishBase | 7.0 | 4.31 | open |
| Haddock | Melanogrammus aeglefinus | 3.56 | exact | FishBase | 8.4 | 4.03 | open |
| Norway pout | Trisopterus esmarkii | 2.11 | exact | FishBase | 7.8 | 3.68 | open |
| Brown seaweeds | Phaeophyceae | 2.11 | plant (TL 1) | SeaLifeBase | NA | 1.00 | open |
| European pilchard(=Sardine) | Sardina pilchardus | 1.67 | exact | FishBase | 10.3 | 3.06 | open |
| Atlantic redfishes nei | Sebastes spp | 1.62 | genus | FishBase | NA | 3.70 | open |
| Atlantic horse mackerel | Trachurus trachurus | 1.54 | exact | FishBase | 13.3 | 3.71 | open |
| European plaice | Pleuronectes platessa | 1.35 | exact | FishBase | 10.2 | 3.17 | open |
Species found under their FAO name (exact) get all
values. Items above species level, such as “Jack and horse mackerels
nei” (Trachurus spp), get the mean trophic level of their genus
or family but no preferred temperature. “Marine fishes nei” has no
values: its FAO name, Actinopterygii, is not found in FishBase, which
places these fishes in classes such as Teleostei, and WoRMS gives the
same name as valid. A value for such an item can be given in the
corrections file, with its source.
| Argument | Meaning | Default |
|---|---|---|
area_data |
FAO catch data: fishing_area_data()$area_data, or any
subset of load_fao_data()
|
NULL: all species in load_fao_data()
|
version |
The FishBase and SeaLifeBase release (see above): "latest", a release such as
"26.06", or "builtin"
|
"latest" |
corrections |
Path of a corrections file, or FALSE for none |
NULL: corrections.csv in the
fishbase folder of data_dir, created as an
empty template the first time |
table |
If TRUE, the table is saved as
tables/<label>_fishbase_match.csv
|
TRUE |
lang |
Language of the species_name column: "en",
"zh" or "both"
|
NULL: the language set with
fao_settings()
|
label |
Name used in the file name | The fishing area (or country) of the data |
data_dir |
Folder where downloaded data, corrections and WoRMS results are stored | fao_data_dir() |
It returns, invisibly, a data frame with one row per FAO species
item, sorted by catch. Its attribute fishbase_version gives
the releases used. The columns:
| Column | Meaning |
|---|---|
species_name, species_en
|
FAO name in the language chosen, and in English |
alpha3, fao_scientific_name
|
FAO 3-alpha code and scientific name |
taxon_level, major_group
|
Level of the item (species, genus, family, higher) and FAO major group (PISCES, CRUSTACEA, …) |
catch_tonnes, catch_pct,
cumulative_pct
|
Catch of the item over all years of the data, its share of the total catch and the cumulative share (%) |
status |
"matched", "failed" or
"pending online check"
|
match_type |
The rule that matched the item (next section) |
database, matched_name,
SpecCode
|
Database, name and species code of the record used |
n_species |
Number of species of the taxon, for items above species level |
trophic_level, trophic_level_se
|
Trophic level (Troph) and its standard error |
temp_pref_mean |
Preferred temperature (TempPrefMean, °C) |
habitat |
Habitat (DemersPelag, e.g. pelagic-neritic, demersal,
reef-associated) |
max_length_cm |
Maximum length (cm) |
vulnerability |
Vulnerability to fishing (FishBase index, out of 100) |
url |
FishBase or SeaLifeBase page of the record (species page, species list of the genus, family page, or a search) |
search_url, worms_url
|
Search of the FAO name in FishBase or SeaLifeBase, and its WoRMS page |
match_note, rule_source
|
Why an item was matched or not, and the published source of the rule |
source |
Database and release, with “(built-in table)” when the built-in table was used |
checked, note
|
Empty columns for recording your checks |
The trophic levels are the FishBase and SeaLifeBase estimates (table
estimate, column Troph). They come from diet
studies or, when there are none, from related species and body size
(Froese and Pauly 2000, “The FOOD ITEMS table”, boxes 25 and 26). The
preferred temperatures (TempPrefMean) are means over the
AquaMaps distribution of each species (FishBase reference 123201; Froese
2020); Cheung et al. (2013) used medians instead.
Matching rules
Fishes (FAO major group PISCES) are looked up in FishBase first and
all other items in SeaLifeBase first, following Branch et al. (2010,
Supplementary Information p. 1). The value of match_type
tells which rule matched an item:
match_type |
Rule | Values given | Source |
|---|---|---|---|
exact |
The FAO scientific name is a valid species name in the database | All | Branch et al. (2010) |
synonym |
The FAO name is a synonym (status “synonym”) of one valid species in the synonym table of the database. Misapplied names are never used, since they are misidentifications, not other names of the species; ambiguous synonyms, and names that point to several species, are not matched | All | Froese and Pauly (2000), “The SYNONYMS table” |
WoRMS valid name (...) |
A name not found by the rules above is looked up online in the World
Register of Marine Species (WoRMS), which the FAO ASFIS list follows for
most groups. Only an exact WoRMS record with status “accepted”, or with
a single valid name, is used; the valid name is then matched again, and
the rule it matched is given in brackets,
e.g. WoRMS valid name (exact)
|
As for that rule | FAO (2026), pp. 1–3; WoRMS Editorial Board |
genus, family, order,
class, phylum
|
An item above species level (e.g. “Sardinella spp” or “Sparidae”) takes the unweighted mean trophic level of the species of that taxon in the database | Trophic level only | Branch et al. (2010); Liang and Pauly (2017) |
plant (TL 1) |
Aquatic plants (FAO major group PLANTAE AQUATICAE) | Trophic level 1 | Pauly et al. (1998) |
manual |
A correction in the corrections file | The values or record given | Your source, in note
|
not matched |
Species not found (the values of their genus are not used), items that name several taxa (e.g. “Sepiidae, Sepiolidae”), WoRMS records that are uncertain or several | None (status is "failed") |
No published rule for these cases |
Temperature preference, habitat, length and vulnerability are left
empty for items above species level, since studies of the mean
temperature of the catch leave these items out (Tsikliras and Stergiou
2014; Liang et al. 2018). Results of the WoRMS look-ups are saved in
worms_lookup.csv and reused when the computer is offline; a
name not looked up before is then marked
"pending online check". The built-in table was made online,
so its items have all been looked up.
Coverage of the catch
The share of the catch matched depends on how the catch is reported.
catch_pct is the share of the total catch of all years in
the data:
# Share of the catch (%) by kind of match
round(sort(tapply(fb27$catch_pct, fb27$match_type, sum), decreasing = TRUE), 1)
#> exact genus plant (TL 1) not matched family order
#> 86.3 7.8 3.0 1.7 0.8 0.2
#> class phylum synonym
#> 0.1 0.0 0.0
# Share of the catch (%) of species-level items with a preferred temperature
species_level <- c("exact", "synonym", "WoRMS valid name (exact)", "WoRMS valid name (synonym)")
round(sum(fb27$catch_pct[fb27$match_type %in% species_level & !is.na(fb27$temp_pref_mean)]), 1)
#> [1] 86.2In area 27, matched items make up 98% of the catch. Genus and family
items have a trophic level only; species-level items with a preferred
temperature make up 86%, and this is the part of the catch that the mean
temperature of the catch can use. The coverage also changes from year to
year; mean_temperature_catch() shows it for each year (see
below).
Check and correct the matches
The matches are made automatically and are not checked by the package. Names do not always agree between databases: FAO ASFIS names change slowly, FishBase, SeaLifeBase and WoRMS follow different classifications, and synonyms and misspellings are common (Grenié et al. 2023). Before using the values:
- Open the table saved in
tables/(heretables/Atlantic__Northeast_fishbase_match.csv). The items are sorted by catch, so the first rows matter most. - For each item, open
url(the record used),search_urlandworms_url, and readmatch_noteandrule_source. Check that the record is the FAO item, and that its values are plausible for the stock in the area. - Write who checked it, or the date, in
checked. Correct wrong or missing values in a corrections file, with their source.
A corrections file is a CSV file with one row per FAO item to correct:
| Column | Meaning |
|---|---|
alpha3 |
FAO 3-alpha code of the item (required) |
species_en |
FAO English name (optional, for reading the file) |
database, SpecCode
|
"FishBase" or "SeaLifeBase", and the
species code of the record to use; its values are then read from the
downloaded tables |
trophic_level, temp_pref_mean,
habitat, max_length_cm,
vulnerability
|
Values to use directly (they replace those of the record) |
note |
The source of the correction |
By default fishbase_match() reads
corrections.csv in the fishbase folder of
data_dir, and creates an empty one there the first time.
Corrections are applied every time the function runs, so a team that
shares data_dir shares them. A corrected item gets
status “matched”, match_type “manual”, and its
rule_source gives the file and the note.
As an example, “Frigate and bullet tunas” names two species (Auxis thazard and A. rochei), so no rule matches it. Here it is given the values of frigate tuna, the first of the two, from the match of the item “Frigate tuna”. Whether such a value fits an item has to be judged by you; the note says where it comes from:
fri <- fb27[fb27$alpha3 == "FRI", ]
fix <- data.frame(alpha3 = "FRZ", species_en = "Frigate and bullet tunas",
trophic_level = fri$trophic_level, temp_pref_mean = fri$temp_pref_mean,
note = paste("Values of Auxis thazard,", fri$source, "SpecCode", fri$SpecCode))
write.csv(fix, "my_corrections.csv", row.names = FALSE)
fb27_fixed <- fishbase_match(FAO27$area_data, version = "builtin", corrections = "my_corrections.csv")
#> Applied 1 correction(s) from my_corrections.csv
#> FAO species items: 1029; matched 1002, failed 27, pending online check 0. Matched items cover 98.3% of the catch.
show_table(fb27_fixed[fb27_fixed$alpha3 == "FRZ", c("species_name", "status", "match_type", "trophic_level",
"temp_pref_mean", "rule_source")])| species_name | status | match_type | trophic_level | temp_pref_mean | rule_source | |
|---|---|---|---|---|---|---|
| 172 | Frigate and bullet tunas | matched | manual | 4.37 | 22 | Manual correction (my_corrections.csv): Values of Auxis thazard, FishBase 26.06 (built-in table) SpecCode 94 |
With downloaded tables, a correction can instead name the record to
use, and all its values are read from it. The built-in table cannot look
up a SpecCode, so with version = "builtin"
give the values themselves:
fix <- data.frame(alpha3 = "FRZ", database = "FishBase", SpecCode = 94,
note = "Record of Auxis thazard; give your source here")
write.csv(fix, "my_corrections.csv", row.names = FALSE)
fishbase_match(FAO27$area_data, version = "26.06", corrections = "my_corrections.csv")mean_temperature_catch(), and fao_report()
through it, run fishbase_match() with the default
corrections file. Corrections meant for them therefore belong in
corrections.csv in the fishbase folder of
data_dir (add rows to it with a spreadsheet program), or in
a checked match table given with match =
(mtc_match = in fao_report()).
📜 Sources and licences: fishbase_sources()
fishbase_sources() lists where the FishBase, SeaLifeBase
and WoRMS data come from, their licences and how to cite them, the
tables downloaded and what they hold, and the matching rules of
fishbase_match() with their published sources.
download_fishbase_data() prints a summary of the same
information.
| Argument | Meaning | Default |
|---|---|---|
print |
If TRUE, the list is printed |
TRUE |
It returns, invisibly, a data frame with one row per data source,
table or rule, and the columns type ("data",
"table" or "rule"), item,
description, source (citation or licence) and
link. The data sources:
src <- fishbase_sources(print = FALSE)
show_table(src[src$type == "data", c("item", "description", "source", "link")])| item | description | source | link | |
|---|---|---|---|---|
| 1 | FishBase | Fishes: names, classification, ecology, trophic level, temperature preference, resilience | Froese, R. and Pauly, D. (Eds.) FishBase. www.fishbase.se. Licence CC BY-NC 4.0 (FishBase.org team): cite, no commercial use | https://www.fishbase.se |
| 2 | SeaLifeBase | Other aquatic animals and plants: the same tables as FishBase | Palomares, M.L.D. and Pauly, D. (Eds.) SeaLifeBase. www.sealifebase.se. Licence CC BY-NC 4.0 (FishBase.org team) | https://www.sealifebase.se |
| 3 | Snapshots | Versioned copies of the FishBase and SeaLifeBase tables as parquet files, the files downloaded by the package | Published by the rfishbase project of rOpenSci (Boettiger et al. 2012, J. Fish Biol. 81(6): 2030-2039, doi:10.1111/j.1095-8649.2012.03464.x) | https://data.source.coop/cboettig/fishbase/ |
| 4 | rfishbase | R package that publishes the snapshots and reads them; faofishingreport reads the same files directly, without depending on it | Boettiger, C., Lang, D.T. and Wainwright, P.C. (2012). J. Fish Biol. 81(6): 2030-2039. Source code and documentation: https://github.com/ropensci/rfishbase, https://docs.ropensci.org/rfishbase/ | https://github.com/ropensci/rfishbase |
| 5 | WoRMS | Valid names of species and taxa, looked up online for names not found in FishBase or SeaLifeBase | WoRMS Editorial Board. World Register of Marine Species. VLIZ. doi:10.14284/170. Licence CC BY | https://www.marinespecies.org |
| 19 | Built-in table | Used only when FishBase cannot be reached and has not been downloaded: FishBase 26.06, SeaLifeBase 26.06, made on 2026-10-10 for the 3797 species items of FAO release 2026.1.0 | Made by data-raw/build_fishbase_traits.R with the rules above; CC BY-NC 4.0 (FishBase.org team) |
🌡️ Use in the mean temperature of the catch
mean_temperature_catch()
computes the mean temperature of the catch (MTC): the mean preferred
temperature of the species caught, weighted by their catch (Cheung et
al. 2013). It takes the preferred temperatures from
fishbase_match(), which it runs with its own
version and data_dir (applying the corrections
file), or from a match table given with match =. Only items
with status “matched” and a match_type in
use_match are used; by default exact,
synonym, WoRMS valid name (exact),
WoRMS valid name (synonym) and manual. Genus
and family items have no preferred temperature and are not used.
Here the corrected table of the example above is given with
match =, so the frigate and bullet tunas are now used:
mtc <- mean_temperature_catch(FAO27$area_data, match = fb27_fixed)
show_table(mtc$species[mtc$species$used, c("species_name", "match_type", "temp_pref_mean", "catch_pct",
"weight_pct", "contribution_c")], n = 8)| species_name | match_type | temp_pref_mean | catch_pct | weight_pct | contribution_c | |
|---|---|---|---|---|---|---|
| 1 | Atlantic herring | exact | 6.6 | 18.55 | 21.52 | 1.42 |
| 2 | Atlantic cod | exact | 6.6 | 13.94 | 16.17 | 1.07 |
| 3 | Capelin | exact | 2.7 | 10.02 | 11.62 | 0.31 |
| 4 | Blue whiting(=Poutassou) | exact | 7.0 | 7.09 | 8.22 | 0.58 |
| 5 | Atlantic mackerel | exact | 10.2 | 6.19 | 7.18 | 0.73 |
| 7 | European sprat | exact | 9.5 | 3.95 | 4.58 | 0.44 |
| 8 | Saithe(=Pollock) | exact | 7.0 | 3.85 | 4.46 | 0.31 |
| 9 | Haddock | exact | 8.4 | 3.56 | 4.13 | 0.35 |
match = takes a data frame or the path of a CSV file:
the table saved by fishbase_match(), or the species table
of an earlier run of mean_temperature_catch(), after
checking it. Items marked in checked count as checked;
until all items used are checked, the function says how much of the
catch has been checked, and the chart caption says that the values are
automatic first matches. Without match =, the default
version = "latest" downloads the tables it needs the first
time (about 23 MB):
mtc <- mean_temperature_catch(FAO27$area_data) # newest FishBase release
mtc <- mean_temperature_catch(FAO27$area_data, version = "builtin") # built-in table, no download
mtc <- mean_temperature_catch(FAO27$area_data, match = "tables/Atlantic__Northeast_fishbase_match.csv")The article 🌡️ Sea temperature and catch temperature explains the SST data, the trends, and the limitations of the preferred temperatures.
📉 Use in the CMSY++ priors
CMSY++ needs a prior range for the intrinsic growth rate r of each
stock. cmsy_priors() searches a second built-in table
(inst/extdata/cmsy_priors.csv, made by
data-raw/cmsy_priors.R) with the resilience (table
stocks) and the prior r (table estimate) of
the species-level items of the FAO capture statistics in FishBase or
SeaLifeBase 26.06. It works offline:
p27 <- cmsy_priors(c("HER", "WHB", "MAC", "COD"))
show_table(p27[, c("species_name", "matched_name", "match_type", "resilience", "prior_r",
"r_low", "r_high", "r_source")], digits = 3)| species_name | matched_name | match_type | resilience | prior_r | r_low | r_high | r_source |
|---|---|---|---|---|---|---|---|
| Atlantic cod | Gadus morhua | exact | Medium | 0.509 | 0.336 | 0.764 | FishBase prior r, 95% CL (Based on 66 full stock assessments.) |
| Atlantic herring | Clupea harengus | exact | Medium | 0.436 | 0.288 | 0.654 | FishBase prior r, 95% CL (Based on 53 full stock assessments.) |
| Atlantic mackerel | Scomber scombrus | exact | Medium | 0.429 | 0.283 | 0.644 | FishBase prior r, 95% CL (Based on 10 full stock assessments.) |
| Blue whiting(=Poutassou) | Micromesistius poutassou | exact | Medium | 0.465 | 0.307 | 0.698 | FishBase prior r, 95% CL (Based on 9 full stock assessments.) |
The r range follows the CMSY++ user guide (Froese et al. 2021): the
95% confidence limits of the FishBase prior r when the species has one
(Table 1); otherwise the range of its resilience (Table 2: High 0.6–1.5,
Medium 0.2–0.8, Low 0.05–0.5, Very low 0.015–0.1); otherwise none, and
the prior has to come from the user. This table is matched more strictly
than fishbase_match(): fishes are looked up in FishBase
first and other items in SeaLifeBase first, as valid species names and
then through the synonym table of the database, but there is no WoRMS
look-up, and ambiguous synonyms and items above species level get no
values (match_type “ambiguous synonym”, “not a species” or
“not found”). The corrections file of fishbase_match() does
not change it; priors of your own are given with priors =
in cmsy_input(). See 📉 CMSY++ stock
assessment, step 3.
📝 In the Word report
The Word report of an area can include a section on the mean
temperature of the catch (fao_report(27, mtc = TRUE)). It
uses the built-in FishBase table by default
(mtc_version = "builtin"), so writing the report downloads
nothing; give another release with mtc_version,
e.g. mtc_version = "latest". The table of species used,
with their FishBase matches, is returned as
report$mtc_species, and the report cites the FishBase
release used. See 📝 Word report.
report <- fao_report(27, mtc = TRUE)
head(report$mtc_species[, c("species_name", "match_type", "temp_pref_mean", "used", "url")])
fao_report(27, mtc = TRUE, mtc_version = "latest") # newest FishBase release📖 References
Boettiger, C., Lang, D.T. and Wainwright, P.C. (2012). rfishbase: exploring, manipulating and visualizing FishBase data from R. Journal of Fish Biology 81(6): 2030–2039. doi:10.1111/j.1095-8649.2012.03464.x. Source code: https://github.com/ropensci/rfishbase
Branch, T.A., Watson, R., Fulton, E.A., Jennings, S., McGilliard, C.R., Pablico, G.T., Ricard, D. and Tracey, S.R. (2010). The trophic fingerprint of marine fisheries. Nature 468: 431–435. doi:10.1038/nature09528
Cheung, W.W.L., Watson, R. and Pauly, D. (2013). Signature of ocean warming in global fisheries catch. Nature 497: 365–368. doi:10.1038/nature12156
FAO (2026). Nomenclature, revision, and references of the ASFIS list (version 2026). Rome: FAO. https://www.fao.org/fishery/static/ASFIS/ASFIS_References_2026_EN.pdf
Froese, R. (2020). Personal communication: R code (PrefTempBatch_5.R) to estimate preferred temperature from AquaMaps (version 10/2019). FishBase reference 123201. https://www.fishbase.se/references/FBRefSummary.php?ID=123201
Froese, R., Demirel, N., Coro, G. and Winker, H. (2021). User Guide for CMSY++. GEOMAR, Germany, 17 pp. https://oceanrep.geomar.de/id/eprint/52147/
Froese, R. and Pauly, D. (Eds.) (2000). FishBase 2000: concepts, design and data sources. ICLARM, Los Baños, Philippines. Chapters “The SYNONYMS table” (https://www.fishbase.se/manual/fishbasethe_synonyms_table.htm) and “The FOOD ITEMS table”, boxes 25 and 26 (https://www.fishbase.se/manual/fishbasethe_food_items_table.htm).
Froese, R. and Pauly, D. (Eds.) (2026). FishBase. World Wide Web electronic publication. Version (06/2026). https://www.fishbase.se
Grenié, M., Berti, E., Carvajal-Quintero, J., Dädlow, G.M.L., Sagouis, A. and Winter, M. (2023). Harmonizing taxon names in biodiversity data: a review of tools, databases and best practices. Methods in Ecology and Evolution 14: 12–25. doi:10.1111/2041-210X.13802
Liang, C. and Pauly, D. (2017). Fisheries impacts on China’s coastal ecosystems: unmasking a pervasive ‘fishing down’ effect. PLoS ONE 12: e0173296. doi:10.1371/journal.pone.0173296
Liang, C., Xian, W. and Pauly, D. (2018). Impacts of ocean warming on China’s fisheries catches: an application of “mean temperature of the catch” concept. Frontiers in Marine Science 5: 26. doi:10.3389/fmars.2018.00026
Palomares, M.L.D. and Pauly, D. (Eds.) (2026). SeaLifeBase. World Wide Web electronic publication. Version (06/2026). https://www.sealifebase.se
Pauly, D., Christensen, V., Dalsgaard, J., Froese, R. and Torres, F. (1998). Fishing down marine food webs. Science 279: 860–863. doi:10.1126/science.279.5352.860
Tsikliras, A.C. and Stergiou, K.I. (2014). Mean temperature of the catch increases quickly in the Mediterranean Sea. Marine Ecology Progress Series 515: 281–284. doi:10.3354/meps11005
WoRMS Editorial Board. World Register of Marine Species. Flanders Marine Institute (VLIZ). https://www.marinespecies.org, doi:10.14284/170
