Skip to contents

SHARK4R (development version)

New features

  • Added calc_zooplankton_dry_weight() to calculate zooplankton dry weight from "Length (mean)" using AphiaID-based taxa-specific coefficients from inst/extdata/Mesozooplankton_Kattegat_Skagerrak_taxa_and_biomass_calculations.xlsx. The function uses adult coefficients for non-NP stages, taxon-specific nauplii coefficients where available, and otherwise falls back to the general copepod nauplii coefficients.
  • Added calc_zooplankton_biomass() to calculate zooplankton biomass concentration (mg/m3) from "Abundance" and integrated biomass (mg/m2) from "Integrated abundance" by combining abundance with per-individual dry weight on the SHARK observation key (platform_code, station_name, sample_date, sample_time, sample_min_depth_m, sample_max_depth_m, aphia_id, sex_code, dev_stage_code, size_class). If dry-weight rows are not present, they are calculated internally via calc_zooplankton_dry_weight().
  • Added create_pie_map(), a general-purpose pie chart map for station data with automatic pie displacement and leader lines to prevent overlap in crowded regions. Works with any grouping (phytoplankton groups, zooplankton orders, microbial phyla, …) and any numeric value (biomass, biovolume, abundance, …). The optional default coastline basemap uses rnaturalearth (Suggests); HTML-formatted legend labels use ggtext (Suggests).
  • The shark-qc Shiny app has been rebuilt on bslib (Bootstrap 5) for a modernized UI, with improved server-side error handling so transient failures surface as user-facing notifications instead of crashing the session.

Minor improvements and fixes

  • All user-facing console output has been migrated from base R (stop(), warning(), message(), cat(), txtProgressBar) to the cli package. Errors use cli_abort(), warnings use cli_warn(), and informational messages use cli_inform(), all with structured bullet lists and inline markup for arguments, values, file paths, and function names. Progress bars in long-running API functions are replaced with cli_progress_bar().
  • Threshold values previously defined in R/zzz.R are now bundled as inst/extdata/threshold_values.csv and loaded at runtime, removing several package-level global variables.
  • All internal cache paths now consistently redirect to tempdir() during R CMD check, extending the cache_dir() redirect to the remaining call sites in R/util.R.
  • Removed unused arguments from defunct functions in R/defunct.R and updated their documentation accordingly.
  • CI workflow updated to install required spatial libraries and configure PROJ on the macOS runner.
  • Bumped GitHub Actions to versions running on Node.js 24 to clear the Node 20 deprecation warnings: actions/checkout@v6, actions/upload-artifact@v7, codecov/codecov-action@v6, and JamesIves/github-pages-deploy-action@v4.8.0.

SHARK4R 1.1.1

CRAN release: 2026-03-12

CRAN compliance

  • All vignettes that call external APIs now use a hidden availability check followed by try()-protected execution chunks, so transient server errors (502, 503, 500) never cause vignette rebuild failures. The user-facing code shown on pkgdown remains clean and uncluttered.
  • Added skip_if_offline() and skip_if_resource_unavailable() guards to previously unprotected tests for deprecated WoRMS wrappers (match_wormstaxa, update_worms_taxonomy) and the empty/NA input edge case (match_worms_taxa(c("", NA))).
  • Added skip_on_cran() to deprecated WoRMS wrapper tests, since the base-URL availability check can pass while individual API endpoints return server errors.
  • Added skip_if_offline() to the "wrong url fails" test in test-xylookup.R.

SHARK4R 1.1.0

CRAN release: 2026-03-09

New features

Security improvements

  • load_shark4r_fields() now downloads field definitions as a binary .rds file instead of sourcing a remote R script, eliminating a remote code execution risk.
  • get_shark_data() now validates that file_path does not contain .. path components, preventing path traversal when used in downstream applications.
  • get_shark_datasets() now sanitizes dataset names from the API with basename() before writing to disk.

