Planned as v3.1.0, May 2026.
clinical_breakpoints data set; EUCAST 2026 is now the default for all MIC and disk diffusion interpretationsbreakpoint_type = "ECOFF" in as.sir(); WT/NWT results are fully supported in all resistance/susceptibility functions and plots (#254)future package; breaking change: a non-sequential plan (e.g. future::plan(future::multisession)) must be active before using parallel = TRUE; antibiogram() and wisca() now also support parallel = TRUE (#281)step_mic_log2(), step_sir_numeric(), and new column selectors all_sir(), all_mic(), all_disk()esbl_isolates data set for practising AMR modellingionophores(), peptides(), phosphonics(), spiropyrimidinetriones()interpretive_rules(), a unified function for EUCAST and CLSI interpretive rules; eucast_rules() is now a wrapper around it (#235, #259)amr_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 classas.sir() on data frames: already-converted SIR columns no longer dropped on re-run (#278); metadata columns (e.g. patient, ward) no longer misidentified as antibiotic columns; info = FALSE now suppresses all messages, including for columns without breakpointsas.mic(): values in scientific notation (e.g. 1e-3) now handled correctlyas.ab(): codes containing "PH" or "TH" (e.g. ETH, PHE) no longer return NA when mixed with unrecognised input (#245)"<= 0.002; S" or "S; 0.002") now parsed correctly (#252)sir_df() foreign-language output (#272)custom_eucast_rules() renamed to custom_interpretive_rules(); old name deprecated but still works (#268)mdro() 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)susceptibility() / resistance(): new guideline argument (default EUCAST) to ensure the 'I' category is interpreted correctly per guidelineas.sir() reworked into four clearly defined options: "none", "conservative" (new default), "standard", "lenient" (#243)as.mic() / rescale_mic(): new round_to_next_log2 argument to round values up to the nearest log2 dilution level (#255)antimicrobials$group now a list, so drugs belonging to multiple groups are fully represented; use ab_group(all_groups = TRUE) to retrieve all groups for a drug (#246)FTA), ceftibuten/avibactam (CTA), clorobiocin (CLB), kasugamycin (KAS), ostreogrycin (OST), taniborbactam (TAN), thiostrepton (THS), xeruborbactam (XER), zorbamycin (ZOR)cli (#191, #265)This 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.guideline, ab, mo, and uti: as.sir(..., ab = "column1", mo = "column2", uti = "column3"). This greatly improves the flexibility for users.as.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.