# Changelog

## AMR 3.0.1.9087

Planned as v3.1.0, end of September 2026.

#### Breaking Changes

- The former *kingdoms* Bacteria and Archaea are now each divided into
  four kingdoms with new top-level *domains* ‘Bacteria’ and ‘Archaea’
  (Göker and Oren, 2024, DOI: 10.1099/ijsem.0.006242). Following this, a
  new `domain` column in the `microorganisms` data set was added, and
  more importantly,
  [`mo_kingdom()`](https://amr-for-r.org/reference/mo_property.md) now
  returns the formal kingdom (e.g. `"Pseudomonadati"` instead of
  `"Bacteria"`). Use
  [`mo_domain()`](https://amr-for-r.org/reference/mo_property.md) for
  the old behaviour. For non-prokaryotic kingdoms (Fungi, Protozoa,
  etc.), `kingdom` and `domain` are identical.

  | [`mo_kingdom()`](https://amr-for-r.org/reference/mo_property.md) \< 3.1.0 | [`mo_kingdom()`](https://amr-for-r.org/reference/mo_property.md) now | [`mo_domain()`](https://amr-for-r.org/reference/mo_property.md) (unchanged) |
  |----|----|----|
  | Bacteria | Bacillati | Bacteria |
  |  | Fusobacteriati | Bacteria |
  |  | Pseudomonadati | Bacteria |
  |  | Thermotogati | Bacteria |
  |  |  |  |
  | Archaea | Methanobacteriati | Archaea |
  |  | Nanobdellati | Archaea |
  |  | Promethearchaeati | Archaea |
  |  | Thermoproteati | Archaea |
  |  |  |  |
  | Fungi | Fungi | Fungi |
  |  |  |  |
  | Protozoa | Protozoa | Protozoa |

  Thus, [`mo_domain()`](https://amr-for-r.org/reference/mo_property.md)
  was previously an alias of
  [`mo_kingdom()`](https://amr-for-r.org/reference/mo_property.md); it
  is now a distinct function returning the domain. Output of
  [`mo_domain()`](https://amr-for-r.org/reference/mo_property.md) is
  therefore unchanged, while
  [`mo_kingdom()`](https://amr-for-r.org/reference/mo_property.md) now
  returns the formal, new kingdom.

- Faster parallel computing via the `future` package for
  [`as.sir()`](https://amr-for-r.org/reference/as.sir.md) and
  [`wisca()`](https://amr-for-r.org/reference/antibiogram.md): a
  non-sequential plan (e.g. `future::plan(future::multisession)`) must
  be active before using `parallel = TRUE`.

#### New

- EUCAST 2026 and CLSI 2026 breakpoints: over 5,700 new breakpoints
  added to the `clinical_breakpoints` data set; EUCAST 2026 is now the
  default for all MIC and disk diffusion interpretations
- Wildtype/Non-wildtype (WT/NWT) output when using ECOFF-based
  interpretation, by setting `breakpoint_type = "ECOFF"` in
  [`as.sir()`](https://amr-for-r.org/reference/as.sir.md); WT/NWT
  results are fully supported in all resistance/susceptibility functions
  and plots ([\#254](https://github.com/msberends/AMR/issues/254))
- *tidymodels* integration for using SIR, MIC and disk data in modelling
  pipelines:
  [`step_mic_log2()`](https://amr-for-r.org/reference/amr-tidymodels.md),
  [`step_sir_numeric()`](https://amr-for-r.org/reference/amr-tidymodels.md),
  and new column selectors
  [`all_sir()`](https://amr-for-r.org/reference/amr-tidymodels.md),
  [`all_mic()`](https://amr-for-r.org/reference/amr-tidymodels.md),
  [`all_disk()`](https://amr-for-r.org/reference/amr-tidymodels.md)
- New `esbl_isolates` data set for practising AMR modelling
- New antimicrobial selectors:
  [`ionophores()`](https://amr-for-r.org/reference/antimicrobial_selectors.md),
  [`peptides()`](https://amr-for-r.org/reference/antimicrobial_selectors.md),
  [`phosphonics()`](https://amr-for-r.org/reference/antimicrobial_selectors.md),
  [`spiropyrimidinetriones()`](https://amr-for-r.org/reference/antimicrobial_selectors.md)
- New antimicrobials: cefepime/taniborbactam (`FTA`),
  ceftibuten/avibactam (`CTA`), clorobiocin (`CLB`), kasugamycin
  (`KAS`), ostreogrycin (`OST`), taniborbactam (`TAN`), thiostrepton
  (`THS`), xeruborbactam (`XER`), zorbamycin (`ZOR`)
- New
  [`interpretive_rules()`](https://amr-for-r.org/reference/interpretive_rules.md),
  a unified function for EUCAST and CLSI interpretive rules;
  [`eucast_rules()`](https://amr-for-r.org/reference/interpretive_rules.md)
  is now a wrapper around it
  ([\#235](https://github.com/msberends/AMR/issues/235),
  [\#259](https://github.com/msberends/AMR/issues/259))
- New `morphology` column in the `microorganisms` data set and
  corresponding
  [`mo_morphology()`](https://amr-for-r.org/reference/mo_property.md)
  function, returning the cell shape of bacteria. Data sourced from
  BacDive; values prefixed with “likely” are extrapolated from
  genus-level consensus. New `add_morphology` argument was added to
  [`mo_gramstain()`](https://amr-for-r.org/reference/mo_property.md) to
  return combined results such as `"Gram-negative rods"`.
- New [`amr_course()`](https://amr-for-r.org/reference/amr_course.md) to
  download and unpack course or webinar materials from GitHub in one
  call
- Typed missing value constants `NA_ab_` and `NA_mo_`, for use in
  pipelines that need missing values of a specific class
- New [`wisca_plot()`](https://amr-for-r.org/reference/antibiogram.md)
  to assess the susceptibility and incidence distributions from the
  Monte Carlo simulations

#### Fixed

- Setting `options(AMR_guideline = "EUCAST 2012")` or any year-qualified
  value no longer causes errors or silent wrong behaviour in
  [`interpretive_rules()`](https://amr-for-r.org/reference/interpretive_rules.md),
  [`resistance()`](https://amr-for-r.org/reference/proportion.md),
  [`susceptibility()`](https://amr-for-r.org/reference/proportion.md),
  [`count_resistant()`](https://amr-for-r.org/reference/count.md),
  [`count_susceptible()`](https://amr-for-r.org/reference/count.md), and
  SIR plotting/printing functions
  ([\#298](https://github.com/msberends/AMR/issues/298))
- [`as.sir()`](https://amr-for-r.org/reference/as.sir.md)
  - On data frames: already-converted SIR columns no longer dropped on
    re-run ([\#278](https://github.com/msberends/AMR/issues/278))
  - Metadata columns (e.g. `patient`, `ward`) no longer misidentified as
    antibiotic columns
  - `info = FALSE` now suppresses all messages, including for columns
    without breakpoints
  - Assumption of disk zones are now preferred over MIC values when
    input is only whole numbers
    ([\#291](https://github.com/msberends/AMR/issues/291))
- [`as.mic()`](https://amr-for-r.org/reference/as.mic.md): values in
  scientific notation (e.g. `1e-3`) now handled correctly
- [`as.ab()`](https://amr-for-r.org/reference/as.ab.md): codes
  containing “PH” or “TH” (e.g. `ETH`, `PHE`) no longer return `NA` when
  mixed with unrecognised input
  ([\#245](https://github.com/msberends/AMR/issues/245))
- Combined MIC/SIR input values (e.g. `"<= 0.002; S"` or `"S; 0.002"`)
  now parsed correctly
  ([\#252](https://github.com/msberends/AMR/issues/252))
- [`as.mo()`](https://amr-for-r.org/reference/as.mo.md):
  - Input of the form `"X complex"` now falls back to `"X"` when the
    complex is not a distinct taxon in the database, preventing `NA`
    results for valid clinical descriptions such as
    `"Proteus vulgaris complex"`
    ([\#287](https://github.com/msberends/AMR/issues/287))
  - Abbreviated-genus input (e.g. `"S. apiospermum"`) now correctly
    ranks candidates whose species epithet exactly matches the input
    above more-prevalent organisms whose species does not match; fixes
    `"S. apiospermum"` resolving to *Staphylococcus* instead of
    *Scedosporium apiospermum*
    ([\#288](https://github.com/msberends/AMR/issues/288))
  - Abbreviated-genus input for species that have subspecies
    (e.g. `"P. ovale"`) now collapses to the species-rank record instead
    of incorrectly matching a more-prevalent organism; explicit
    subspecies queries (e.g. `"P. ovale curtisi"`) are preserved
    ([\#288](https://github.com/msberends/AMR/issues/288))
- `get_author_year()` in the microorganism reproduction script now
  strips `emend.` and everything after it, so `ref` reflects the
  combination authority rather than the emendation author
  (e.g. *Rhodococcus equi* now returns “Goodfellow et al., 1977” instead
  of “Nouioui et al., 2018”)
- BRMO classification now includes bacterial complexes
  ([\#275](https://github.com/msberends/AMR/issues/275))
- Translation fixes for Italian CoNS/CoPS names
  ([\#256](https://github.com/msberends/AMR/issues/256)), Dutch
  antimicrobials, and
  [`sir_df()`](https://amr-for-r.org/reference/proportion.md)
  foreign-language output
  ([\#272](https://github.com/msberends/AMR/issues/272))
- Fixed some EUCAST Expert Rules, mostly on *S. pneumoniae*

#### Updated

- [`top_n_microorganisms()`](https://amr-for-r.org/reference/top_n_microorganisms.md):
  new `property_for_each` argument for sub-grouping within top *n*
  groups; rank ordering enforced (only lower taxonomic ranks allowed);
  fixed `property = NULL` not being accepted; inner filter now tracks
  original row indices to prevent cross-group contamination
- Taxonomic update for all microorganisms, now updated to June 2026
- [`mo_kingdom()`](https://amr-for-r.org/reference/mo_property.md) now
  returns the formal taxonomic kingdom; a one-time note per session
  explains the change when querying bacterial or archaeal records.
- [`mo_taxonomy()`](https://amr-for-r.org/reference/mo_property.md) and
  [`mo_info()`](https://amr-for-r.org/reference/mo_property.md) gained
  `domain` for the list output
- [`antibiogram()`](https://amr-for-r.org/reference/antibiogram.md) and
  [`wisca()`](https://amr-for-r.org/reference/antibiogram.md) now also
  support parallel computing via the argument `parallel = TRUE`
  ([\#281](https://github.com/msberends/AMR/issues/281))
- [`custom_eucast_rules()`](https://amr-for-r.org/reference/AMR-deprecated.md)
  renamed to
  [`custom_interpretive_rules()`](https://amr-for-r.org/reference/custom_interpretive_rules.md);
  old name deprecated but still works
  ([\#268](https://github.com/msberends/AMR/issues/268))
- [`mdro()`](https://amr-for-r.org/reference/mdro.md) can now infer
  resistance from a drug+inhibitor combination when the base drug column
  is absent (e.g. piperacillin inferred from piperacillin/tazobactam);
  controlled via new `infer_from_combinations` argument (default `TRUE`)
  ([\#209](https://github.com/msberends/AMR/issues/209))
- [`wisca()`](https://amr-for-r.org/reference/antibiogram.md) now more
  strictly follows Bielicki et al. (2016) by using
  $`\text{Beta}(1, 9999)`$ for intrinsically resistant pairs, forcing
  near-zero susceptibility regardless of observed data (based on EUCAST
  Expected Resistant Phenotypes)
- [`susceptibility()`](https://amr-for-r.org/reference/proportion.md) /
  [`resistance()`](https://amr-for-r.org/reference/proportion.md): new
  `guideline` argument (default EUCAST) to ensure the ‘I’ category is
  interpreted correctly per guideline
- Capped MIC handling in
  [`as.sir()`](https://amr-for-r.org/reference/as.sir.md) reworked into
  four clearly defined options: `"none"`, `"conservative"` (new
  default), `"standard"`, `"lenient"`
  ([\#243](https://github.com/msberends/AMR/issues/243))
- [`as.mic()`](https://amr-for-r.org/reference/as.mic.md) /
  [`rescale_mic()`](https://amr-for-r.org/reference/as.mic.md): new
  `round_to_next_log2` argument to round values up to the nearest log2
  dilution level ([\#255](https://github.com/msberends/AMR/issues/255))
- `antimicrobials$group` is now a `list`, so that drugs belonging to
  multiple groups are fully represented; use
  `ab_group(all_groups = TRUE)` to retrieve all groups for a drug
  ([\#246](https://github.com/msberends/AMR/issues/246))
- Improved console messages with clickable links throughout, powered by
  `cli` if it is installed
  ([\#191](https://github.com/msberends/AMR/issues/191),
  [\#265](https://github.com/msberends/AMR/issues/265))
- [`as.disk()`](https://amr-for-r.org/reference/as.disk.md): input
  validation is now more strict, rejecting values that are not
  recognisable as a numeric disk zone diameter
- [`as.sir()`](https://amr-for-r.org/reference/as.sir.md) gains an
  `enforce_method` argument (`"auto"`, `"mic"`, or `"disk"`) to force
  the interpretation method when S3 class information is lost, e.g. when
  called from Python
  ([\#291](https://github.com/msberends/AMR/issues/291))
- `AMR for Python` vignette: added sections on installation channels
  (stable CRAN vs. development GitHub via `AMR.beta`) and on using
  `enforce_method` in `as_sir()` from Python

## AMR 3.0.1

CRAN release: 2025-09-20

This is a bugfix release following the release of v3.0.0 in June 2025.

#### Changed

- Fixed bugs introduced by `ggplot2` v4.0.0
  ([\#236](https://github.com/msberends/AMR/issues/236))
  - MIC scale functions (such as
    [`scale_y_mic()`](https://amr-for-r.org/reference/plot.md)) will now
    be applied automatically when plotting values of class `mic`
  - SIR scale functions (such as
    [`scale_x_sir()`](https://amr-for-r.org/reference/plot.md)) will now
    be applied automatically when plotting values of class `sir`
- Fixed a bug in
  [`antibiogram()`](https://amr-for-r.org/reference/antibiogram.md) for
  when no antimicrobials are set
- Fixed a bug in
  [`antibiogram()`](https://amr-for-r.org/reference/antibiogram.md) to
  allow column names containing the `+` character
  ([\#222](https://github.com/msberends/AMR/issues/222))
- Fixed a bug in [`as.ab()`](https://amr-for-r.org/reference/as.ab.md)
  for antimicrobial codes with a number in it if they are preceded by a
  space
- Fixed a bug in
  [`eucast_rules()`](https://amr-for-r.org/reference/interpretive_rules.md)
  for using specific custom rules
- Fixed a bug in [`as.sir()`](https://amr-for-r.org/reference/as.sir.md)
  to allow any tidyselect language
  ([\#220](https://github.com/msberends/AMR/issues/220))
- Fixed a bug in [`as.sir()`](https://amr-for-r.org/reference/as.sir.md)
  to pick right breakpoint when `uti = FALSE`
  ([\#216](https://github.com/msberends/AMR/issues/216))
- Fixed a bug in
  [`ggplot_sir()`](https://amr-for-r.org/reference/ggplot_sir.md) when
  using `combine_SI = FALSE`
  ([\#213](https://github.com/msberends/AMR/issues/213))
- Fixed a bug in [`mdro()`](https://amr-for-r.org/reference/mdro.md) to
  make sure all genes specified in arguments are acknowledged
- Fixed a bug the `antimicrobials` data set to remove statins
  ([\#229](https://github.com/msberends/AMR/issues/229))
- Fixed a bug the `microorganisms` data set for MycoBank IDs and
  synonyms ([\#233](https://github.com/msberends/AMR/issues/233))
- Fixed ATC J01CR05 to map to piperacillin/tazobactam rather than
  piperacillin/sulbactam
  ([\#230](https://github.com/msberends/AMR/issues/230))
- Fixed skimmers (`skimr` package) of class `ab`, `sir`, and `disk`
  ([\#234](https://github.com/msberends/AMR/issues/234))
- Fixed all plotting to contain a separate colour for SDD (susceptible
  dose-dependent) ([\#223](https://github.com/msberends/AMR/issues/223))
- Fixed some specific Dutch translations for antimicrobials
- Added a warning to
  [`as.ab()`](https://amr-for-r.org/reference/as.ab.md) if input
  resembles antiviral codes or names
  ([\#232](https://github.com/msberends/AMR/issues/232))
- Added all reasons in verbose output of
  [`mdro()`](https://amr-for-r.org/reference/mdro.md)
  ([\#227](https://github.com/msberends/AMR/issues/227))
- Added `names` to
  [`age_groups()`](https://amr-for-r.org/reference/age_groups.md) so
  that custom names can be given
  ([\#215](https://github.com/msberends/AMR/issues/215))
- Added note to [`as.sir()`](https://amr-for-r.org/reference/as.sir.md)
  to make it explicit when higher-level taxonomic breakpoints are used
  ([\#218](https://github.com/msberends/AMR/issues/218))
- Added antibiotic codes from the Comprehensive Antibiotic Resistance
  Database (CARD) to the `antimicrobials` data set
  ([\#225](https://github.com/msberends/AMR/issues/225))
- Updated Fosfomycin to be of antibiotic class Phosphonics
  ([\#225](https://github.com/msberends/AMR/issues/225))
- Updated [`random_mic()`](https://amr-for-r.org/reference/random.md)
  and [`random_disk()`](https://amr-for-r.org/reference/random.md) to
  set skewedness of the distribution and allow multiple microorganisms

## AMR 3.0.0

CRAN release: 2025-06-02

This package now supports not only tools for AMR data analysis in
clinical settings, but also for veterinary and environmental
microbiology. This was made possible through a collaboration with the
[University of Prince Edward Island’s Atlantic Veterinary
College](https://www.upei.ca/avc), Canada. To celebrate this great
improvement of the package, we also updated the package logo to reflect
this change.

#### Breaking

- Data set `antibiotics` has been renamed to `antimicrobials` as the
  data set contains more than just antibiotics. Using `antibiotics` will
  still work, but now returns a warning.
- Removed all functions and references that used the deprecated `rsi`
  class, which were all replaced with their `sir` equivalents over two
  years ago.
- Functions
  [`resistance_predict()`](https://amr-for-r.org/reference/resistance_predict.md)
  and
  [`sir_predict()`](https://amr-for-r.org/reference/resistance_predict.md)
  are now deprecated and will be removed in a future version. Use the
  `tidymodels` framework instead, for which we [wrote a basic
  introduction](https://amr-for-r.org/articles/AMR_with_tidymodels.html).

#### New

- **One Health implementation**
  - Function [`as.sir()`](https://amr-for-r.org/reference/as.sir.md) now
    has extensive support for veterinary breakpoints from CLSI. Use
    `breakpoint_type = "animal"` and set the `host` argument to a
    variable that contains animal species names.
  - The `clinical_breakpoints` data set contains all these breakpoints,
    and can be downloaded on our [download
    page](https://amr-for-r.org/articles/datasets.html).
  - The (new) `antimicrobials` data set contains all veterinary
    antimicrobials, such as pradofloxacin and enrofloxacin. All WHOCC
    codes for veterinary use have been added as well.
  - [`ab_atc()`](https://amr-for-r.org/reference/ab_property.md) now
    supports ATC codes of veterinary antimicrobials (that all start with
    “Q”)
  - [`ab_url()`](https://amr-for-r.org/reference/ab_property.md) now
    supports retrieving the WHOCC url of their ATCvet pages
- **Support for WISCA antibiograms**
  - The
    [`antibiogram()`](https://amr-for-r.org/reference/antibiogram.md)
    function now supports creating true Weighted-Incidence Syndromic
    Combination Antibiograms (WISCA), a powerful Bayesian method for
    estimating regimen coverage probabilities using pathogen incidence
    and antimicrobial susceptibility data. WISCA offers improved
    precision for syndrome-specific treatment, even in data sets with
    sparse data. A dedicated
    [`wisca()`](https://amr-for-r.org/reference/antibiogram.md) function
    is also available for easy usage.
- **More global coverage of languages**
  - Added full support for 8 new languages: Arabic, Bengali, Hindi,
    Indonesian, Korean, Swahili, Urdu, and Vietnamese. The `AMR` package
    is now available in 28 languages.
- **Major update to fungal taxonomy and tools for mycologists**
  - MycoBank has now been integrated as the primary taxonomic source for
    fungi. The `microorganisms` data set has been enriched with new
    columns (`mycobank`, `mycobank_parent`, and `mycobank_renamed_to`)
    that provide detailed information for fungal species.
  - A remarkable addition of over 20,000 new fungal records
  - New function
    [`mo_mycobank()`](https://amr-for-r.org/reference/mo_property.md) to
    retrieve the MycoBank record number, analogous to existing functions
    such as
    [`mo_lpsn()`](https://amr-for-r.org/reference/mo_property.md) and
    [`mo_gbif()`](https://amr-for-r.org/reference/mo_property.md).
  - The [`as.mo()`](https://amr-for-r.org/reference/as.mo.md) function
    and all `mo_*()` functions now include an `only_fungi` argument,
    allowing users to restrict results solely to fungal species. This
    ensures fungi are prioritised over bacteria during microorganism
    identification. This can also be set globally with the new
    `AMR_only_fungi` option.
  - Also updated other kingdoms, welcoming a total of 2,149 new records
    from 2023 and 927 from 2024.
- **Updated clinical breakpoints**
  - Breakpoint of 2024 and 2025 of both CLSI and EUCAST are now
    supported, by adding all of their over 10,000 new clinical
    breakpoints to the `clinical_breakpoints` data set for usage in
    [`as.sir()`](https://amr-for-r.org/reference/as.sir.md). EUCAST 2025
    is now the new default guideline for all MIC and disk diffusion
    interpretations.
  - Added all Expected Resistant Phenotypes from EUCAST (v1.2). The
    default `rules` for
    [`eucast_rules()`](https://amr-for-r.org/reference/interpretive_rules.md)
    are now: `c("breakpoints", "expected_phenotypes")`.
  - Updated the `intrinsic_resistant` data set, which is now based on
    EUCAST Expected Resistant Phenotypes v1.2
  - [`as.sir()`](https://amr-for-r.org/reference/as.sir.md) now brings
    additional factor levels: “NI” for non-interpretable and “SDD” for
    susceptible dose-dependent. Currently, the `clinical_breakpoints`
    data set contains 24 breakpoints that can return the value “SDD”
    instead of “I”.
  - EUCAST interpretive rules (using
    [`eucast_rules()`](https://amr-for-r.org/reference/interpretive_rules.md))
    are now available for EUCAST 12 (2022), 13 (2023), 14 (2024), and 15
    (2025).
  - EUCAST dosage tables (`dosage` data set) are now available for
    EUCAST 13 (2023), 14 (2024), and 15 (2025).
- **New advanced ggplot2 extensions for MIC and SIR plotting and
  transforming**
  - New function group `scale_*_mic()`, namely:
    [`scale_x_mic()`](https://amr-for-r.org/reference/plot.md),
    [`scale_y_mic()`](https://amr-for-r.org/reference/plot.md),
    [`scale_colour_mic()`](https://amr-for-r.org/reference/plot.md) and
    [`scale_fill_mic()`](https://amr-for-r.org/reference/plot.md). They
    allow easy plotting of MIC values. They allow for manual range
    definition and plotting missing intermediate log2 levels.
  - New function group `scale_*_sir()`, namely:
    [`scale_x_sir()`](https://amr-for-r.org/reference/plot.md),
    [`scale_colour_sir()`](https://amr-for-r.org/reference/plot.md) and
    [`scale_fill_sir()`](https://amr-for-r.org/reference/plot.md). They
    allow to plot the `sir` class, and translates into the system
    language at default. They also set colourblind-safe colours to the
    plots.
  - New function
    [`rescale_mic()`](https://amr-for-r.org/reference/as.mic.md), which
    allows users to rescale MIC values to a manually set range. This is
    the powerhouse behind the `scale_*_mic()` functions, but it can be
    used independently to, for instance, compare equality in MIC
    distributions by rescaling them to the same range first.
- **Support for Python**
  - While using R for the heavy lifting, [our ‘AMR’ Python
    Package](https://pypi.org/project/AMR/) was developed to run the AMR
    R package natively in Python. The Python package will always have
    the same version number as the R package, as it is built
    automatically with every code change.
- **Support for `tidymodels`**
  - All antimicrobial selectors (such as
    [`aminoglycosides()`](https://amr-for-r.org/reference/antimicrobial_selectors.md)
    and
    [`betalactams()`](https://amr-for-r.org/reference/antimicrobial_selectors.md))
    are now supported in `tidymodels` packages such as `recipe` and
    `parsnip`. See for more info [our
    tutorial](https://amr-for-r.org/articles/AMR_with_tidymodels.html)
    on using these AMR functions for predictive modelling.
- **Other**
  - New function
    [`top_n_microorganisms()`](https://amr-for-r.org/reference/top_n_microorganisms.md)
    to filter a data set to the top *n* of any taxonomic property, e.g.,
    filter to the top 3 species, filter to any species in the top 5
    genera, or filter to the top 3 species in each of the top 5 genera
  - New function
    [`mo_group_members()`](https://amr-for-r.org/reference/mo_property.md)
    to retrieve the member microorganisms of a microorganism group. For
    example, `mo_group_members("Strep group C")` returns a vector of all
    microorganisms that belong to that group.
  - New functions
    [`mic_p50()`](https://amr-for-r.org/reference/as.mic.md) and
    [`mic_p90()`](https://amr-for-r.org/reference/as.mic.md) to retrieve
    the 50th and 90th percentile of MIC values.

#### Changed

- SIR interpretation
  - Support for parallel computing to greatly improve speed using the
    `parallel` package (part of base R). Use
    `as.sir(your_data, parallel = TRUE)` to run SIR interpretation using
    multiple cores.
  - It is now possible to use column names for arguments `guideline`,
    `ab`, `mo`, and `uti`:
    `as.sir(..., ab = "column1", mo = "column2", uti = "column3")`. This
    greatly improves the flexibility for users.
  - Users can now set their own criteria (using regular expressions) as
    to what should be considered S, I, R, SDD, and NI.
  - To get quantitative values,
    [`as.double()`](https://rdrr.io/r/base/double.html) on a `sir`
    object will return 1 for S, 2 for SDD/I, and 3 for R (NI will become
    `NA`). Other functions using `sir` classes (e.g.,
    [`summary()`](https://rdrr.io/r/base/summary.html)) are updated to
    reflect the change to contain NI and SDD.
  - Following CLSI interpretation rules, values outside the
    log2-dilution range will be rounded upwards to the nearest
    log2-level before interpretation. Only if using a CLSI guideline.
  - Combined MIC values (e.g., from CLSI) are now supported
  - The argument `conserve_capped_values` in
    [`as.sir()`](https://amr-for-r.org/reference/as.sir.md) has been
    replaced with `capped_mic_handling`, which allows greater
    flexibility in handling capped MIC values (`<`, `<=`, `>`, `>=`).
    The four available options (`"standard"`, `"strict"`, `"relaxed"`,
    `"inverse"`) provide full control over whether these values should
    be interpreted conservatively or ignored. Using
    `conserve_capped_values` is now deprecated and returns a warning.
  - Added argument `info` to silence all console messages
- [`antibiogram()`](https://amr-for-r.org/reference/antibiogram.md)
  function
  - Argument `antibiotics` has been renamed to `antimicrobials`. Using
    `antibiotics` will still work, but now returns a warning.
  - Added argument `formatting_type` to set any of the 22 options for
    the formatting of all ‘cells’. This defaults to `18` for non-WISCA
    and `14` for WISCA, changing the output of antibiograms to cells
    with more info.
  - For this reason, `add_total_n` is now deprecated and `FALSE` at
    default since the denominators are added to the cells dependent on
    the `formatting_type` setting
  - The `ab_transform` argument now defaults to `"name"`, displaying
    antibiotic column names instead of codes
- Antimicrobial selectors (previously: *antibiotic selectors*)
  - ‘Antibiotic selectors’ are now called ‘antimicrobial selectors’
    since their scope is broader than just antibiotics. All
    documentation have been updated, and
    [`ab_class()`](https://amr-for-r.org/reference/AMR-deprecated.md)
    and
    [`ab_selector()`](https://amr-for-r.org/reference/AMR-deprecated.md)
    have been replaced with
    [`amr_class()`](https://amr-for-r.org/reference/antimicrobial_selectors.md)
    and
    [`amr_selector()`](https://amr-for-r.org/reference/antimicrobial_selectors.md).
    The old functions are now deprecated and will be removed in a future
    version.
  - Added selectors
    [`isoxazolylpenicillins()`](https://amr-for-r.org/reference/antimicrobial_selectors.md),
    [`monobactams()`](https://amr-for-r.org/reference/antimicrobial_selectors.md),
    [`nitrofurans()`](https://amr-for-r.org/reference/antimicrobial_selectors.md),
    [`phenicols()`](https://amr-for-r.org/reference/antimicrobial_selectors.md),
    [`rifamycins()`](https://amr-for-r.org/reference/antimicrobial_selectors.md),
    and
    [`sulfonamides()`](https://amr-for-r.org/reference/antimicrobial_selectors.md)
  - When using antimicrobial selectors that exclude non-treatable drugs
    (such as gentamicin-high when using
    [`aminoglycosides()`](https://amr-for-r.org/reference/antimicrobial_selectors.md)),
    the function now always returns a warning that these can be included
    using `only_treatable = FALSE`
  - Added a new argument `return_all` to all selectors, which defaults
    to `TRUE` to include any match. With `FALSE`, the old behaviour,
    only the first hit for each unique antimicrobial is returned.
  - All selectors can now be run as a separate command to retrieve a
    vector of all possible antimicrobials that the selector can select
  - The selectors
    [`lincosamides()`](https://amr-for-r.org/reference/antimicrobial_selectors.md)
    and
    [`macrolides()`](https://amr-for-r.org/reference/antimicrobial_selectors.md)
    do not overlap anymore - each antibiotic is now classified as either
    of these and not both
  - Fixed selector
    [`fluoroquinolones()`](https://amr-for-r.org/reference/antimicrobial_selectors.md),
    which now really only selects second-generation quinolones and up
    (first-generation quinolones do not contain a fluorine group)
- `antimicrobials` data set
  - Added agents used for screening, with an ID all ending with `-S`:
    benzylpenicillin screening test (`PEN-S`), beta-lactamase screening
    test (`BLA-S`), cefotaxime screening test (`CTX-S`), clindamycin
    inducible screening test (`CLI-S`), nalidixic acid screening test
    (`NAL-S`), norfloxacin screening test (`NOR-S`), oxacillin screening
    test (`OXA-S`), pefloxacin screening test (`PEF-S`), and
    tetracycline screening test (`TCY-S`). The ID of cefoxitin screening
    was renamed from `FOX1` to `FOX-S`, while the old code remains to
    work.
  - For this reason, the antimicrobial selectors
    [`cephalosporins()`](https://amr-for-r.org/reference/antimicrobial_selectors.md),
    [`cephalosporins_3rd()`](https://amr-for-r.org/reference/antimicrobial_selectors.md),
    [`lincosamides()`](https://amr-for-r.org/reference/antimicrobial_selectors.md),
    [`isoxazolylpenicillins()`](https://amr-for-r.org/reference/antimicrobial_selectors.md),
    [`quinolones()`](https://amr-for-r.org/reference/antimicrobial_selectors.md),
    [`fluoroquinolones()`](https://amr-for-r.org/reference/antimicrobial_selectors.md),
    and
    [`tetracyclines()`](https://amr-for-r.org/reference/antimicrobial_selectors.md)
    now contain the argument `only_treatable = TRUE` (similar to other
    antimicrobial selectors that contain non-treatable drugs)
  - Added amorolfine (`AMO`, D01AE16), an antimycotic, which is now also
    part of the
    [`antifungals()`](https://amr-for-r.org/reference/antimicrobial_selectors.md)
    selector
  - Added cefepime/enmetazobactam (`FPE`), a 4th gen cephalosporin
  - Added tigemonam (`TNM`), a monobactam
  - Added bleomycin (`BLM`), a glycopeptide
  - Added efflux (`EFF`), to allow mapping to AMRFinderPlus
  - Updated all ATC codes, trade names, and DDDs
- MICs
  - Added as valid levels: 4096, 6 powers of 0.0625, and 5 powers of 192
    (192, 384, 576, 768, 960)
  - Fixed a bug in
    [`as.mic()`](https://amr-for-r.org/reference/as.mic.md) that failed
    translation of scientifically formatted numbers
  - Added new argument `keep_operators` to
    [`as.mic()`](https://amr-for-r.org/reference/as.mic.md). This can be
    `"all"` (default), `"none"`, or `"edges"`. This argument is also
    available in the new
    [`rescale_mic()`](https://amr-for-r.org/reference/as.mic.md) and
    `scale_*_mic()` functions.
  - Comparisons of MIC values are now more strict. For example, `>32` is
    higher than (and never equal to) `32`. Thus,
    `as.mic(">32") == as.mic(32)` now returns `FALSE`, and
    `as.mic(">32") > as.mic(32)` now returns `TRUE`.
  - Sorting of MIC values (using
    [`sort()`](https://rdrr.io/r/base/sort.html)) was fixed in the same
    manner; `<0.001` now gets sorted before `0.001`, and `>0.001` gets
    sorted after `0.001`.
  - Intermediate log2 levels used for MIC plotting are now more common
    values instead of following a strict dilution range
  - [`is.mic()`](https://amr-for-r.org/reference/as.mic.md) now returns
    a vector of `TRUE`/`FALSE` if the input is a `data.frame`, just like
    [`as.sir()`](https://amr-for-r.org/reference/as.sir.md)
- [`eucast_rules()`](https://amr-for-r.org/reference/interpretive_rules.md)
  now has an argument `overwrite` (default: `FALSE`) to indicate whether
  non-`NA` values should be overwritten
- Disks of 0 to 5 mm are now allowed, the newly allowed range for disk
  diffusion ([`as.disk()`](https://amr-for-r.org/reference/as.disk.md))
  is now between 0 and 50 mm
- Updated
  [`italicise_taxonomy()`](https://amr-for-r.org/reference/italicise_taxonomy.md)
  to support HTML output
- [`custom_eucast_rules()`](https://amr-for-r.org/reference/AMR-deprecated.md)
  now supports multiple antimicrobials and antimicrobial groups to be
  affected by a single rule
- [`mo_info()`](https://amr-for-r.org/reference/mo_property.md) now
  contains an extra element `rank` and `group_members` (with the
  contents of the new
  [`mo_group_members()`](https://amr-for-r.org/reference/mo_property.md)
  function)
- Updated all ATC codes from WHOCC
- Updated all antimicrobial DDDs from WHOCC
- Fix for using a manual value for `mo_transform` in
  [`antibiogram()`](https://amr-for-r.org/reference/antibiogram.md)
- Fixed a bug for when
  [`antibiogram()`](https://amr-for-r.org/reference/antibiogram.md)
  returns an empty data set
- Argument `only_sir_columns` now defaults to `TRUE` if any column of a
  data set contains a class ‘sir’ (functions
  [`eucast_rules()`](https://amr-for-r.org/reference/interpretive_rules.md),
  [`key_antimicrobials()`](https://amr-for-r.org/reference/key_antimicrobials.md),
  [`mdro()`](https://amr-for-r.org/reference/mdro.md), etc.)
- Added Sensititre codes for animals, antimicrobials and microorganisms
- Fix for mapping ‘high level’ antimicrobials in
  [`as.ab()`](https://amr-for-r.org/reference/as.ab.md) (amphotericin
  B-high, gentamicin-high, kanamycin-high, streptomycin-high,
  tobramycin-high)
- Improved overall algorithm of
  [`as.ab()`](https://amr-for-r.org/reference/as.ab.md) for better
  performance and accuracy, including the new function
  `as_reset_session()` to remove earlier coercions.
- Improved overall algorithm of
  [`as.mo()`](https://amr-for-r.org/reference/as.mo.md) for better
  performance and accuracy, specifically:
  - More weight is given to genus and species combinations in cases
    where the subspecies is miswritten, so that the result will be the
    correct genus and species
  - Genera from the World Health Organization’s (WHO) Priority Pathogen
    List now have the highest prevalence
- Fixed a bug for
  [`sir_confidence_interval()`](https://amr-for-r.org/reference/proportion.md)
  when there are no isolates available
- Updated the prevalence calculation to include genera from the World
  Health Organization’s (WHO) Priority Pathogen List
- Improved algorithm of
  [`first_isolate()`](https://amr-for-r.org/reference/first_isolate.md)
  when using the phenotype-based method, to prioritise records with the
  highest availability of SIR values
- [`scale_y_percent()`](https://amr-for-r.org/reference/plot.md) can now
  cope with ranges outside the 0-100% range
- MDRO determination (using
  [`mdro()`](https://amr-for-r.org/reference/mdro.md))
  - The Verbose Mode (`verbose = TRUE`) now includes the guideline name
  - Implemented the new Dutch national MDRO guideline (SRI-richtlijn
    BRMO, Nov 2024)
  - Added arguments `esbl`, `carbapenemase`, `mecA`, `mecC`, `vanA`,
    `vanB` to denote column names or logical values indicating presence
    of these genes (or production of their proteins)
  - Added upport for antimicrobial selectors to use as as a custom rule
    ([`custom_mdro_guideline()`](https://amr-for-r.org/reference/custom_mdro_guideline.md))
- Added console colours support of `sir` class for Positron

#### Other

- New website domain: <https://amr-for-r.org>! The old domain will
  remain to work.
- Added Dr. Larisse Bolton and Aislinn Cook as contributors for their
  fantastic implementation of WISCA in a mathematically solid way
- Added Matthew Saab, Dr. Jordan Stull, and Prof. Javier Sanchez as
  contributors for their tremendous input on veterinary breakpoints and
  interpretations
- Added Prof. Kathryn Holt, Dr. Jane Hawkey, and Dr. Natacha Couto as
  contributors for their many suggestions, ideas and bugfixes
- Greatly improved `vctrs` integration, a Tidyverse package working in
  the background for many Tidyverse functions. For users, this means
  that functions such as `dplyr`’s
  [`bind_rows()`](https://dplyr.tidyverse.org/reference/bind_rows.html),
  [`rowwise()`](https://dplyr.tidyverse.org/reference/rowwise.html) and
  [`c_across()`](https://dplyr.tidyverse.org/reference/c_across.html)
  are now supported for e.g. columns of class `mic`. Despite this, this
  `AMR` package is still zero-dependent on any other package, including
  `dplyr` and `vctrs`.
- Greatly updated and expanded documentation
- Stopped support for SAS (`.xpt`) files, since their file structure and
  extremely inefficient and requires more disk space than GitHub allows
  in a single commit.

### Older Versions

This changelog only contains changes from AMR v3.0 (June 2025) and
later.

- For prior v2 versions, please see [our v2
  archive](https://github.com/msberends/AMR/blob/v2.1.1/NEWS.md).
- For prior v1 versions, please see [our v1
  archive](https://github.com/msberends/AMR/blob/v1.8.2/NEWS.md).
