This substantial release makes most core functions considerably
faster, adds EUCAST 2026 and CLSI 2026 breakpoints, adopts the new
prokaryotic kingdoms of Göker and Oren (2024), introduces WT/NWT
interpretation for ECOFFs, unifies the EUCAST and CLSI interpretive
rules, and supports tidymodels pipelines. As it contains
several breaking changes, please read the Breaking section
below before updating.
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 was added to the
microorganisms data set, and mo_kingdom() now
returns the formal kingdom (e.g., "Pseudomonadati" instead
of "Bacteria"). Use mo_domain() for the old
behaviour. For non-prokaryotic kingdoms (Fungi, Protozoa, etc.),
kingdom and domain are identical.
mo_kingdom() < 3.1.0 |
mo_kingdom() now |
mo_domain() (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 |
Previously, mo_domain() was an alias of
mo_kingdom(); it is now a distinct function. Its output is
therefore unchanged, while mo_kingdom() now returns the new
formal kingdom. A one-time note per session explains this change when
bacterial or archaeal records are queried.
Parallel computing in as.sir(),
antibiogram(), and wisca() now uses the
future and future.apply packages, which is
faster. A non-sequential plan (e.g.,
future::plan(future::multisession)) must be active before
using parallel = TRUE (#281).
The options of capped_mic_handling in
as.sir() have been redefined as "none",
"conservative", "standard" (default), and
"lenient". The option "inverse" is no longer
available (#243).
as.sir() now returns WT/NWT (Wildtype/Non-wildtype)
instead of S/R when using ECOFF-based interpretation with
breakpoint_type = "ECOFF". WT/NWT results are fully
supported in all resistance and susceptibility functions and in all
plots (#254).
Aggregated analyses now follow the guideline for the ‘I’
category, set with the new guideline argument or the
AMR_guideline option: EUCAST considers ‘I’ susceptible and
CLSI considers ‘I’ resistant, while SDD and WT are always considered
susceptible, and NWT and NS always resistant (see section
Interpretation of SIR in ?as.sir). This applies to
count_df(), proportion_df(),
sir_df(), ggplot_sir(),
geom_sir(), and labels_sir_count(), which with
CLSI now return "S" vs. "IR" instead of
"SI" vs. "R", and to
antibiogram(), wisca(), and
format() on the output of
bug_drug_combinations(). Previously, these functions always
considered ‘I’ susceptible, as with EUCAST. Use
guideline = "EUCAST" for the old behaviour.
The combine_SI argument of these functions is
deprecated in favour of guideline. While set, it is
followed literally and takes precedence over guideline. Use
guideline = NULL instead of combine_SI = FALSE
to keep S, I, and R separate.
clinical_breakpoints data set.
EUCAST 2026 is now the default guideline for all MIC and disk diffusion
interpretations.clinical_breakpoints now contains blocking rows
(NA breakpoints, with the reason in note)
where EUCAST gives no breakpoint for an organism, so that
as.sir() no longer falls back to the breakpoint of a
broader taxon. This includes infections other than UTI where EUCAST
gives breakpoints in brackets or no breakpoint, but does give a
breakpoint for UTI, e.g., aminoglycosides for Acinetobacter
spp.interpretive_rules() applies the
interpretive rules of both EUCAST and CLSI. eucast_rules()
is now a wrapper around this function (#235, #259).intrinsic_resistant
data set.tidymodels pipelines
step_mic_log2() and
step_sir_numeric() to use MIC and SIR data in modelling
pipelinesall_sir(), all_mic(),
and all_disk()esbl_isolates data set for practising AMR
modellingmorphology column in the
microorganisms data set, with the corresponding function
mo_morphology() to return the cell shape of bacteria. Data
are sourced from BacDive; values prefixed with “likely” are extrapolated
from the consensus at genus level.add_morphology in
mo_gramstain() to return combined results, such as
"Gram-negative rods"sir_combine() to combine SIR results of
multiple antimicrobials into one variable, for combination therapy
(method = "most_susceptible") or for resistance within a
group (method = "most_resistant") (#321)add_custom_antimicrobial_synonyms() to add
local names, such as trade names, to existing antimicrobials (#307)ionophores(),
peptides(), phosphonics(), and
spiropyrimidinetriones()FTA),
ceftibuten/avibactam (CTA), clorobiocin (CLB),
kasugamycin (KAS), ostreogrycin (OST),
sulbactam/durlobactam (SUD1, #308), taniborbactam
(TAN), thiostrepton (THS), xeruborbactam
(XER), and zorbamycin (ZOR)wisca_plot() to assess the distributions
of susceptibility and incidence from the Monte Carlo simulations of
WISCAamr_course() to download and unpack course
or webinar materials from GitHub in one callNA_ab_ and
NA_mo_, for use in pipelines that need missing values of a
specific classsource in the
microorganisms.codes data set, stating the source of a code
and the name it refers to, e.g.,
"WHONET (Enterobacter aerogenes)"as.sir())
enforce_method ("auto",
"mic", or "disk") to force the interpretation
method when S3 class information is lost, e.g., when called from Python
(#291)<=0.5) now return I
instead of S or NI if there is no S category,
i.e., in case of an off-scale S breakpoint such as EUCAST’s 0.001 mg/L
(#295)S or R
if there is no breakpoint for the drug-bug combinationcapped_mic_handling,
which is "standard"patient, ward) are
no longer misidentified as antimicrobial columnsinfo = FALSE now suppresses all messages, including
those for columns without breakpoints"<= 0.002; S"
or "S; 0.002") are now parsed correctly (#252)options(AMR_guideline = "EUCAST 2012"), no longer causes
errors or silently wrong results in interpretive_rules(),
resistance(), susceptibility(),
count_resistant(), count_susceptible(), and
the SIR plotting and printing functions (#298)uti (NA, the default),
non-UTI breakpoints are now consistently preferred over UTI breakpoints.
Previously, this preference was only applied together with its note,
which is shown once. UTI breakpoints are only used if there are no
non-UTI breakpoints, which is now noted in
sir_interpretation_history() for every interpretation. A
blocking row of a broader taxon does not override a UTI breakpoint of
the organism itself, e.g., Enterobacterales and nitroxoline for E.
coli.clinical_breakpoints data set
STR) instead of streptomycin
(STR1)SUD), and added the missing EUCAST
2011 breakpoints for roxithromycin (#308)as.mo()) and properties
(mo_*())
add_custom_microorganisms() (#313)mo_*() functions now retrieve properties of valid
mo input directly, and only for unique valuesmo vectors
(e.g., in rbind()) is now much faster, as codes are checked
against a hashed set instead of the whole microorganisms
data setmo_uncertainties() now also lists uncertainties of
previously coerced inputmo_name(x, language = "fr"), and cached per
language"X complex" now falls back to
"X" when the complex is not a distinct taxon, preventing
NA for valid clinical descriptions such as
"Proteus vulgaris complex", while a complex named after
several of its species returns the complex of one of them, e.g.,
"Acinetobacter calcoaceticus-baumannii complex" returns
A. baumannii complex (#287)"S. apiospermum" returns Scedosporium
apiospermum instead of a Staphylococcus species
(#288)"P. ovale") now returns the species instead of a more
prevalent organism, while explicit subspecies (e.g.,
"P. ovale curtisi") are preserved (#288)"Salmonella enterica serovar Typhi", no longer return
Salmonella bongori or another subspeciesas.mo() and mo_current() now find the
current name of synonyms with multiple sources (e.g., Chaetomium
abuense)mo_taxonomy() and mo_info() now contain an
extra element domainset_mo_source() and
get_mo_source())
get_mo_source() removing the
mo_source file at the default location in interactive
sessions, when called with a destination that does not
existget_mo_source() returning the
mo_source already loaded instead of the one at the
requested destinationget_mo_source(), and therefore
as.mo() and all mo_*() functions, throwing an
error in interactive sessions after the original file of the
mo_source was moved or deleted. The mo_source
file is now removed, as documented.mo_source file
at its own destination instead of at the default
locationmicroorganisms data set
intrinsic_resistant and
microorganisms.codes)emend. and everything after
it, so that 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”)microorganisms.codes data set
VAG (“Vaginal flora”) to Vagococcus,
PAR (“Parasite”) to Paracoccus, the Leptospira
interrogans serovars to Legionella, and
Salmonella O-groups to Salmonella Group A. Codes for
organisms that are not in the microorganisms data set, such
as viruses, now refer to UNKNOWN, and names that only
partly exist refer to the genus.SAT to Salmonella TyphiEAE refers to Enterobacter
aerogenes (B_ENTRBC_AERG). as.mo() still
returns the current name, here Klebsiella aerogenes.as.ab()) and
antimicrobials data set
as.mo() (#313)fast_mode (used
internally) were remembered and reused by later regular calls, which
could return NA for valid input (#313)ETH,
PHE) no longer return NA when mixed with
unrecognised input (#245)NA with a warning
instead of an errorab_reset_session() no longer clears the uncertainties
of as.mo() (#313)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 of a
drug (#246).antibiogram() and wisca())
wisca() now follows Bielicki et al. (2016)
more strictly by using \(\text{Beta}(1,
9999)\) for intrinsically resistant pairs, forcing near-zero
susceptibility regardless of observed data (based on EUCAST Expected
Resistant Phenotypes)antimicrobials argument if tidyselect was not
available, e.g., for binary installations without
dplyrwisca(), as they already were in traditional
antibiograms. They were previously excluded silently, with the warning
“invalid microorganism code, NA generated”. This can change WISCA
coverage estimates.wisca() and wisca_plot() are considerably
faster, especially with syndromic groups, by determining intrinsic
resistance and pathogen names only once per regimen and pathogenguideline (default: the
AMR_guideline option, otherwise EUCAST) in
susceptibility(), resistance(),
count_df(), proportion_df(),
sir_df(), ggplot_sir(),
geom_sir(), labels_sir_count(),
antibiogram(), wisca(), and
bug_drug_combinations() to interpret the ‘I’ category
correctly per guideline. Functions that return results per category also
accept guideline = NULL to keep S, I, and R separate, while
functions that return a single proportion or count give an informative
error.guideline
argument nor the AMR_guideline option is set, a message
explains how to change this, once per session and not in R Markdown or
Quarto documentscount_*() and proportion_*() now handle
WT, NWT, NS, and NI results correctly (#321)round_to_next_log2 in
as.mic() and rescale_mic() to round values up
to the nearest log2 dilution level (#255)as.mic() now handles values in scientific notation
(e.g., 1e-3) correctlyas.disk() is now more strict,
rejecting values that are not recognisable as a numeric disk zone
diameter. Values higher than 50 mm now return NA with a
warning, instead of being set to 50 mm.plot(), barplot(), and
autoplot() for MIC, disk diffusion and SIR values, and the
scale_*_mic() and scale_*_sir() functions)
plot() no longer shows SDD when
colours_SIR gives SDD the colour of S (e.g., with one or
three colours), and NI and NS are labelled tooautoplot() for disk diffusion values, which left
SDD bars without colour and legend entrybarplot() for MIC values, which ignored the
language and expand arguments, and which now
also has the include_PKPD and breakpoint_type
argumentsbarplot() for SIR values, which gave NI, WT, and
NWT the wrong colours, and always showed empty bars for WT, NWT, and NS.
barplot() and autoplot() for SIR values now
always show S and R, and all other values (such as SDD, I, WT, NWT, and
NS) only when they occur. Data with only WT and NWT shows these
two.autoplot() for disk diffusion values now validates
include_PKPD and breakpoint_type, and
plot() and autoplot() for SIR values now
validate languageplot() and barplot() now has
a readable number of tick marks for large counts, instead of one per
countcolours_SIR is now matched by name in all
plotting functions, and S, I and R get their default colour if not set.
SDD gets the colour of S if not set. Previously, the colours of S/I and
I/R were taken by position, and a named vector of three colours gave
missing colours.keep_operators = TRUE and FALSE in the
scale_*_mic() functions now behave like "all"
and "none", as in as.mic()scale_*_sir() functions failing when
values was set. A named values (e.g.,
values = c(S = "green")) now replaces the colours of the
SIR values it names, and scale_x_sir() warns that it
ignores values.scale_x_sir() ignoring other arguments, such as
namescale_*_sir() functions now call ‘I’ “Intermediate”
by default if the AMR_guideline option is set to EUCAST
before 2019facet_sir() now accepts unquoted column names, e.g.,
facet_sir(antibiotic)mdro())
infer_from_combinations (default: TRUE)
(#209).guideline = "CMI 2012" (the default).top_n_microorganisms()
property_for_each for sub-grouping within
the top n groups. Rank ordering is enforced, so that only lower
taxonomic ranks are allowed.property = NULL is now acceptedab_group() faster in other
languages.sir_df() in other languages
(#272)interpretive_rules(),
eucast_rules(), and clsi_rules())
overwrite = FALSE or add_if_missing = FALSE
are no longer reported as changes or additions, also not in the output
of verbose = TRUE (#259)rule column of the output of
verbose = TRUE no longer contains formatting markup (e.g.,
{.field AMC}) for the inhibitor-inheritance rulescustom_eucast_rules() has been renamed to
custom_interpretive_rules(). The old name is now deprecated
but still works (#268).AMR_eucastrules has been replaced by
AMR_interpretive_rules, which applies to
interpretive_rules(), eucast_rules(), and
clsi_rules(). Its default is now
c("breakpoints", "expected_phenotypes"). A set
AMR_eucastrules option is now ignored, with a warning in
eucast_rules().==, !=) of the
sir class with a factor is now possible on R
>= 4.3guideline in random_mic() and
random_disk(), defaulting to the AMR_guideline
option (otherwise EUCAST), so that generated values are based on the
latest breakpoints of one guideline instead of those of all guidelines
and years combinedformat() on the output of
bug_drug_combinations(), which counted I and SDD as
resistant with the default combine_SI = TRUE, contrary to
its documentation. It now reads the guideline used in
bug_drug_combinations(), which can be overridden with its
own guideline argument, and also counts NS as
resistant.g.test() that returned the degrees of
freedom as argument instead of parameter, so
that they were not printeddata.table package, and where suggested packages available
on the machine that built the package were used even if they were not
available to the usercli if it is installed (#191,
#265)?as.sir)
now explains for all functions with a guideline argument
for aggregated analyses how S, SDD, I, R, WT, NWT, NS, and NI are
categorised per guideline. The handling of ‘I’ per MDRO guideline in
mdro() will be revised in a future version (#323).labels_sir_count() is now documented together with
ggplot_sir()colours_SIR and
eucast_I in the plotting functions, and an example of
scale_colour_sir() in which the title was not appliedget_AMR_locale() now describes the
actual order in which the language is determined: the
AMR_locale option, then the LANG system
variable, then LANGUAGE only if LANG is not
set, and then the system localeinterpretive_rules(), with
section headers, S/I/R values styled as in the printing of
sir columns in tibbles, and the summary of edits sorted by
SIR level, using cli if it is installed (#259)custom_interpretive_rules() and
custom_mdro_guideline() now styles SIR values as in
tibbles, i.e., the colour of I depends on the guideline.
WT, NWT, and NS were previously
shown as SDD, I, and R, and
values other than S and R as
I.AMR.beta) and on using enforce_method in
as_sir() from PythonThis is a bugfix release following the release of v3.0.0 in June 2025.
ggplot2 v4.0.0 (#236)
scale_y_mic()) will now be
applied automatically when plotting values of class
micscale_x_sir()) will now be
applied automatically when plotting values of class
sirantibiogram() for when no antimicrobials
are setantibiogram() to allow column names
containing the + character (#222)as.ab() for antimicrobial codes with a
number in it if they are preceded by a spaceeucast_rules() for using specific custom
rulesas.sir() to allow any tidyselect
language (#220)as.sir() to pick right breakpoint when
uti = FALSE (#216)ggplot_sir() when using
combine_SI = FALSE (#213)mdro() to make sure all genes specified
in arguments are acknowledgedantimicrobials data set to remove
statins (#229)microorganisms data set for MycoBank
IDs and synonyms (#233)skimr package) of class
ab, sir, and disk (#234)as.ab() if input resembles antiviral
codes or names (#232)mdro()
(#227)names to age_groups() so that custom
names can be given (#215)as.sir() to make it explicit when
higher-level taxonomic breakpoints are used (#218)antimicrobials data set (#225)random_mic() and random_disk() to
set skewedness of the distribution and allow multiple
microorganismsThis 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, Canada. To celebrate this great improvement of the package, we also updated the package logo to reflect this change.
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.rsi class, which were all replaced with their
sir equivalents over two years ago.resistance_predict() and
sir_predict() are now deprecated and will be removed in a
future version. Use the tidymodels framework instead, for
which we wrote a
basic introduction.as.sir() 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.clinical_breakpoints data set contains all these
breakpoints, and can be downloaded on our download
page.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() now supports ATC codes of veterinary
antimicrobials (that all start with “Q”)ab_url() now supports retrieving the WHOCC url of their
ATCvet pagesantibiogram() 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() function is also
available for easy usage.AMR
package is now available in 28 languages.microorganisms data set has been enriched with
new columns (mycobank, mycobank_parent, and
mycobank_renamed_to) that provide detailed information for
fungal species.mo_mycobank() to retrieve the MycoBank
record number, analogous to existing functions such as
mo_lpsn() and mo_gbif().as.mo() 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.clinical_breakpoints data set for usage in
as.sir(). EUCAST 2025 is now the new default guideline for
all MIC and disk diffusion interpretations.rules for eucast_rules() are now:
c("breakpoints", "expected_phenotypes").intrinsic_resistant data set, which is now
based on EUCAST Expected Resistant Phenotypes v1.2as.sir() 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_rules()) are
now available for EUCAST 12 (2022), 13 (2023), 14 (2024), and 15
(2025).dosage data set) are now
available for EUCAST 13 (2023), 14 (2024), and 15 (2025).scale_*_mic(), namely:
scale_x_mic(), scale_y_mic(),
scale_colour_mic() and scale_fill_mic(). They
allow easy plotting of MIC values. They allow for manual range
definition and plotting missing intermediate log2 levels.scale_*_sir(), namely:
scale_x_sir(), scale_colour_sir() and
scale_fill_sir(). They allow to plot the sir
class, and translates into the system language at default. They also set
colourblind-safe colours to the plots.rescale_mic(), 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.tidymodels
aminoglycosides()
and betalactams()) are now supported in
tidymodels packages such as recipe and
parsnip. See for more info our
tutorial on using these AMR functions for predictive modelling.top_n_microorganisms() 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 generamo_group_members() 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.mic_p50() and mic_p90() to
retrieve the 50th and 90th percentile of MIC values.parallel package (part of base R). Use
as.sir(your_data, parallel = TRUE) to run SIR
interpretation using multiple cores.as.sir(), it is now possible to use column names
for arguments guideline, ab, mo,
and utias.double() 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()) are updated to reflect the change
to contain NI and SDD.conserve_capped_values in
as.sir() 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.info to silence all console
messagesantibiogram() function
antibiotics has been renamed to
antimicrobials. Using antibiotics will still
work, but now returns a warning.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.add_total_n is now deprecated and
FALSE at default since the denominators are added to the
cells dependent on the formatting_type settingab_transform argument now defaults to
"name", displaying antibiotic column names instead of
codesab_class() and
ab_selector() have been replaced with
amr_class() and amr_selector(). The old
functions are now deprecated and will be removed in a future
version.isoxazolylpenicillins(),
monobactams(), nitrofurans(),
phenicols(), rifamycins(), and
sulfonamides()aminoglycosides()), the
function now always returns a warning that these can be included using
only_treatable = FALSEreturn_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.lincosamides() and
macrolides() do not overlap anymore - each antibiotic is
now classified as either of these and not bothfluoroquinolones(), which now really
only selects second-generation quinolones and up (first-generation
quinolones do not contain a fluorine group)antimicrobials data set
-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.cephalosporins(), cephalosporins_3rd(),
lincosamides(), isoxazolylpenicillins(),
quinolones(), fluoroquinolones(), and
tetracyclines() now contain the argument
only_treatable = TRUE (similar to other antimicrobial
selectors that contain non-treatable drugs)AMO, D01AE16), an antimycotic, which
is now also part of the antifungals() selectorFPE), a 4th gen
cephalosporinTNM), a monobactamBLM), a glycopeptideEFF), to allow mapping to
AMRFinderPlusas.mic() that failed translation of
scientifically formatted numberskeep_operators to
as.mic(). This can be "all" (default),
"none", or "edges". This argument is also
available in the new rescale_mic() and
scale_*_mic() functions.>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.sort()) was fixed in the
same manner; <0.001 now gets sorted before
0.001, and >0.001 gets sorted after
0.001.is.mic() now returns a vector of
TRUE/FALSE if the input is a
data.frame, just like as.sir()eucast_rules() now has an argument
overwrite (default: FALSE) to indicate whether
non-NA values should be overwrittenas.disk()) is now between 0 and 50 mmitalicise_taxonomy() to support HTML
outputcustom_eucast_rules() now supports multiple
antimicrobials and antimicrobial groups to be affected by a single
rulemo_info() now contains an extra element
rank and group_members (with the contents of
the new mo_group_members() function)mo_transform in
antibiogram()antibiogram() returns an empty
data setonly_sir_columns now defaults to
TRUE if any column of a data set contains a class ‘sir’
(functions eucast_rules(),
key_antimicrobials(), mdro(), etc.)as.ab()
(amphotericin B-high, gentamicin-high, kanamycin-high,
streptomycin-high, tobramycin-high)as.ab() for better
performance and accuracy, including the new function
as_reset_session() to remove earlier coercions.as.mo() for better
performance and accuracy, specifically:
sir_confidence_interval() when there
are no isolates availablefirst_isolate() when using the
phenotype-based method, to prioritise records with the highest
availability of SIR valuesscale_y_percent() can now cope with ranges outside the
0-100% rangemdro())
verbose = TRUE) now includes the
guideline nameesbl, carbapenemase,
mecA, mecC, vanA,
vanB to denote column names or logical values indicating
presence of these genes (or production of their proteins)custom_mdro_guideline())sir class for
Positronvctrs integration, a Tidyverse package
working in the background for many Tidyverse functions. For users, this
means that functions such as dplyr’s
bind_rows(), rowwise() and
c_across() 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..xpt) files, since their file
structure and extremely inefficient and requires more disk space than
GitHub allows in a single commit.This changelog only contains changes from AMR v3.0 (June 2025) and later.