1
0
mirror of https://github.com/msberends/AMR.git synced 2026-03-29 22:55:56 +02:00

Reproduce clinical breakpoints from latest WHONET/AMRIE data

- Ran reproduction_of_microorganisms.groups.R and reproduction_of_clinical_breakpoints.R
  against the latest WHONET/AMRIE source (includes EUCAST 2026, CLSI 2025)
- Updated data/clinical_breakpoints.rda, microorganisms.codes.rda, microorganisms.groups.rda,
  and data-raw/organisms.rds
- Fixed reproduction_of_microorganisms.groups.R: replaced base ifelse() with dplyr::if_else()
  to preserve the <mo> S3 class; base ifelse() strips class attributes, causing
  bind_rows() to fail with strict vctrs type checking in dplyr >= 1.1.0
- Added data-raw/_run_reproduction.R: non-interactive wrapper that overrides View(),
  sets UTF-8 locale, and sources both scripts in the correct order

https://claude.ai/code/session_01S5vMqfsiJb59RN2Gyz1tDY
This commit is contained in:
Claude
2026-03-26 06:01:17 +00:00
parent 9c95aa455c
commit 6912c9deee
8 changed files with 34 additions and 6 deletions

View File

@@ -1,6 +1,6 @@
Package: AMR Package: AMR
Version: 3.0.1.9040 Version: 3.0.1.9041
Date: 2026-03-24 Date: 2026-03-26
Title: Antimicrobial Resistance Data Analysis Title: Antimicrobial Resistance Data Analysis
Description: Functions to simplify and standardise antimicrobial resistance (AMR) Description: Functions to simplify and standardise antimicrobial resistance (AMR)
data analysis and to work with microbial and antimicrobial properties by data analysis and to work with microbial and antimicrobial properties by

View File

@@ -1,4 +1,4 @@
# AMR 3.0.1.9040 # AMR 3.0.1.9041
### New ### New
* Integration with the **tidymodels** framework to allow seamless use of SIR, MIC and disk data in modelling pipelines via `recipes` * Integration with the **tidymodels** framework to allow seamless use of SIR, MIC and disk data in modelling pipelines via `recipes`
@@ -31,6 +31,7 @@
* Fixed SIR and MIC coercion of combined values, e.g. `as.sir("<= 0.002; S") ` or `as.mic("S; 0.002")` (#252) * Fixed SIR and MIC coercion of combined values, e.g. `as.sir("<= 0.002; S") ` or `as.mic("S; 0.002")` (#252)
### Updates ### Updates
* Reproduced `clinical_breakpoints`, `microorganisms.codes`, and `microorganisms.groups` from the latest WHONET/AMRIE source data (EUCAST 2026 and CLSI 2025 included); fixed `reproduction_of_microorganisms.groups.R` to use `dplyr::if_else()` instead of base `ifelse()` to preserve the `<mo>` class in `bind_rows()`
* Extensive `cli` integration for better message handling and clickable links in messages and warnings (#191, #265) * Extensive `cli` integration for better message handling and clickable links in messages and warnings (#191, #265)
* `mdro()` now infers resistance for a _missing_ base drug column from an _available_ corresponding drug+inhibitor combination showing resistance (e.g., piperacillin is absent but required, while piperacillin/tazobactam available and resistant). Can be set with the new argument `infer_from_combinations`, which defaults to `TRUE` (#209). Note that this can yield a higher MDRO detection (which is a good thing as it has become more reliable). * `mdro()` now infers resistance for a _missing_ base drug column from an _available_ corresponding drug+inhibitor combination showing resistance (e.g., piperacillin is absent but required, while piperacillin/tazobactam available and resistant). Can be set with the new argument `infer_from_combinations`, which defaults to `TRUE` (#209). Note that this can yield a higher MDRO detection (which is a good thing as it has become more reliable).
* `susceptibility()` and `resistance()` gained the argument `guideline`, which defaults to EUCAST, for interpreting the 'I' category correctly. * `susceptibility()` and `resistance()` gained the argument `guideline`, which defaults to EUCAST, for interpreting the 'I' category correctly.

View File

@@ -85,9 +85,9 @@ microorganisms.groups <- whonet_organisms %>%
"Mycobacterium canetti")) %>% "Mycobacterium canetti")) %>%
filter(!is.na(SPECIES_GROUP), SPECIES_GROUP != ORGANISM_CODE) %>% filter(!is.na(SPECIES_GROUP), SPECIES_GROUP != ORGANISM_CODE) %>%
transmute(mo_group = as.mo(SPECIES_GROUP), transmute(mo_group = as.mo(SPECIES_GROUP),
mo = ifelse(is.na(mo), mo = if_else(is.na(mo),
as.character(as.mo(ORGANISM, keep_synonyms = TRUE, minimum_matching_score = 0)), as.mo(ORGANISM, keep_synonyms = TRUE, minimum_matching_score = 0),
mo)) %>% mo)) %>%
# add our own CoNS and CoPS, WHONET does not strictly follow Becker et al. (2014, 2019, 2020) # add our own CoNS and CoPS, WHONET does not strictly follow Becker et al. (2014, 2019, 2020)
filter(mo_group != as.mo("CoNS")) %>% filter(mo_group != as.mo("CoNS")) %>%
bind_rows(tibble(mo_group = as.mo("CoNS"), mo = MO_CONS)) %>% bind_rows(tibble(mo_group = as.mo("CoNS"), mo = MO_CONS)) %>%

View File

@@ -0,0 +1,27 @@
# Wrapper to run clinical breakpoints reproduction non-interactively
# Set UTF-8 locale so gsub() can handle Unicode patterns
Sys.setlocale("LC_CTYPE", "C.utf8")
Sys.setlocale("LC_ALL", "C.utf8")
# Overrides View() to just print a summary instead
View <- function(x, title = NULL) {
if (is.data.frame(x) || is.matrix(x)) {
cat("=== View() called:", if (!is.null(title)) title else deparse(substitute(x)), "===\n")
cat("Dimensions:", nrow(x), "rows x", ncol(x), "cols\n")
print(head(x, 10))
cat("...\n\n")
} else {
print(x)
}
invisible(x)
}
setwd("/home/user/AMR")
cat("=== Step 1: Running reproduction_of_microorganisms.groups.R ===\n")
source("data-raw/_reproduction_scripts/reproduction_of_microorganisms.groups.R")
cat("\n=== Step 2: Running reproduction_of_clinical_breakpoints.R ===\n")
source("data-raw/_reproduction_scripts/reproduction_of_clinical_breakpoints.R")
cat("\n=== Done! ===\n")

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.