Bug fixes and CRAN compliance

  • Fixed species not getting properly matched in match_algaebase_taxa(). The join between API results and input data used left_join(by = c("genus", "species")), which silently dropped results when AlgaeBase returned a reclassified genus (e.g., querying “Chlorella” but API returns “Auxenochlorella”). (Part of #47)
  • Fixed match_algaebase_genus() returning unrelated genera when exact_matches_only = TRUE. A variable shadowing bug inside tibble() caused the input_match column to always equal 1, making the exact match filter ineffective. For example, querying “Nitzschia” returned 7 genera (Cymbellonitzschia, Pseudo-nitzschia, etc.) instead of just Nitzschia. (Part of #47)
  • Fixed genus column collision in match_algaebase_species(). When higher taxonomy was requested, genus = genus_taxonomy$genus was included in the taxonomy tibble, which could overwrite the species-level genus value. (Part of #47)
  • Removed genus fallback in match_algaebase_taxa() for species-level queries. Previously, when a species was not found in AlgaeBase, the function fell back to a genus-level query. This produced misleading results where a species record linked to an unrelated genus page. Species queries that fail now return NA instead. (Part of #47)
  • Fixed get_dyntaxa_records() silently returning a character string on API error instead of raising a condition with stop().
  • Fixed get_shark_data() silently dropping municipalities, waterCategories, and typOmraden parameters when computing the pre-download row count, which could bypass the chunked download path.
  • Fixed operator precedence bug nrow(genus > 0) to nrow(genus) > 0 in construct_dyntaxa_missing_table().
  • Replaced unsafe 1:length() and 1:nrow() loops with seq_along() and seq_len() in construct_dyntaxa_missing_table() and construct_dyntaxa_table() to prevent errors on zero-length input.
  • Replaced message("ERROR: ...") calls with warning() in check_value_logical(), check_zero_value(), check_zero_positions(), check_codes(), and read_shark_deliv() so conditions can be caught programmatically with tryCatch().
  • Removed duplicate cachefile assignment in cache_call() and dead list.files() call in list_cache().
  • All internal cache paths now use the cache_dir() helper, which redirects to tempdir() during R CMD check. Previously several functions called tools::R_user_dir() directly, which could create ~/.cache/R/SHARK4R during CRAN checks.
  • Fixed evaluation order bug in clean_shark4r_cache() where search_pattern = NULL (the default) could cause an error.
  • Fixed deprecation warning version numbers in algaebase functions (now correctly reference 1.0.0).
  • Fixed spelling of “Microalgae” and other minor typos in get_hab_list() documentation.
  • get_hab_list() updated to wrap inline text with I() in readr::read_delim() for readr ≥ 2.2.0 compatibility and to remove deprecation warnings.
  • Tests that depend on the OBIS xylookup API now skip correctly when the endpoint returns a server error. Previously, the availability check targeted the base URL (https://api.obis.org/) which could return 200 while the /xylookup endpoint itself returned 500.
  • All \donttest{} examples that call external APIs are now wrapped with try() so that transient service outages do not cause R CMD check --run-donttest failures.
  • The quality_control vignette now wraps OBIS-dependent calls (check_onland(), check_depth()) in tryCatch() so the vignette builds even when the API is unavailable.

SHARK4R 1.0.3

CRAN release: 2026-01-14

New features

  • Added a new harmful_non_toxic_only argument to get_hab_list() to download only non-toxigenic harmful microalgal species from the IOC-UNESCO HABs list
  • Added a new species_only argument to get_hab_list() to return only species-level records, which is now also the default option. This filter is ignored when harmful_non_toxic_only = TRUE
  • Added a new verbose argument to positions_are_near_land() and get_hab_list(harmful_non_toxic_only = TRUE) to enable printing of progress messages during data retrieval

Minor improvements and fixes

  • EEA coastline data are now obtained from EEA map services in positions_are_near_land(), replacing direct file server downloads that were unstable
  • All data frame outputs are now consistently returned as tibbles
  • Documentation updated with minor clarifications and corrections

SHARK4R 1.0.2

CRAN release: 2025-12-12

Bug fixes

  • SHARK4R:::.type_lookup now includes the missing datatype Jellyfish (#39)
  • Enhanced documentation and example execution in vignettes - updated examples to run correctly and improved clarity in vignettes and help files
  • HTML widgets and interactive objects are now displayed only in pkgdown articles; they are suppressed in CRAN vignettes to reduce size and improve build safety
  • Added tests for helper functions – covering extract_complete_toxins() and repair_toxins_json()
  • Cache is now cleared after R CMD check

SHARK4R 1.0.1

CRAN release: 2025-12-09

Bug fixes and CRAN compliance

  • Corrected formatting of package and software names throughout the package.
  • Fixed broken URL in README.md
  • Improved examples to run reliably and quickly
  • Ensured functions and examples no longer write to the user’s home directory
  • Added lon and lat arguments to the lookup_xy() function for more flexible lookup options
  • Minor documentation improvements throughout the package
  • get_toxin_list() now handles partial JSON responses

SHARK4R 1.0.0

New features

Enhancements

Deprecated

Defunct / Removed

Documentation

  • Add NEWS.md file
  • Add spell check

SHARK4R 0.1.7

SHARK4R 0.1.6

Patch release

  • Fix issue #16
  • Add unparsed output option for get_shark_option()

SHARK4R 0.1.5

Patch release

SHARK4R 0.1.4

  • Add algaebase API functions
  • Defunct sharkdata functions
  • Fix parsing issue in shark_data when data are reported as “-”, which is now a NA pattern
  • Cleanup of large files
  • UTF-8 encoding

SHARK4R 0.1.3

  • Minor bug-fixes and updated documentation

SHARK4R 0.1.2

  • Patch release

SHARK4R 0.1.1

  • Fix download of large datasets
  • Add more WoRMS functionality, including plankton group assignment

SHARK4R 0.1.0

  • Add SHARK API functionality
  • Improve Dyntaxa API functionality
  • Fix documentation issues

SHARK4R 0.0.1

  • Initial development version.