mirror of
https://github.com/msberends/AMR.git
synced 2025-07-09 00:43:00 +02:00
sort sir history
This commit is contained in:
448
R/mdro.R
448
R/mdro.R
@ -193,17 +193,17 @@ mdro <- function(x = NULL,
|
||||
meet_criteria(combine_SI, allow_class = "logical", has_length = 1)
|
||||
meet_criteria(verbose, allow_class = "logical", has_length = 1)
|
||||
meet_criteria(only_sir_columns, allow_class = "logical", has_length = 1)
|
||||
|
||||
|
||||
if (!any(is_sir_eligible(x))) {
|
||||
stop_("There were no possible SIR columns found in the data set. Transform columns with `as.sir()` for valid antimicrobial interpretations.")
|
||||
}
|
||||
|
||||
|
||||
info.bak <- info
|
||||
# don't thrown info's more than once per call
|
||||
if (isTRUE(info)) {
|
||||
info <- message_not_thrown_before("mdro")
|
||||
}
|
||||
|
||||
|
||||
if (interactive() && isTRUE(verbose) && isTRUE(info)) {
|
||||
txt <- paste0(
|
||||
"WARNING: In Verbose mode, the mdro() function does not return the MDRO results, but instead returns a data set in logbook form with extensive info about which isolates would be MDRO-positive, or why they are not.",
|
||||
@ -221,7 +221,7 @@ mdro <- function(x = NULL,
|
||||
return(x)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
group_msg <- ""
|
||||
if (isTRUE(info.bak)) {
|
||||
# print group name if used in dplyr::group_by()
|
||||
@ -243,15 +243,15 @@ mdro <- function(x = NULL,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# force regular [data.frame], not a tibble or data.table
|
||||
x <- as.data.frame(x, stringsAsFactors = FALSE)
|
||||
|
||||
|
||||
if (pct_required_classes > 1) {
|
||||
# allow pct_required_classes = 75 -> pct_required_classes = 0.75
|
||||
pct_required_classes <- pct_required_classes / 100
|
||||
}
|
||||
|
||||
|
||||
guideline.bak <- guideline
|
||||
if (is.list(guideline)) {
|
||||
# Custom MDRO guideline ---------------------------------------------------
|
||||
@ -260,8 +260,8 @@ mdro <- function(x = NULL,
|
||||
txt <- paste0(
|
||||
"Determining MDROs based on custom rules",
|
||||
ifelse(isTRUE(attributes(guideline)$as_factor),
|
||||
paste0(", resulting in factor levels: ", paste0(attributes(guideline)$values, collapse = " < ")),
|
||||
""
|
||||
paste0(", resulting in factor levels: ", paste0(attributes(guideline)$values, collapse = " < ")),
|
||||
""
|
||||
),
|
||||
"."
|
||||
)
|
||||
@ -314,7 +314,7 @@ mdro <- function(x = NULL,
|
||||
"invalid guideline: ", guideline.bak
|
||||
)
|
||||
guideline <- list(code = guideline)
|
||||
|
||||
|
||||
# try to find columns based on type
|
||||
# -- mo
|
||||
if (is.null(col_mo)) {
|
||||
@ -329,7 +329,7 @@ mdro <- function(x = NULL,
|
||||
col_mo <- "mo"
|
||||
}
|
||||
stop_if(is.null(col_mo), "`col_mo` must be set")
|
||||
|
||||
|
||||
if (guideline$code == "cmi2012") {
|
||||
guideline$name <- "Multidrug-resistant, extensively drug-resistant and pandrug-resistant bacteria: an international expert proposal for interim standard definitions for acquired resistance."
|
||||
guideline$author <- "Magiorakos AP, Srinivasan A, Carey RB, ..., Vatopoulos A, Weber JT, Monnet DL"
|
||||
@ -360,7 +360,7 @@ mdro <- function(x = NULL,
|
||||
guideline$version <- "WHO/HTM/TB/2014.11, 2014"
|
||||
guideline$source_url <- font_url("https://www.who.int/publications/i/item/9789241548809", "Direct download")
|
||||
guideline$type <- "MDR-TB's"
|
||||
|
||||
|
||||
# support per country:
|
||||
} else if (guideline$code == "mrgn") {
|
||||
guideline$name <- "Cross-border comparison of the Dutch and German guidelines on multidrug-resistant Gram-negative microorganisms"
|
||||
@ -377,7 +377,7 @@ mdro <- function(x = NULL,
|
||||
} else {
|
||||
stop("This guideline is currently unsupported: ", guideline$code, call. = FALSE)
|
||||
}
|
||||
|
||||
|
||||
if (guideline$code == "cmi2012") {
|
||||
cols_ab <- get_column_abx(
|
||||
x = x,
|
||||
@ -456,7 +456,7 @@ mdro <- function(x = NULL,
|
||||
}
|
||||
cols_ab <- c(cols_ab, c(AMP = unname(cols_ab[names(cols_ab) == "AMX"])))
|
||||
}
|
||||
|
||||
|
||||
# nolint start
|
||||
AMC <- cols_ab["AMC"]
|
||||
AMK <- cols_ab["AMK"]
|
||||
@ -601,13 +601,13 @@ mdro <- function(x = NULL,
|
||||
abx_tb <- abx_tb[!is.na(abx_tb)]
|
||||
stop_if(guideline$code == "tb" & length(abx_tb) == 0, "no antimycobacterials found in data set")
|
||||
# nolint end
|
||||
|
||||
|
||||
if (isTRUE(combine_SI)) {
|
||||
search_result <- "R"
|
||||
} else {
|
||||
search_result <- c("R", "I")
|
||||
}
|
||||
|
||||
|
||||
if (isTRUE(info)) {
|
||||
if (isTRUE(combine_SI)) {
|
||||
cat(font_red("\nOnly results with 'R' are considered as resistance. Use `combine_SI = FALSE` to also consider 'I' as resistance.\n"))
|
||||
@ -615,18 +615,18 @@ mdro <- function(x = NULL,
|
||||
cat(font_red("\nResults with 'R' or 'I' are considered as resistance. Use `combine_SI = TRUE` to only consider 'R' as resistance.\n"))
|
||||
}
|
||||
cat("\n", word_wrap("Determining multidrug-resistant organisms (MDRO), according to:"), "\n",
|
||||
word_wrap(paste0(font_bold("Guideline: "), font_italic(guideline$name)), extra_indent = 11, as_note = FALSE), "\n",
|
||||
word_wrap(paste0(font_bold("Author(s): "), guideline$author), extra_indent = 11, as_note = FALSE), "\n",
|
||||
ifelse(!is.na(guideline$version),
|
||||
paste0(word_wrap(paste0(font_bold("Version: "), guideline$version), extra_indent = 11, as_note = FALSE), "\n"),
|
||||
""
|
||||
),
|
||||
paste0(font_bold("Source: "), guideline$source_url),
|
||||
"\n\n",
|
||||
sep = ""
|
||||
word_wrap(paste0(font_bold("Guideline: "), font_italic(guideline$name)), extra_indent = 11, as_note = FALSE), "\n",
|
||||
word_wrap(paste0(font_bold("Author(s): "), guideline$author), extra_indent = 11, as_note = FALSE), "\n",
|
||||
ifelse(!is.na(guideline$version),
|
||||
paste0(word_wrap(paste0(font_bold("Version: "), guideline$version), extra_indent = 11, as_note = FALSE), "\n"),
|
||||
""
|
||||
),
|
||||
paste0(font_bold("Source: "), guideline$source_url),
|
||||
"\n\n",
|
||||
sep = ""
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
ab_missing <- function(ab) {
|
||||
isTRUE(ab %in% c(NULL, NA)) | length(ab) == 0
|
||||
}
|
||||
@ -638,7 +638,7 @@ mdro <- function(x = NULL,
|
||||
out[is.na(out)] <- FALSE
|
||||
out
|
||||
}
|
||||
|
||||
|
||||
# antibiotic classes
|
||||
# nolint start
|
||||
aminoglycosides <- c(TOB, GEN)
|
||||
@ -649,17 +649,18 @@ mdro <- function(x = NULL,
|
||||
carbapenems <- c(DOR, ETP, IPM, MEM, MEV)
|
||||
fluoroquinolones <- c(CIP, ENX, FLE, GAT, GEM, GRX, LVX, LOM, MFX, NOR, OFX, PAZ, PEF, PRU, RFL, SPX, TMX, TVA)
|
||||
# nolint end
|
||||
|
||||
|
||||
# helper function for editing the table
|
||||
trans_tbl <- function(to, rows, cols, any_all) {
|
||||
cols <- cols[!ab_missing(cols)]
|
||||
cols <- cols[!is.na(cols)]
|
||||
if (length(rows) > 0 && length(cols) > 0) {
|
||||
x[, cols] <- as.data.frame(lapply(
|
||||
x[, cols, drop = FALSE],
|
||||
function(col) as.sir(col)
|
||||
),
|
||||
stringsAsFactors = FALSE
|
||||
x[, cols] <- as.data.frame(
|
||||
lapply(
|
||||
x[, cols, drop = FALSE],
|
||||
function(col) as.sir(col)
|
||||
),
|
||||
stringsAsFactors = FALSE
|
||||
)
|
||||
x[rows, "columns_nonsusceptible"] <<- vapply(
|
||||
FUN.VALUE = character(1),
|
||||
@ -670,22 +671,23 @@ mdro <- function(x = NULL,
|
||||
x[row, group_vct, drop = FALSE],
|
||||
function(y) y %in% search_result
|
||||
)
|
||||
paste(sort(c(
|
||||
unlist(strsplit(x[row, "columns_nonsusceptible", drop = TRUE], ", ", fixed = TRUE)),
|
||||
names(cols_nonsus)[cols_nonsus]
|
||||
)),
|
||||
collapse = ", "
|
||||
paste(
|
||||
sort(c(
|
||||
unlist(strsplit(x[row, "columns_nonsusceptible", drop = TRUE], ", ", fixed = TRUE)),
|
||||
names(cols_nonsus)[cols_nonsus]
|
||||
)),
|
||||
collapse = ", "
|
||||
)
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
if (any_all == "any") {
|
||||
search_function <- any
|
||||
} else if (any_all == "all") {
|
||||
search_function <- all
|
||||
}
|
||||
x_transposed <- as.list(as.data.frame(t(x[, cols, drop = FALSE]),
|
||||
stringsAsFactors = FALSE
|
||||
stringsAsFactors = FALSE
|
||||
))
|
||||
rows_affected <- vapply(
|
||||
FUN.VALUE = logical(1),
|
||||
@ -704,7 +706,7 @@ mdro <- function(x = NULL,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
trans_tbl2 <- function(txt, rows, lst) {
|
||||
if (isTRUE(info)) {
|
||||
message_(txt, "...", appendLF = FALSE, as_note = FALSE)
|
||||
@ -714,12 +716,13 @@ mdro <- function(x = NULL,
|
||||
lst_vector <- unlist(lst)[!is.na(unlist(lst))]
|
||||
# keep only unique ones:
|
||||
lst_vector <- lst_vector[!duplicated(paste(lst_vector, names(lst_vector)))]
|
||||
|
||||
x[, lst_vector] <- as.data.frame(lapply(
|
||||
x[, lst_vector, drop = FALSE],
|
||||
function(col) as.sir(col)
|
||||
),
|
||||
stringsAsFactors = FALSE
|
||||
|
||||
x[, lst_vector] <- as.data.frame(
|
||||
lapply(
|
||||
x[, lst_vector, drop = FALSE],
|
||||
function(col) as.sir(col)
|
||||
),
|
||||
stringsAsFactors = FALSE
|
||||
)
|
||||
x[rows, "classes_in_guideline"] <<- length(lst)
|
||||
x[rows, "classes_available"] <<- vapply(
|
||||
@ -733,7 +736,7 @@ mdro <- function(x = NULL,
|
||||
))
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
if (isTRUE(verbose)) {
|
||||
x[rows, "columns_nonsusceptible"] <<- vapply(
|
||||
FUN.VALUE = character(1),
|
||||
@ -748,30 +751,31 @@ mdro <- function(x = NULL,
|
||||
FUN.VALUE = double(1),
|
||||
rows,
|
||||
function(row, group_tbl = lst) {
|
||||
sum(vapply(
|
||||
FUN.VALUE = logical(1),
|
||||
group_tbl,
|
||||
function(group) {
|
||||
any(unlist(x[row, group[!is.na(group)], drop = TRUE]) %in% search_result, na.rm = TRUE)
|
||||
}
|
||||
),
|
||||
na.rm = TRUE
|
||||
sum(
|
||||
vapply(
|
||||
FUN.VALUE = logical(1),
|
||||
group_tbl,
|
||||
function(group) {
|
||||
any(unlist(x[row, group[!is.na(group)], drop = TRUE]) %in% search_result, na.rm = TRUE)
|
||||
}
|
||||
),
|
||||
na.rm = TRUE
|
||||
)
|
||||
}
|
||||
)
|
||||
# for PDR; all drugs are R (or I if combine_SI = FALSE)
|
||||
x_transposed <- as.list(as.data.frame(t(x[rows, lst_vector, drop = FALSE]),
|
||||
stringsAsFactors = FALSE
|
||||
stringsAsFactors = FALSE
|
||||
))
|
||||
row_filter <- vapply(FUN.VALUE = logical(1), x_transposed, function(y) all(y %in% search_result, na.rm = TRUE))
|
||||
x[which(row_filter), "classes_affected"] <<- 999
|
||||
}
|
||||
|
||||
|
||||
if (isTRUE(info)) {
|
||||
message_(" OK.", add_fn = list(font_green, font_bold), as_note = FALSE)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
x[, col_mo] <- as.mo(as.character(x[, col_mo, drop = TRUE]))
|
||||
# rename col_mo to prevent interference with joined columns
|
||||
colnames(x)[colnames(x) == col_mo] <- ".col_mo"
|
||||
@ -782,12 +786,12 @@ mdro <- function(x = NULL,
|
||||
x$row_number <- seq_len(nrow(x))
|
||||
x$reason <- paste0("not covered by ", toupper(guideline$code), " guideline")
|
||||
x$columns_nonsusceptible <- ""
|
||||
|
||||
|
||||
if (guideline$code == "cmi2012") {
|
||||
# CMI, 2012 ---------------------------------------------------------------
|
||||
# Non-susceptible = R and I
|
||||
# (see header 'Approaches to Creating Definitions for MDR, XDR and PDR' in paper)
|
||||
|
||||
|
||||
# take amoxicillin if ampicillin is unavailable
|
||||
if (is.na(AMP) && !is.na(AMX)) {
|
||||
if (isTRUE(verbose)) {
|
||||
@ -808,87 +812,87 @@ mdro <- function(x = NULL,
|
||||
}
|
||||
CTX <- CRO
|
||||
}
|
||||
|
||||
|
||||
# intrinsic resistant must not be considered for the determination of MDR,
|
||||
# so let's just remove them, meticulously following the paper
|
||||
x[which(x$genus == "Enterococcus" & x$species == "faecium"), ab_NA(IPM)] <- NA
|
||||
x[which(x$genus == "Enterococcus" & x$species == "faecalis"), ab_NA(QDA)] <- NA
|
||||
x[which((x$genus == "Providencia" & x$species == "rettgeri") |
|
||||
(x$genus == "Providencia" & x$species == "stuartii")), ab_NA(c(GEN, TOB, NET))] <- NA
|
||||
(x$genus == "Providencia" & x$species == "stuartii")), ab_NA(c(GEN, TOB, NET))] <- NA
|
||||
x[which(x$genus == "Escherichia" & x$species == "hermannii"), ab_NA(c(TCC, TZP))] <- NA
|
||||
x[which((x$genus == "Citrobacter" & x$species == "freundii") |
|
||||
(x$genus == "Enterobacter" & x$species == "aerogenes") |
|
||||
(x$genus == "Klebsiella" & x$species == "aerogenes") # new name (2017)
|
||||
| (x$genus == "Enterobacter" & x$species == "cloacae") |
|
||||
(x$genus == "Hafnia" & x$species == "alvei") |
|
||||
(x$genus == "Morganella" & x$species == "morganii") |
|
||||
(x$genus == "Proteus" & x$species == "penneri") |
|
||||
(x$genus == "Proteus" & x$species == "vulgaris") |
|
||||
(x$genus == "Serratia" & x$species == "marcescens")), ab_NA(CZO)] <- NA
|
||||
(x$genus == "Enterobacter" & x$species == "aerogenes") |
|
||||
(x$genus == "Klebsiella" & x$species == "aerogenes") # new name (2017)
|
||||
| (x$genus == "Enterobacter" & x$species == "cloacae") |
|
||||
(x$genus == "Hafnia" & x$species == "alvei") |
|
||||
(x$genus == "Morganella" & x$species == "morganii") |
|
||||
(x$genus == "Proteus" & x$species == "penneri") |
|
||||
(x$genus == "Proteus" & x$species == "vulgaris") |
|
||||
(x$genus == "Serratia" & x$species == "marcescens")), ab_NA(CZO)] <- NA
|
||||
x[which((x$genus == "Morganella" & x$species == "morganii") |
|
||||
(x$genus == "Proteus" & x$species == "penneri") |
|
||||
(x$genus == "Proteus" & x$species == "vulgaris") |
|
||||
(x$genus == "Serratia" & x$species == "marcescens")), ab_NA(CXM)] <- NA
|
||||
(x$genus == "Proteus" & x$species == "penneri") |
|
||||
(x$genus == "Proteus" & x$species == "vulgaris") |
|
||||
(x$genus == "Serratia" & x$species == "marcescens")), ab_NA(CXM)] <- NA
|
||||
x[which((x$genus == "Morganella" & x$species == "morganii") |
|
||||
(x$genus == "Proteus" & x$species == "mirabilis") |
|
||||
(x$genus == "Proteus" & x$species == "penneri") |
|
||||
(x$genus == "Proteus" & x$species == "vulgaris") |
|
||||
(x$genus == "Providencia" & x$species == "rettgeri") |
|
||||
(x$genus == "Providencia" & x$species == "stuartii")), ab_NA(TGC)] <- NA
|
||||
(x$genus == "Proteus" & x$species == "mirabilis") |
|
||||
(x$genus == "Proteus" & x$species == "penneri") |
|
||||
(x$genus == "Proteus" & x$species == "vulgaris") |
|
||||
(x$genus == "Providencia" & x$species == "rettgeri") |
|
||||
(x$genus == "Providencia" & x$species == "stuartii")), ab_NA(TGC)] <- NA
|
||||
x[which((x$genus == "Citrobacter" & x$species == "koseri") |
|
||||
(x$genus == "Citrobacter" & x$species == "freundii") |
|
||||
(x$genus == "Enterobacter" & x$species == "aerogenes") |
|
||||
(x$genus == "Klebsiella" & x$species == "aerogenes") # new name (2017)
|
||||
| (x$genus == "Enterobacter" & x$species == "cloacae") |
|
||||
(x$genus == "Escherichia" & x$species == "hermannii") |
|
||||
(x$genus == "Hafnia" & x$species == "alvei") |
|
||||
(x$genus == "Klebsiella") |
|
||||
(x$genus == "Morganella" & x$species == "morganii") |
|
||||
(x$genus == "Proteus" & x$species == "penneri") |
|
||||
(x$genus == "Proteus" & x$species == "vulgaris") |
|
||||
(x$genus == "Providencia" & x$species == "rettgeri") |
|
||||
(x$genus == "Providencia" & x$species == "stuartii") |
|
||||
(x$genus == "Serratia" & x$species == "marcescens")), ab_NA(AMP)] <- NA
|
||||
(x$genus == "Citrobacter" & x$species == "freundii") |
|
||||
(x$genus == "Enterobacter" & x$species == "aerogenes") |
|
||||
(x$genus == "Klebsiella" & x$species == "aerogenes") # new name (2017)
|
||||
| (x$genus == "Enterobacter" & x$species == "cloacae") |
|
||||
(x$genus == "Escherichia" & x$species == "hermannii") |
|
||||
(x$genus == "Hafnia" & x$species == "alvei") |
|
||||
(x$genus == "Klebsiella") |
|
||||
(x$genus == "Morganella" & x$species == "morganii") |
|
||||
(x$genus == "Proteus" & x$species == "penneri") |
|
||||
(x$genus == "Proteus" & x$species == "vulgaris") |
|
||||
(x$genus == "Providencia" & x$species == "rettgeri") |
|
||||
(x$genus == "Providencia" & x$species == "stuartii") |
|
||||
(x$genus == "Serratia" & x$species == "marcescens")), ab_NA(AMP)] <- NA
|
||||
x[which((x$genus == "Citrobacter" & x$species == "freundii") |
|
||||
(x$genus == "Enterobacter" & x$species == "aerogenes") |
|
||||
(x$genus == "Klebsiella" & x$species == "aerogenes") # new name (2017)
|
||||
| (x$genus == "Enterobacter" & x$species == "cloacae") |
|
||||
(x$genus == "Hafnia" & x$species == "alvei") |
|
||||
(x$genus == "Morganella" & x$species == "morganii") |
|
||||
(x$genus == "Providencia" & x$species == "rettgeri") |
|
||||
(x$genus == "Providencia" & x$species == "stuartii") |
|
||||
(x$genus == "Serratia" & x$species == "marcescens")), ab_NA(AMC)] <- NA
|
||||
(x$genus == "Enterobacter" & x$species == "aerogenes") |
|
||||
(x$genus == "Klebsiella" & x$species == "aerogenes") # new name (2017)
|
||||
| (x$genus == "Enterobacter" & x$species == "cloacae") |
|
||||
(x$genus == "Hafnia" & x$species == "alvei") |
|
||||
(x$genus == "Morganella" & x$species == "morganii") |
|
||||
(x$genus == "Providencia" & x$species == "rettgeri") |
|
||||
(x$genus == "Providencia" & x$species == "stuartii") |
|
||||
(x$genus == "Serratia" & x$species == "marcescens")), ab_NA(AMC)] <- NA
|
||||
x[which((x$genus == "Citrobacter" & x$species == "freundii") |
|
||||
(x$genus == "Citrobacter" & x$species == "koseri") |
|
||||
(x$genus == "Enterobacter" & x$species == "aerogenes") |
|
||||
(x$genus == "Klebsiella" & x$species == "aerogenes") # new name (2017)
|
||||
| (x$genus == "Enterobacter" & x$species == "cloacae") |
|
||||
(x$genus == "Hafnia" & x$species == "alvei") |
|
||||
(x$genus == "Providencia" & x$species == "rettgeri") |
|
||||
(x$genus == "Serratia" & x$species == "marcescens")), ab_NA(SAM)] <- NA
|
||||
(x$genus == "Citrobacter" & x$species == "koseri") |
|
||||
(x$genus == "Enterobacter" & x$species == "aerogenes") |
|
||||
(x$genus == "Klebsiella" & x$species == "aerogenes") # new name (2017)
|
||||
| (x$genus == "Enterobacter" & x$species == "cloacae") |
|
||||
(x$genus == "Hafnia" & x$species == "alvei") |
|
||||
(x$genus == "Providencia" & x$species == "rettgeri") |
|
||||
(x$genus == "Serratia" & x$species == "marcescens")), ab_NA(SAM)] <- NA
|
||||
x[which((x$genus == "Morganella" & x$species == "morganii") |
|
||||
(x$genus == "Proteus" & x$species == "mirabilis") |
|
||||
(x$genus == "Proteus" & x$species == "penneri") |
|
||||
(x$genus == "Proteus" & x$species == "vulgaris") |
|
||||
(x$genus == "Providencia" & x$species == "rettgeri") |
|
||||
(x$genus == "Providencia" & x$species == "stuartii") |
|
||||
(x$genus == "Serratia" & x$species == "marcescens")), ab_NA(COL)] <- NA
|
||||
(x$genus == "Proteus" & x$species == "mirabilis") |
|
||||
(x$genus == "Proteus" & x$species == "penneri") |
|
||||
(x$genus == "Proteus" & x$species == "vulgaris") |
|
||||
(x$genus == "Providencia" & x$species == "rettgeri") |
|
||||
(x$genus == "Providencia" & x$species == "stuartii") |
|
||||
(x$genus == "Serratia" & x$species == "marcescens")), ab_NA(COL)] <- NA
|
||||
x[which((x$genus == "Morganella" & x$species == "morganii") |
|
||||
(x$genus == "Proteus" & x$species == "mirabilis") |
|
||||
(x$genus == "Proteus" & x$species == "penneri") |
|
||||
(x$genus == "Proteus" & x$species == "vulgaris") |
|
||||
(x$genus == "Providencia" & x$species == "rettgeri") |
|
||||
(x$genus == "Providencia" & x$species == "stuartii")), ab_NA(TCY)] <- NA
|
||||
(x$genus == "Proteus" & x$species == "mirabilis") |
|
||||
(x$genus == "Proteus" & x$species == "penneri") |
|
||||
(x$genus == "Proteus" & x$species == "vulgaris") |
|
||||
(x$genus == "Providencia" & x$species == "rettgeri") |
|
||||
(x$genus == "Providencia" & x$species == "stuartii")), ab_NA(TCY)] <- NA
|
||||
x[which((x$genus == "Morganella" & x$species == "morganii") |
|
||||
(x$genus == "Proteus" & x$species == "penneri") |
|
||||
(x$genus == "Proteus" & x$species == "vulgaris") |
|
||||
(x$genus == "Providencia" & x$species == "rettgeri") |
|
||||
(x$genus == "Providencia" & x$species == "stuartii")), ab_NA(c(DOX, MNO))] <- NA
|
||||
|
||||
(x$genus == "Proteus" & x$species == "penneri") |
|
||||
(x$genus == "Proteus" & x$species == "vulgaris") |
|
||||
(x$genus == "Providencia" & x$species == "rettgeri") |
|
||||
(x$genus == "Providencia" & x$species == "stuartii")), ab_NA(c(DOX, MNO))] <- NA
|
||||
|
||||
x$classes_in_guideline <- NA_integer_
|
||||
x$classes_available <- NA_integer_
|
||||
x$classes_affected <- NA_integer_
|
||||
|
||||
|
||||
# now add the MDR levels to the data
|
||||
trans_tbl(
|
||||
2,
|
||||
@ -990,7 +994,7 @@ mdro <- function(x = NULL,
|
||||
c(TCY, DOX, MNO)
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
# now set MDROs:
|
||||
# MDR (=2): >=3 classes affected
|
||||
x[which(x$classes_affected >= 3), "MDRO"] <- 2
|
||||
@ -1002,7 +1006,7 @@ mdro <- function(x = NULL,
|
||||
" out of ", x$classes_available[which(x$classes_affected >= 3)], " available classes"
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
# XDR (=3): all but <=2 classes affected
|
||||
x[which((x$classes_in_guideline - x$classes_affected) <= 2), "MDRO"] <- 3
|
||||
if (isTRUE(verbose)) {
|
||||
@ -1011,7 +1015,7 @@ mdro <- function(x = NULL,
|
||||
" out of ", x$classes_in_guideline[which(x$MDRO == 3)], " classes)"
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
# PDR (=4): all drugs are R
|
||||
x[which(x$classes_affected == 999 & x$classes_in_guideline == x$classes_available), "MDRO"] <- 4
|
||||
if (isTRUE(verbose)) {
|
||||
@ -1022,7 +1026,7 @@ mdro <- function(x = NULL,
|
||||
ifelse(!isTRUE(combine_SI), " or I", "")
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
# not enough classes available
|
||||
x[which(x$MDRO %in% c(1, 3) & x$classes_available < floor(x$classes_in_guideline * pct_required_classes)), "MDRO"] <- -1
|
||||
if (isTRUE(verbose)) {
|
||||
@ -1032,18 +1036,18 @@ mdro <- function(x = NULL,
|
||||
" (~", percentage(pct_required_classes), " of ", x$classes_in_guideline[which(x$MDRO == -1)], ")"
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
# add antibiotic names of resistant ones to verbose output
|
||||
}
|
||||
|
||||
|
||||
if (guideline$code == "eucast3.1") {
|
||||
# EUCAST 3.1 --------------------------------------------------------------
|
||||
# Table 5
|
||||
trans_tbl(
|
||||
3,
|
||||
which(x$order == "Enterobacterales" |
|
||||
(x$genus == "Pseudomonas" & x$species == "aeruginosa") |
|
||||
x$genus == "Acinetobacter"),
|
||||
(x$genus == "Pseudomonas" & x$species == "aeruginosa") |
|
||||
x$genus == "Acinetobacter"),
|
||||
COL,
|
||||
"all"
|
||||
)
|
||||
@ -1128,17 +1132,17 @@ mdro <- function(x = NULL,
|
||||
"any"
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
if (guideline$code == "eucast3.2") {
|
||||
# EUCAST 3.2 --------------------------------------------------------------
|
||||
# Table 6
|
||||
trans_tbl(
|
||||
3,
|
||||
which((x$order == "Enterobacterales" &
|
||||
!x$family == "Morganellaceae" &
|
||||
!(x$genus == "Serratia" & x$species == "marcescens")) |
|
||||
(x$genus == "Pseudomonas" & x$species == "aeruginosa") |
|
||||
x$genus == "Acinetobacter"),
|
||||
!x$family == "Morganellaceae" &
|
||||
!(x$genus == "Serratia" & x$species == "marcescens")) |
|
||||
(x$genus == "Pseudomonas" & x$species == "aeruginosa") |
|
||||
x$genus == "Acinetobacter"),
|
||||
COL,
|
||||
"all"
|
||||
)
|
||||
@ -1229,7 +1233,7 @@ mdro <- function(x = NULL,
|
||||
"any"
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
if (guideline$code == "eucast3.3") {
|
||||
# EUCAST 3.3 --------------------------------------------------------------
|
||||
# note: this guideline is equal to EUCAST 3.2 - no MDRO insights changed
|
||||
@ -1237,10 +1241,10 @@ mdro <- function(x = NULL,
|
||||
trans_tbl(
|
||||
3,
|
||||
which((x$order == "Enterobacterales" &
|
||||
!x$family == "Morganellaceae" &
|
||||
!(x$genus == "Serratia" & x$species == "marcescens")) |
|
||||
(x$genus == "Pseudomonas" & x$species == "aeruginosa") |
|
||||
x$genus == "Acinetobacter"),
|
||||
!x$family == "Morganellaceae" &
|
||||
!(x$genus == "Serratia" & x$species == "marcescens")) |
|
||||
(x$genus == "Pseudomonas" & x$species == "aeruginosa") |
|
||||
x$genus == "Acinetobacter"),
|
||||
COL,
|
||||
"all"
|
||||
)
|
||||
@ -1331,72 +1335,72 @@ mdro <- function(x = NULL,
|
||||
"any"
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
if (guideline$code == "mrgn") {
|
||||
# Germany -----------------------------------------------------------------
|
||||
|
||||
|
||||
# Table 1
|
||||
trans_tbl(
|
||||
2, # 3MRGN
|
||||
which((x$order == "Enterobacterales" | # following in fact the old Enterobacteriaceae classification
|
||||
(x$genus == "Acinetobacter" & x$species == "baumannii")) &
|
||||
try_ab(x[, PIP, drop = TRUE] == "R") &
|
||||
(try_ab(x[, CTX, drop = TRUE] == "R") | try_ab(x[, CAZ, drop = TRUE] == "R")) &
|
||||
(try_ab(x[, IPM, drop = TRUE] != "R") | try_ab(x[, MEM, drop = TRUE] != "R")) &
|
||||
try_ab(x[, CIP, drop = TRUE] == "R")),
|
||||
(x$genus == "Acinetobacter" & x$species == "baumannii")) &
|
||||
try_ab(x[, PIP, drop = TRUE] == "R") &
|
||||
(try_ab(x[, CTX, drop = TRUE] == "R") | try_ab(x[, CAZ, drop = TRUE] == "R")) &
|
||||
(try_ab(x[, IPM, drop = TRUE] != "R") | try_ab(x[, MEM, drop = TRUE] != "R")) &
|
||||
try_ab(x[, CIP, drop = TRUE] == "R")),
|
||||
c(PIP, CTX, CAZ, IPM, MEM, CIP),
|
||||
"any"
|
||||
)
|
||||
|
||||
|
||||
trans_tbl(
|
||||
3, # 4MRGN, overwrites 3MRGN if applicable
|
||||
which((x$order == "Enterobacterales" | # following in fact the old Enterobacteriaceae classification
|
||||
(x$genus == "Acinetobacter" & x$species == "baumannii")) &
|
||||
try_ab(x[, PIP, drop = TRUE] == "R") &
|
||||
(try_ab(x[, CTX, drop = TRUE] == "R") | try_ab(x[, CAZ, drop = TRUE] == "R")) &
|
||||
(try_ab(x[, IPM, drop = TRUE] == "R") | try_ab(x[, MEM, drop = TRUE] == "R")) &
|
||||
try_ab(x[, CIP, drop = TRUE] == "R")),
|
||||
(x$genus == "Acinetobacter" & x$species == "baumannii")) &
|
||||
try_ab(x[, PIP, drop = TRUE] == "R") &
|
||||
(try_ab(x[, CTX, drop = TRUE] == "R") | try_ab(x[, CAZ, drop = TRUE] == "R")) &
|
||||
(try_ab(x[, IPM, drop = TRUE] == "R") | try_ab(x[, MEM, drop = TRUE] == "R")) &
|
||||
try_ab(x[, CIP, drop = TRUE] == "R")),
|
||||
c(PIP, CTX, CAZ, IPM, MEM, CIP),
|
||||
"any"
|
||||
)
|
||||
|
||||
|
||||
trans_tbl(
|
||||
3, # 4MRGN, overwrites 3MRGN if applicable
|
||||
which((x$order == "Enterobacterales" | # following in fact the old Enterobacteriaceae classification
|
||||
(x$genus == "Acinetobacter" & x$species == "baumannii")) &
|
||||
(try_ab(x[, IPM, drop = TRUE] == "R") | try_ab(x[, MEM, drop = TRUE] == "R"))),
|
||||
(x$genus == "Acinetobacter" & x$species == "baumannii")) &
|
||||
(try_ab(x[, IPM, drop = TRUE] == "R") | try_ab(x[, MEM, drop = TRUE] == "R"))),
|
||||
c(IPM, MEM),
|
||||
"any"
|
||||
)
|
||||
|
||||
|
||||
trans_tbl(
|
||||
2, # 3MRGN, if only 1 group is S
|
||||
which(x$genus == "Pseudomonas" & x$species == "aeruginosa" &
|
||||
try_ab(x[, PIP, drop = TRUE] == "S") +
|
||||
try_ab(x[, CTX, drop = TRUE] == "S") +
|
||||
try_ab(x[, CAZ, drop = TRUE] == "S") +
|
||||
try_ab(x[, IPM, drop = TRUE] == "S") +
|
||||
try_ab(x[, MEM, drop = TRUE] == "S") +
|
||||
try_ab(x[, CIP, drop = TRUE] == "S") == 1),
|
||||
try_ab(x[, PIP, drop = TRUE] == "S") +
|
||||
try_ab(x[, CTX, drop = TRUE] == "S") +
|
||||
try_ab(x[, CAZ, drop = TRUE] == "S") +
|
||||
try_ab(x[, IPM, drop = TRUE] == "S") +
|
||||
try_ab(x[, MEM, drop = TRUE] == "S") +
|
||||
try_ab(x[, CIP, drop = TRUE] == "S") == 1),
|
||||
c(PIP, CTX, CAZ, IPM, MEM, CIP),
|
||||
"any"
|
||||
)
|
||||
|
||||
|
||||
trans_tbl(
|
||||
3, # 4MRGN otherwise
|
||||
which((x$genus == "Pseudomonas" & x$species == "aeruginosa") &
|
||||
try_ab(x[, PIP, drop = TRUE] == "R") &
|
||||
(try_ab(x[, CTX, drop = TRUE] == "R") | try_ab(x[, CAZ, drop = TRUE] == "R")) &
|
||||
(try_ab(x[, IPM, drop = TRUE] == "R") | try_ab(x[, MEM, drop = TRUE] == "R")) &
|
||||
try_ab(x[, CIP, drop = TRUE] == "R")),
|
||||
try_ab(x[, PIP, drop = TRUE] == "R") &
|
||||
(try_ab(x[, CTX, drop = TRUE] == "R") | try_ab(x[, CAZ, drop = TRUE] == "R")) &
|
||||
(try_ab(x[, IPM, drop = TRUE] == "R") | try_ab(x[, MEM, drop = TRUE] == "R")) &
|
||||
try_ab(x[, CIP, drop = TRUE] == "R")),
|
||||
c(PIP, CTX, CAZ, IPM, MEM, CIP),
|
||||
"any"
|
||||
)
|
||||
|
||||
|
||||
x[which(x$MDRO == 2), "reason"] <- "3MRGN"
|
||||
x[which(x$MDRO == 3), "reason"] <- "4MRGN"
|
||||
}
|
||||
|
||||
|
||||
if (guideline$code == "brmo") {
|
||||
# Netherlands -------------------------------------------------------------
|
||||
aminoglycosides <- aminoglycosides[!is.na(aminoglycosides)]
|
||||
@ -1409,7 +1413,7 @@ mdro <- function(x = NULL,
|
||||
if (length(ESBLs) != 2) {
|
||||
ESBLs <- character(0)
|
||||
}
|
||||
|
||||
|
||||
# Table 1
|
||||
trans_tbl(
|
||||
3,
|
||||
@ -1417,21 +1421,21 @@ mdro <- function(x = NULL,
|
||||
c(aminoglycosides, fluoroquinolones),
|
||||
"all"
|
||||
)
|
||||
|
||||
|
||||
trans_tbl(
|
||||
2,
|
||||
which(x$order == "Enterobacterales"), # following in fact the old Enterobacteriaceae classification
|
||||
carbapenems,
|
||||
"any"
|
||||
)
|
||||
|
||||
|
||||
trans_tbl(
|
||||
2,
|
||||
which(x$order == "Enterobacterales"), # following in fact the old Enterobacteriaceae classification
|
||||
ESBLs,
|
||||
"all"
|
||||
)
|
||||
|
||||
|
||||
# Table 2
|
||||
trans_tbl(
|
||||
2,
|
||||
@ -1445,19 +1449,19 @@ mdro <- function(x = NULL,
|
||||
c(aminoglycosides, fluoroquinolones),
|
||||
"all"
|
||||
)
|
||||
|
||||
|
||||
trans_tbl(
|
||||
3,
|
||||
which(x$genus == "Stenotrophomonas" & x$species == "maltophilia"),
|
||||
SXT,
|
||||
"all"
|
||||
)
|
||||
|
||||
|
||||
if (!ab_missing(MEM) && !ab_missing(IPM) &&
|
||||
!ab_missing(GEN) && !ab_missing(TOB) &&
|
||||
!ab_missing(CIP) &&
|
||||
!ab_missing(CAZ) &&
|
||||
!ab_missing(TZP)) {
|
||||
!ab_missing(GEN) && !ab_missing(TOB) &&
|
||||
!ab_missing(CIP) &&
|
||||
!ab_missing(CAZ) &&
|
||||
!ab_missing(TZP)) {
|
||||
x$psae <- 0
|
||||
x[which(x[, MEM, drop = TRUE] == "R" | x[, IPM, drop = TRUE] == "R"), "psae"] <- 1 + x[which(x[, MEM, drop = TRUE] == "R" | x[, IPM, drop = TRUE] == "R"), "psae"]
|
||||
x[which(x[, GEN, drop = TRUE] == "R" & x[, TOB, drop = TRUE] == "R"), "psae"] <- 1 + x[which(x[, GEN, drop = TRUE] == "R" & x[, TOB, drop = TRUE] == "R"), "psae"]
|
||||
@ -1477,7 +1481,7 @@ mdro <- function(x = NULL,
|
||||
x$genus == "Pseudomonas" & x$species == "aeruginosa" &
|
||||
x$psae >= 3
|
||||
), "reason"] <- paste0("at least 3 classes contain R", ifelse(!isTRUE(combine_SI), " or I", ""))
|
||||
|
||||
|
||||
# Table 3
|
||||
trans_tbl(
|
||||
3,
|
||||
@ -1498,7 +1502,7 @@ mdro <- function(x = NULL,
|
||||
"all"
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
if (guideline$code == "tb") {
|
||||
# Tuberculosis ------------------------------------------------------------
|
||||
prepare_drug <- function(ab) {
|
||||
@ -1535,7 +1539,7 @@ mdro <- function(x = NULL,
|
||||
ab != "R"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
x$mono_count <- 0
|
||||
x[drug_is_R(INH), "mono_count"] <- x[drug_is_R(INH), "mono_count", drop = TRUE] + 1
|
||||
x[drug_is_R(RIF), "mono_count"] <- x[drug_is_R(RIF), "mono_count", drop = TRUE] + 1
|
||||
@ -1543,7 +1547,7 @@ mdro <- function(x = NULL,
|
||||
x[drug_is_R(PZA), "mono_count"] <- x[drug_is_R(PZA), "mono_count", drop = TRUE] + 1
|
||||
x[drug_is_R(RIB), "mono_count"] <- x[drug_is_R(RIB), "mono_count", drop = TRUE] + 1
|
||||
x[drug_is_R(RFP), "mono_count"] <- x[drug_is_R(RFP), "mono_count", drop = TRUE] + 1
|
||||
|
||||
|
||||
x$mono <- x$mono_count > 0
|
||||
x$poly <- x$mono_count > 1 & drug_is_not_R(RIF) & drug_is_not_R(INH)
|
||||
x$mdr <- drug_is_R(RIF) & drug_is_R(INH)
|
||||
@ -1551,19 +1555,19 @@ mdro <- function(x = NULL,
|
||||
x$second <- drug_is_R(CAP) | drug_is_R(KAN) | drug_is_R(AMK)
|
||||
x$xdr <- x$mdr & x$xdr & x$second
|
||||
x$MDRO <- ifelse(x$xdr, 5,
|
||||
ifelse(x$mdr, 4,
|
||||
ifelse(x$poly, 3,
|
||||
ifelse(x$mono, 2,
|
||||
1
|
||||
)
|
||||
)
|
||||
)
|
||||
ifelse(x$mdr, 4,
|
||||
ifelse(x$poly, 3,
|
||||
ifelse(x$mono, 2,
|
||||
1
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
# keep all real TB, make other species NA
|
||||
x$MDRO <- ifelse(x$fullname == "Mycobacterium tuberculosis", x$MDRO, NA_real_)
|
||||
x$reason <- "PDR/MDR/XDR criteria were met"
|
||||
}
|
||||
|
||||
|
||||
# some more info on negative results
|
||||
if (isTRUE(verbose)) {
|
||||
if (guideline$code == "cmi2012") {
|
||||
@ -1579,7 +1583,7 @@ mdro <- function(x = NULL,
|
||||
x[which(x$MDRO == 1), "reason"] <- "too few antibiotics are R"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (isTRUE(info.bak)) {
|
||||
cat(group_msg)
|
||||
if (sum(!is.na(x$MDRO)) == 0) {
|
||||
@ -1591,11 +1595,11 @@ mdro <- function(x = NULL,
|
||||
)))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# Fill in blanks ----
|
||||
# for rows that have no results
|
||||
x_transposed <- as.list(as.data.frame(t(x[, cols_ab, drop = FALSE]),
|
||||
stringsAsFactors = FALSE
|
||||
stringsAsFactors = FALSE
|
||||
))
|
||||
rows_empty <- which(vapply(
|
||||
FUN.VALUE = logical(1),
|
||||
@ -1609,7 +1613,7 @@ mdro <- function(x = NULL,
|
||||
} else {
|
||||
cat("\n")
|
||||
}
|
||||
|
||||
|
||||
# Results ----
|
||||
if (guideline$code == "cmi2012") {
|
||||
if (any(x$MDRO == -1, na.rm = TRUE)) {
|
||||
@ -1656,7 +1660,7 @@ mdro <- function(x = NULL,
|
||||
ordered = TRUE
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
if (isTRUE(verbose)) {
|
||||
colnames(x)[colnames(x) == col_mo] <- "microorganism"
|
||||
x$microorganism <- mo_name(x$microorganism, language = NULL)
|
||||
@ -1678,9 +1682,9 @@ mdro <- function(x = NULL,
|
||||
#' @export
|
||||
custom_mdro_guideline <- function(..., as_factor = TRUE) {
|
||||
meet_criteria(as_factor, allow_class = "logical", has_length = 1)
|
||||
|
||||
|
||||
dots <- tryCatch(list(...),
|
||||
error = function(e) "error"
|
||||
error = function(e) "error"
|
||||
)
|
||||
stop_if(
|
||||
identical(dots, "error"),
|
||||
@ -1694,7 +1698,7 @@ custom_mdro_guideline <- function(..., as_factor = TRUE) {
|
||||
inherits(dots[[i]], "formula"),
|
||||
"rule ", i, " must be a valid formula input (e.g., using '~'), see `?mdro`"
|
||||
)
|
||||
|
||||
|
||||
# Query
|
||||
qry <- dots[[i]][[2]]
|
||||
if (inherits(qry, "call")) {
|
||||
@ -1710,14 +1714,14 @@ custom_mdro_guideline <- function(..., as_factor = TRUE) {
|
||||
qry <- gsub(" *([&|+-/*^><==]+) *", " \\1 ", qry)
|
||||
qry <- gsub("'", "\"", qry, fixed = TRUE)
|
||||
out[[i]]$query <- as.expression(qry)
|
||||
|
||||
|
||||
# Value
|
||||
val <- tryCatch(eval(dots[[i]][[3]]), error = function(e) NULL)
|
||||
stop_if(is.null(val), "rule ", i, " must return a valid value, it now returns an error: ", tryCatch(eval(dots[[i]][[3]]), error = function(e) e$message))
|
||||
stop_if(length(val) > 1, "rule ", i, " must return a value of length 1, not ", length(val))
|
||||
out[[i]]$value <- as.character(val)
|
||||
}
|
||||
|
||||
|
||||
names(out) <- paste0("rule", seq_len(n_dots))
|
||||
out <- set_clean_class(out, new_class = c("custom_mdro_guideline", "list"))
|
||||
attr(out, "values") <- unname(c("Negative", vapply(FUN.VALUE = character(1), unclass(out), function(x) x$value)))
|
||||
@ -1739,8 +1743,8 @@ c.custom_mdro_guideline <- function(x, ..., as_factor = NULL) {
|
||||
}
|
||||
for (g in list(...)) {
|
||||
stop_ifnot(inherits(g, "custom_mdro_guideline"),
|
||||
"for combining custom MDRO guidelines, all rules must be created with `custom_mdro_guideline()`",
|
||||
call = FALSE
|
||||
"for combining custom MDRO guidelines, all rules must be created with `custom_mdro_guideline()`",
|
||||
call = FALSE
|
||||
)
|
||||
vals <- attributes(x)$values
|
||||
if (!all(attributes(g)$values %in% vals)) {
|
||||
@ -1790,28 +1794,28 @@ run_custom_mdro_guideline <- function(df, guideline, info) {
|
||||
reasons <- character(length = NROW(df))
|
||||
for (i in seq_len(n_dots)) {
|
||||
qry <- tryCatch(eval(parse(text = guideline[[i]]$query), envir = df, enclos = parent.frame()),
|
||||
error = function(e) {
|
||||
AMR_env$err_msg <- e$message
|
||||
return("error")
|
||||
}
|
||||
error = function(e) {
|
||||
AMR_env$err_msg <- e$message
|
||||
return("error")
|
||||
}
|
||||
)
|
||||
if (identical(qry, "error")) {
|
||||
warning_("in `custom_mdro_guideline()`: rule ", i,
|
||||
" (`", as.character(guideline[[i]]$query), "`) was ignored because of this error message: ",
|
||||
AMR_env$err_msg,
|
||||
call = FALSE,
|
||||
add_fn = font_red
|
||||
" (`", as.character(guideline[[i]]$query), "`) was ignored because of this error message: ",
|
||||
AMR_env$err_msg,
|
||||
call = FALSE,
|
||||
add_fn = font_red
|
||||
)
|
||||
next
|
||||
}
|
||||
stop_ifnot(is.logical(qry), "in custom_mdro_guideline(): rule ", i, " (`", guideline[[i]]$query,
|
||||
"`) must return `TRUE` or `FALSE`, not ",
|
||||
format_class(class(qry), plural = FALSE),
|
||||
call = FALSE
|
||||
"`) must return `TRUE` or `FALSE`, not ",
|
||||
format_class(class(qry), plural = FALSE),
|
||||
call = FALSE
|
||||
)
|
||||
|
||||
|
||||
new_mdros <- which(qry == TRUE & out == "")
|
||||
|
||||
|
||||
if (isTRUE(info)) {
|
||||
cat(word_wrap(
|
||||
"- Custom MDRO rule ", i, ": `", as.character(guideline[[i]]$query),
|
||||
@ -1827,11 +1831,11 @@ run_custom_mdro_guideline <- function(df, guideline, info) {
|
||||
}
|
||||
out[out == ""] <- "Negative"
|
||||
reasons[out == "Negative"] <- "no rules matched"
|
||||
|
||||
|
||||
if (isTRUE(attributes(guideline)$as_factor)) {
|
||||
out <- factor(out, levels = attributes(guideline)$values, ordered = TRUE)
|
||||
}
|
||||
|
||||
|
||||
columns_nonsusceptible <- as.data.frame(t(df[, is.sir(df), drop = FALSE] == "R"))
|
||||
columns_nonsusceptible <- vapply(
|
||||
FUN.VALUE = character(1),
|
||||
@ -1839,7 +1843,7 @@ run_custom_mdro_guideline <- function(df, guideline, info) {
|
||||
function(x) paste0(rownames(columns_nonsusceptible)[which(x)], collapse = " ")
|
||||
)
|
||||
columns_nonsusceptible[is.na(out)] <- NA_character_
|
||||
|
||||
|
||||
data.frame(
|
||||
row_number = seq_len(NROW(df)),
|
||||
MDRO = out,
|
||||
|
Reference in New Issue
Block a user