AMR 3.0.1.9146
Planned as v3.1.0, mid October 2026.
Breaking
-
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
domaincolumn was added to themicroorganismsdata set, andmo_kingdom()now returns the formal kingdom (e.g.,"Pseudomonadati"instead of"Bacteria"). Usemo_domain()for the old behaviour. For non-prokaryotic kingdoms (Fungi, Protozoa, etc.),kingdomanddomainare identical.mo_kingdom()< 3.1.0mo_kingdom()nowmo_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 ofmo_kingdom(); it is now a distinct function. Its output is therefore unchanged, whilemo_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(), andwisca()now uses thefutureandfuture.applypackages, which is faster. A non-sequential plan (e.g.,future::plan(future::multisession)) must be active before usingparallel = TRUE(#281).The options of
capped_mic_handlinginas.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 withbreakpoint_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
guidelineargument or theAMR_guidelineoption: 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 tocount_df(),proportion_df(),sir_df(),ggplot_sir(),geom_sir(), andlabels_sir_count(), which with CLSI now return"S"vs."IR"instead of"SI"vs."R", and toantibiogram(),wisca(), andformat()on the output ofbug_drug_combinations(). Previously, these functions always considered ‘I’ susceptible, as with EUCAST. Useguideline = "EUCAST"for the old behaviour.The
combine_SIargument of these functions is deprecated in favour ofguideline. While set, it is followed literally and takes precedence overguideline. Useguideline = NULLinstead ofcombine_SI = FALSEto keep S, I, and R separate.
New
-
Updated clinical breakpoints
- EUCAST 2026 and CLSI 2026 are now supported, by adding over 5,700 new breakpoints to the
clinical_breakpointsdata set. EUCAST 2026 is now the default guideline for all MIC and disk diffusion interpretations. - Human EUCAST breakpoints from 2019 (v9.0) onwards are now retrieved directly from the EUCAST Excel files, instead of relying on the WHONET repository. As a result:
-
clinical_breakpointsnow contains blocking rows (NAbreakpoints, with the reason innote) where EUCAST gives no breakpoint for an organism, so thatas.sir()no longer falls back to the breakpoint of a broader taxon - Restrictions in EUCAST notes are applied, e.g., zone diameter breakpoints for E. coli only
- EUCAST PK-PD (non-species related) breakpoints of 2019-2023 and H. parainfluenzae MIC breakpoints are now included
-
- EUCAST 2026 and CLSI 2026 are now supported, by adding over 5,700 new breakpoints to the
-
Unified interpretive rules
- New function
interpretive_rules()applies the interpretive rules of both EUCAST and CLSI.eucast_rules()is now a wrapper around this function (#235, #259). - Species named in a rule now also match all other names of the same accepted taxon (e.g., ‘Clostridium ramosum’ for Thomasclavelia ramosa). This also updated the
intrinsic_resistantdata set.
- New function
-
Support for
tidymodelspipelines- New recipe steps
step_mic_log2()andstep_sir_numeric()to use MIC and SIR data in modelling pipelines - New column selectors
all_sir(),all_mic(), andall_disk() - New
esbl_isolatesdata set for practising AMR modelling
- New recipe steps
-
Morphology of bacteria
- New
morphologycolumn in themicroorganismsdata set, with the corresponding functionmo_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. - New argument
add_morphologyinmo_gramstain()to return combined results, such as"Gram-negative rods"
- New
-
Antimicrobials
- New function
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) - New function
add_custom_antimicrobial_synonyms()to add local names, such as trade names, to existing antimicrobials (#307) - New antimicrobial selectors
ionophores(),peptides(),phosphonics(), andspiropyrimidinetriones() - New antimicrobials: cefepime/taniborbactam (
FTA), ceftibuten/avibactam (CTA), clorobiocin (CLB), kasugamycin (KAS), ostreogrycin (OST), sulbactam/durlobactam (SUD1, #308), taniborbactam (TAN), thiostrepton (THS), xeruborbactam (XER), and zorbamycin (ZOR)
- New function
-
Other
- New function
wisca_plot()to assess the distributions of susceptibility and incidence from the Monte Carlo simulations of WISCA - New function
amr_course()to download and unpack course or webinar materials from GitHub in one call - New typed missing value constants
NA_ab_andNA_mo_, for use in pipelines that need missing values of a specific class - A registry of all MO codes since v2.0.0 now prevents existing codes from being reused or mixed up. Codes of earlier releases are translated to the current code of the same taxon.
- New function
Changed
- SIR interpretation (
as.sir())- New argument
enforce_method("auto","mic", or"disk") to force the interpretation method when S3 class information is lost, e.g., when called from Python (#291) - When input consists of whole numbers only, disk zones are now assumed rather than MIC values (#291)
- Capped MICs (e.g.,
<=0.5) now returnIinstead ofSorNIif there is no S category, i.e., in case of an off-scale S breakpoint such as EUCAST’s 0.001 mg/L (#295) - Capped MICs are no longer forced to
SorRif there is no breakpoint for the drug-bug combination - Fixed the documented default of
capped_mic_handling, which is"standard" - On data frames, already-converted SIR columns are no longer dropped on a re-run (#278)
- Metadata columns (e.g.,
patient,ward) are no longer misidentified as antimicrobial columns -
info = FALSEnow suppresses all messages, including those for columns without breakpoints - Combined MIC/SIR input values (e.g.,
"<= 0.002; S"or"S; 0.002") are now parsed correctly (#252) - Setting a year-qualified guideline, such as
options(AMR_guideline = "EUCAST 2012"), no longer causes errors or silently wrong results ininterpretive_rules(),resistance(),susceptibility(),count_resistant(),count_susceptible(), and the SIR plotting and printing functions (#298)
- New argument
-
clinical_breakpointsdata set- Fixed EUCAST breakpoint rules for Aerococcus (v12 onwards), which were never applied, and for Pasteurella, which were partly filed under Neisseria meningitidis (#290)
- Fixed streptomycin breakpoints imported from WHONET, which were coded as streptoduocin (
STR) instead of streptomycin (STR1) - Fixed CLSI breakpoints for sulbactam/durlobactam, which were coded as sulfadimethoxine (
SUD), and added the missing EUCAST 2011 breakpoints for roxithromycin (#308) - Fixed some EUCAST Expert Rules, mostly on S. pneumoniae
- Microorganism coercion (
as.mo()) and properties (mo_*())- Considerably faster through one consistent session cache design, which is cleared when lookup tables change, e.g., after
add_custom_microorganisms()(#313) -
mo_*()functions now retrieve properties of validmoinput directly, and only for unique values - The mapping of outdated taxonomic names to their current names is now remembered per code
- Previously coerced input is now recognised again, e.g., for an unknown species of a known genus, instead of being matched again on every call (#313)
-
mo_uncertainties()now also lists uncertainties of previously coerced input - Translated names in the set language are now recognised, such as the output of
mo_name(x, language = "fr"), and cached per language - Input of the form
"X complex"now falls back to"X"when the complex is not a distinct taxon, preventingNAfor valid clinical descriptions such as"Proteus vulgaris complex"(#287) - Abbreviated genus input now ranks candidates with an exactly matching species epithet above more prevalent organisms, so that e.g.
"S. apiospermum"returns Scedosporium apiospermum instead of a Staphylococcus species (#288) - Abbreviated genus input for species with subspecies (e.g.,
"P. ovale") now returns the species instead of a more prevalent organism, while explicit subspecies (e.g.,"P. ovale curtisi") are preserved (#288) -
Salmonella serovars written with the species, such as
"Salmonella enterica serovar Typhi", no longer return Salmonella bongori or another subspecies -
as.mo()andmo_current()now find the current name of synonyms with multiple sources (e.g., Chaetomium abuense) -
mo_taxonomy()andmo_info()now contain an extra elementdomain
- Considerably faster through one consistent session cache design, which is cleared when lookup tables change, e.g., after
- Own microorganism codes (
set_mo_source()andget_mo_source())- Fixed
get_mo_source()removing themo_sourcefile at the default location in interactive sessions, when called with adestinationthat does not exist - Fixed
get_mo_source()returning themo_sourcealready loaded instead of the one at the requesteddestination - Fixed
get_mo_source(), and thereforeas.mo()and allmo_*()functions, throwing an error in interactive sessions after the original file of themo_sourcewas moved or deleted. Themo_sourcefile is now removed, as documented. - An updated original file now updates the
mo_sourcefile at its owndestinationinstead of at the default location
- Fixed
-
microorganismsdata set- Taxonomic update of all microorganisms, now based on COL 2026-04-18 XR, LPSN and BacDive of October 2026, and MycoBank of January 2026
- Names listed twice by a source now take the correct record (e.g., Eggerthella lenta, Gordonia amarae, and Anisakis simplex were synonyms without a current name)
- Synonyms without a current name are now linked via LPSN or removed, with their codes retired. The M. tuberculosis complex is always kept.
- Higher taxonomy and parent records are now consistent, and all data sets refer only to current names (except
intrinsic_resistant) - Erysipelatoclostridium and its species are now synonyms of Thomasclavelia; E. merdavium is retired
- Author references now strip
emend.and everything after it, so thatrefreflects the combination authority rather than the emendation author (e.g., Rhodococcus equi now returns “Goodfellow et al., 1977” instead of “Nouioui et al., 2018”)
- Antimicrobial coercion (
as.ab()) andantimicrobialsdata set- Considerably faster through the same session cache design as
as.mo()(#313) - Input that is not a known name or code is now coerced up to 70 times faster, with identical results, as LOINC codes, synonyms, and abbreviations are looked up in one step instead of per antimicrobial, and translated names are built once per language
- Fixed a bug where results of
fast_mode(used internally) were remembered and reused by later regular calls, which could returnNAfor valid input (#313) - Codes containing “PH” or “TH” (e.g.,
ETH,PHE) no longer returnNAwhen mixed with unrecognised input (#245) - Input that is not valid UTF-8 (e.g., text exported in a local encoding such as CP949) now returns
NAwith a warning instead of an error -
ab_reset_session()no longer clears the uncertainties ofas.mo()(#313) -
antimicrobials$groupis now alist, so that drugs belonging to multiple groups are fully represented. Useab_group(all_groups = TRUE)to retrieve all groups of a drug (#246). - Trade names of combinations (Tazocin, Timentin, Recarbrio, Exblifep) were listed under a single component, and names of screening libraries and suppliers (e.g., Prestwick, Spectrum) as synonyms. These have been corrected (#315).
- Considerably faster through the same session cache design as
- Antibiograms (
antibiogram()andwisca())-
wisca()now follows Bielicki et al. (2016) more strictly by using for intrinsically resistant pairs, forcing near-zero susceptibility regardless of observed data (based on EUCAST Expected Resistant Phenotypes) - Fixed a bug where both functions failed without the
antimicrobialsargument iftidyselectwas not available, e.g., for binary installations withoutdplyr - Isolates of unknown species are now included in grouped antibiograms and in
wisca(), 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. - Grouped traditional antibiograms now show the (translated) pathogen names, as ungrouped antibiograms do, instead of microorganism codes
-
- Resistance and susceptibility calculation
- New argument
guideline(default: theAMR_guidelineoption, otherwise EUCAST) insusceptibility(),resistance(),count_df(),proportion_df(),sir_df(),ggplot_sir(),geom_sir(),labels_sir_count(),antibiogram(),wisca(), andbug_drug_combinations()to interpret the ‘I’ category correctly per guideline. Functions that return results per category also acceptguideline = NULLto keep S, I, and R separate, while functions that return a single proportion or count give an informative error. - When EUCAST is assumed because neither the
guidelineargument nor theAMR_guidelineoption is set, a message explains how to change this, once per session and not in R Markdown or Quarto documents -
count_*()andproportion_*()now handle WT, NWT, NS, and NI results correctly (#321)
- New argument
- MICs and disk diffusion
- New argument
round_to_next_log2inas.mic()andrescale_mic()to round values up to the nearest log2 dilution level (#255) -
as.mic()now handles values in scientific notation (e.g.,1e-3) correctly - Input validation of
as.disk()is now more strict, rejecting values that are not recognisable as a numeric disk zone diameter
- New argument
- MDRO determination (
mdro())- Resistance can now be inferred from a drug/inhibitor combination when the column of the base drug is absent (e.g., piperacillin inferred from piperacillin/tazobactam). This is controlled with the new argument
infer_from_combinations(default:TRUE) (#209). - BRMO classification now includes bacterial complexes (#275)
- Resistance can now be inferred from a drug/inhibitor combination when the column of the base drug is absent (e.g., piperacillin inferred from piperacillin/tazobactam). This is controlled with the new argument
-
top_n_microorganisms()- New argument
property_for_eachfor sub-grouping within the top n groups. Rank ordering is enforced, so that only lower taxonomic ranks are allowed. -
property = NULLis now accepted - The inner filter now tracks the original row indices, to prevent contamination across groups
- New argument
- Translations
- Improved French translations, kindly provided by Mathilde Garé (#322)
- Improved translations of combination names and antimicrobial groups in 20 languages
- Translating is now around 50 times faster, with identical results, as the translations are prepared once per language and applied to all values at once. This also makes
ab_group()faster in other languages. - Translations are no longer translated again (e.g., “Ticarcillinee” in Dutch and “groupee” in French), and parts of combination names are no longer left untranslated
- Fixed Italian names of CoNS and CoPS (#256), Dutch names of antimicrobials, and output of
sir_df()in other languages (#272)
- Interpretive rules (
interpretive_rules(),eucast_rules(), andclsi_rules())- Considerably faster, around 11 to 18 times, with identical results
- The number of added and changed values now only counts values that were actually written, so that values left untouched due to
overwrite = FALSEoradd_if_missing = FALSEare no longer reported as changes or additions, also not in the output ofverbose = TRUE(#259) - The changes of custom rules are now also printed when no other rules were applied
- The
rulecolumn of the output ofverbose = TRUEno longer contains formatting markup (e.g.,{.field AMC}) for the inhibitor-inheritance rules
-
custom_eucast_rules()has been renamed tocustom_interpretive_rules(). The old name is now deprecated but still works (#268). - Logical comparison (
==,!=) of thesirclass with afactoris now possible on R >= 4.3 - New argument
guidelineinrandom_mic()andrandom_disk(), defaulting to theAMR_guidelineoption (otherwise EUCAST), so that generated values are based on the latest breakpoints of one guideline instead of those of all guidelines and years combined - Fixed
format()on the output ofbug_drug_combinations(), which counted I and SDD as resistant with the defaultcombine_SI = TRUE, contrary to its documentation. It now reads the guideline used inbug_drug_combinations(), which can be overridden with its ownguidelineargument, and also counts NS as resistant. - Fixed a bug in
g.test()that returned the degrees of freedom asargumentinstead ofparameter, so that they were not printed - Fixed a bug where R could crash after unloading the
data.tablepackage, and where suggested packages available on the machine that built the package were used even if they were not available to the user
Other
- Improved console messages with clickable links throughout the package, powered by
cliif it is installed (#191, #265) - The section Interpretation of SIR (in
?as.sir) now explains for all functions with aguidelineargument for aggregated analyses how S, SDD, I, R, WT, NWT, NS, and NI are categorised per guideline. The handling of ‘I’ per MDRO guideline inmdro()will be revised in a future version (#323). -
labels_sir_count()is now documented together withggplot_sir() - The documentation of
get_AMR_locale()now describes the actual order in which the language is determined: theAMR_localeoption, then theLANGsystem variable, thenLANGUAGEonly ifLANGis not set, and then the system locale - Revamped console output of
interpretive_rules(), with section headers, S/I/R values styled as in the printing ofsircolumns in tibbles, and the summary of edits sorted by SIR level, usingcliif it is installed (#259) - The printing of
custom_interpretive_rules()andcustom_mdro_guideline()now styles SIR values as in tibbles, i.e., the colour ofIdepends on the guideline.WT,NWT, andNSwere previously shown asSDD,I, andR, and values other thanSandRasI. - The ‘AMR for Python’ vignette now contains sections on installation channels (stable from CRAN, or development from GitHub via
AMR.beta) and on usingenforce_methodinas_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
ggplot2v4.0.0 (#236)- MIC scale functions (such as
scale_y_mic()) will now be applied automatically when plotting values of classmic - SIR scale functions (such as
scale_x_sir()) will now be applied automatically when plotting values of classsir
- MIC scale functions (such as
- Fixed a bug in
antibiogram()for when no antimicrobials are set - Fixed a bug in
antibiogram()to allow column names containing the+character (#222) - Fixed a bug in
as.ab()for antimicrobial codes with a number in it if they are preceded by a space - Fixed a bug in
eucast_rules()for using specific custom rules - Fixed a bug in
as.sir()to allow any tidyselect language (#220) - Fixed a bug in
as.sir()to pick right breakpoint whenuti = FALSE(#216) - Fixed a bug in
ggplot_sir()when usingcombine_SI = FALSE(#213) - Fixed a bug in
mdro()to make sure all genes specified in arguments are acknowledged - Fixed a bug the
antimicrobialsdata set to remove statins (#229) - Fixed a bug the
microorganismsdata set for MycoBank IDs and synonyms (#233) - Fixed ATC J01CR05 to map to piperacillin/tazobactam rather than piperacillin/sulbactam (#230)
- Fixed skimmers (
skimrpackage) of classab,sir, anddisk(#234) - Fixed all plotting to contain a separate colour for SDD (susceptible dose-dependent) (#223)
- Fixed some specific Dutch translations for antimicrobials
- Added a warning to
as.ab()if input resembles antiviral codes or names (#232) - Added all reasons in verbose output of
mdro()(#227) - Added
namestoage_groups()so that custom names can be given (#215) - Added note to
as.sir()to make it explicit when higher-level taxonomic breakpoints are used (#218) - Added antibiotic codes from the Comprehensive Antibiotic Resistance Database (CARD) to the
antimicrobialsdata set (#225) - Updated Fosfomycin to be of antibiotic class Phosphonics (#225)
- Updated
random_mic()andrandom_disk()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, Canada. To celebrate this great improvement of the package, we also updated the package logo to reflect this change.
Breaking
- Data set
antibioticshas been renamed toantimicrobialsas the data set contains more than just antibiotics. Usingantibioticswill still work, but now returns a warning. - Removed all functions and references that used the deprecated
rsiclass, which were all replaced with theirsirequivalents over two years ago. - Functions
resistance_predict()andsir_predict()are now deprecated and will be removed in a future version. Use thetidymodelsframework instead, for which we wrote a basic introduction.
New
-
One Health implementation
- Function
as.sir()now has extensive support for veterinary breakpoints from CLSI. Usebreakpoint_type = "animal"and set thehostargument to a variable that contains animal species names. - The
clinical_breakpointsdata set contains all these breakpoints, and can be downloaded on our download page. - The (new)
antimicrobialsdata 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 pages
- Function
-
Support for WISCA antibiograms
- The
antibiogram()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 dedicatedwisca()function is also available for easy usage.
- The
-
More global coverage of languages
- Added full support for 8 new languages: Arabic, Bengali, Hindi, Indonesian, Korean, Swahili, Urdu, and Vietnamese. The
AMRpackage is now available in 28 languages.
- Added full support for 8 new languages: Arabic, Bengali, Hindi, Indonesian, Korean, Swahili, Urdu, and Vietnamese. The
-
Major update to fungal taxonomy and tools for mycologists
- MycoBank has now been integrated as the primary taxonomic source for fungi. The
microorganismsdata set has been enriched with new columns (mycobank,mycobank_parent, andmycobank_renamed_to) that provide detailed information for fungal species. - A remarkable addition of over 20,000 new fungal records
- New function
mo_mycobank()to retrieve the MycoBank record number, analogous to existing functions such asmo_lpsn()andmo_gbif(). - The
as.mo()function and allmo_*()functions now include anonly_fungiargument, 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 newAMR_only_fungioption. - Also updated other kingdoms, welcoming a total of 2,149 new records from 2023 and 927 from 2024.
- MycoBank has now been integrated as the primary taxonomic source for fungi. The
-
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_breakpointsdata set for usage inas.sir(). 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
rulesforeucast_rules()are now:c("breakpoints", "expected_phenotypes"). - Updated the
intrinsic_resistantdata set, which is now based on EUCAST Expected Resistant Phenotypes v1.2 -
as.sir()now brings additional factor levels: “NI” for non-interpretable and “SDD” for susceptible dose-dependent. Currently, theclinical_breakpointsdata set contains 24 breakpoints that can return the value “SDD” instead of “I”. - EUCAST interpretive rules (using
eucast_rules()) are now available for EUCAST 12 (2022), 13 (2023), 14 (2024), and 15 (2025). - EUCAST dosage tables (
dosagedata set) are now available for EUCAST 13 (2023), 14 (2024), and 15 (2025).
- 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
-
New advanced ggplot2 extensions for MIC and SIR plotting and transforming
- New function group
scale_*_mic(), namely:scale_x_mic(),scale_y_mic(),scale_colour_mic()andscale_fill_mic(). 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(),scale_colour_sir()andscale_fill_sir(). They allow to plot thesirclass, and translates into the system language at default. They also set colourblind-safe colours to the plots. - New function
rescale_mic(), which allows users to rescale MIC values to a manually set range. This is the powerhouse behind thescale_*_mic()functions, but it can be used independently to, for instance, compare equality in MIC distributions by rescaling them to the same range first.
- New function group
-
Support for Python
- While using R for the heavy lifting, our ‘AMR’ Python Package 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()andbetalactams()) are now supported intidymodelspackages such asrecipeandparsnip. See for more info our tutorial on using these AMR functions for predictive modelling.
- All antimicrobial selectors (such as
-
Other
- New function
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 genera - New function
mo_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. - New functions
mic_p50()andmic_p90()to retrieve the 50th and 90th percentile of MIC values.
- New function
Changed
- SIR interpretation
- Support for parallel computing to greatly improve speed using the
parallelpackage (part of base R). Useas.sir(your_data, parallel = TRUE)to run SIR interpretation using multiple cores. - For
as.sir(), it is now possible to use column names for argumentsguideline,ab,mo, anduti - 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()on asirobject will return 1 for S, 2 for SDD/I, and 3 for R (NI will becomeNA). Other functions usingsirclasses (e.g.,summary()) 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_valuesinas.sir()has been replaced withcapped_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. Usingconserve_capped_valuesis now deprecated and returns a warning. - Added argument
infoto silence all console messages
- Support for parallel computing to greatly improve speed using the
-
antibiogram()function- Argument
antibioticshas been renamed toantimicrobials. Usingantibioticswill still work, but now returns a warning. - Added argument
formatting_typeto set any of the 22 options for the formatting of all ‘cells’. This defaults to18for non-WISCA and14for WISCA, changing the output of antibiograms to cells with more info. - For this reason,
add_total_nis now deprecated andFALSEat default since the denominators are added to the cells dependent on theformatting_typesetting - The
ab_transformargument now defaults to"name", displaying antibiotic column names instead of codes
- Argument
- 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()andab_selector()have been replaced withamr_class()andamr_selector(). The old functions are now deprecated and will be removed in a future version. - Added selectors
isoxazolylpenicillins(),monobactams(),nitrofurans(),phenicols(),rifamycins(), andsulfonamides() - When using antimicrobial selectors that exclude non-treatable drugs (such as gentamicin-high when using
aminoglycosides()), the function now always returns a warning that these can be included usingonly_treatable = FALSE - Added a new argument
return_allto all selectors, which defaults toTRUEto include any match. WithFALSE, 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()andmacrolides()do not overlap anymore - each antibiotic is now classified as either of these and not both - Fixed selector
fluoroquinolones(), which now really only selects second-generation quinolones and up (first-generation quinolones do not contain a fluorine group)
- ‘Antibiotic selectors’ are now called ‘antimicrobial selectors’ since their scope is broader than just antibiotics. All documentation have been updated, and
-
antimicrobialsdata 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 fromFOX1toFOX-S, while the old code remains to work. - For this reason, the antimicrobial selectors
cephalosporins(),cephalosporins_3rd(),lincosamides(),isoxazolylpenicillins(),quinolones(),fluoroquinolones(), andtetracyclines()now contain the argumentonly_treatable = TRUE(similar to other antimicrobial selectors that contain non-treatable drugs) - Added amorolfine (
AMO, D01AE16), an antimycotic, which is now also part of theantifungals()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
- Added agents used for screening, with an ID all ending with
- 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()that failed translation of scientifically formatted numbers - Added new argument
keep_operatorstoas.mic(). This can be"all"(default),"none", or"edges". This argument is also available in the newrescale_mic()andscale_*_mic()functions. - Comparisons of MIC values are now more strict. For example,
>32is higher than (and never equal to)32. Thus,as.mic(">32") == as.mic(32)now returnsFALSE, andas.mic(">32") > as.mic(32)now returnsTRUE. - Sorting of MIC values (using
sort()) was fixed in the same manner;<0.001now gets sorted before0.001, and>0.001gets sorted after0.001. - Intermediate log2 levels used for MIC plotting are now more common values instead of following a strict dilution range
-
is.mic()now returns a vector ofTRUE/FALSEif the input is adata.frame, just likeas.sir()
-
eucast_rules()now has an argumentoverwrite(default:FALSE) to indicate whether non-NAvalues should be overwritten - Disks of 0 to 5 mm are now allowed, the newly allowed range for disk diffusion (
as.disk()) is now between 0 and 50 mm - Updated
italicise_taxonomy()to support HTML output -
custom_eucast_rules()now supports multiple antimicrobials and antimicrobial groups to be affected by a single rule -
mo_info()now contains an extra elementrankandgroup_members(with the contents of the newmo_group_members()function) - Updated all ATC codes from WHOCC
- Updated all antimicrobial DDDs from WHOCC
- Fix for using a manual value for
mo_transforminantibiogram() - Fixed a bug for when
antibiogram()returns an empty data set - Argument
only_sir_columnsnow defaults toTRUEif any column of a data set contains a class ‘sir’ (functionseucast_rules(),key_antimicrobials(),mdro(), etc.) - Added Sensititre codes for animals, antimicrobials and microorganisms
- Fix for mapping ‘high level’ antimicrobials in
as.ab()(amphotericin B-high, gentamicin-high, kanamycin-high, streptomycin-high, tobramycin-high) - Improved overall algorithm of
as.ab()for better performance and accuracy, including the new functionas_reset_session()to remove earlier coercions. - Improved overall algorithm of
as.mo()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()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()when using the phenotype-based method, to prioritise records with the highest availability of SIR values -
scale_y_percent()can now cope with ranges outside the 0-100% range - MDRO determination (using
mdro())- 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,vanBto 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())
- The Verbose Mode (
- Added console colours support of
sirclass 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
vctrsintegration, a Tidyverse package working in the background for many Tidyverse functions. For users, this means that functions such asdplyr’sbind_rows(),rowwise()andc_across()are now supported for e.g. columns of classmic. Despite this, thisAMRpackage is still zero-dependent on any other package, includingdplyrandvctrs. - 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.
- For prior v1 versions, please see our v1 archive.