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.