mirror of
https://github.com/msberends/AMR.git
synced 2025-09-04 22:49:42 +02:00
Compare commits
2 Commits
0138e33ce9
...
d94bdd2c6a
Author | SHA1 | Date | |
---|---|---|---|
d94bdd2c6a | |||
8dab0a3730 |
@@ -1,6 +1,6 @@
|
|||||||
Package: AMR
|
Package: AMR
|
||||||
Version: 3.0.0.9004
|
Version: 3.0.0.9008
|
||||||
Date: 2025-06-13
|
Date: 2025-07-17
|
||||||
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
|
||||||
|
11
NEWS.md
11
NEWS.md
@@ -1,15 +1,20 @@
|
|||||||
# AMR 3.0.0.9004
|
# AMR 3.0.0.9008
|
||||||
|
|
||||||
|
This is primarily a bugfix release, though we added one nice feature too.
|
||||||
|
|
||||||
### New
|
### New
|
||||||
* Integration with the **tidymodels** framework to allow seamless use of MIC and SIR data in modelling pipelines via `recipes`
|
* Integration with the **tidymodels** framework to allow seamless use of MIC and SIR data in modelling pipelines via `recipes`
|
||||||
- `step_mic_log2()` to transform `<mic>` columns with log2, and `step_sir_numeric()` to convert `<sir>` columns to numeric
|
- `step_mic_log2()` to transform `<mic>` columns with log2, and `step_sir_numeric()` to convert `<sir>` columns to numeric
|
||||||
- `tidyselect` helpers: `all_mic()`, `all_mic_predictors()`, `all_sir()`, `all_sir_predictors()`
|
- New `tidyselect` helpers: `all_mic()`, `all_mic_predictors()`, `all_sir()`, `all_sir_predictors()`
|
||||||
- Enables seamless use of MIC and SIR data in modelling pipelines via `recipes`
|
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
* Fixed a bug in `antibiogram()` for when no antimicrobials are set
|
* 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 `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 `eucast_rules()` for using specific custom rules
|
||||||
|
* Fixed a bug in `as.sir()` to allow any tidyselect language (#220)
|
||||||
|
* Fixed a bug in `ggplot_sir()` when using `combine_SI = FALSE` (#213)
|
||||||
|
* Fixed all plotting to contain a separate colour for SDD (susceptible dose-dependent)
|
||||||
* Fixed some specific Dutch translations for antimicrobials
|
* Fixed some specific Dutch translations for antimicrobials
|
||||||
* Updated `random_mic()` and `random_disk()` to set skewedness of the distribution and allow multiple microorganisms
|
* Updated `random_mic()` and `random_disk()` to set skewedness of the distribution and allow multiple microorganisms
|
||||||
|
|
||||||
|
@@ -63,31 +63,6 @@ pm_left_join <- function(x, y, by = NULL, suffix = c(".x", ".y")) {
|
|||||||
merged
|
merged
|
||||||
}
|
}
|
||||||
|
|
||||||
# support where() like tidyverse (this function will also be used when running `antibiogram()`):
|
|
||||||
where <- function(fn) {
|
|
||||||
# based on https://github.com/nathaneastwood/poorman/blob/52eb6947e0b4430cd588976ed8820013eddf955f/R/where.R#L17-L32
|
|
||||||
if (!is.function(fn)) {
|
|
||||||
stop_("`", deparse(substitute(fn)), "()` is not a valid predicate function.")
|
|
||||||
}
|
|
||||||
df <- pm_select_env$.data
|
|
||||||
cols <- pm_select_env$get_colnames()
|
|
||||||
if (is.null(df)) {
|
|
||||||
df <- get_current_data("where", call = FALSE)
|
|
||||||
cols <- colnames(df)
|
|
||||||
}
|
|
||||||
preds <- unlist(lapply(
|
|
||||||
df,
|
|
||||||
function(x, fn) {
|
|
||||||
do.call("fn", list(x))
|
|
||||||
},
|
|
||||||
fn
|
|
||||||
))
|
|
||||||
if (!is.logical(preds)) stop_("`where()` must be used with functions that return `TRUE` or `FALSE`.")
|
|
||||||
data_cols <- cols
|
|
||||||
cols <- data_cols[preds]
|
|
||||||
which(data_cols %in% cols)
|
|
||||||
}
|
|
||||||
|
|
||||||
# copied and slightly rewritten from {poorman} under permissive license (2021-10-15)
|
# copied and slightly rewritten from {poorman} under permissive license (2021-10-15)
|
||||||
# https://github.com/nathaneastwood/poorman, MIT licensed, Nathan Eastwood, 2020
|
# https://github.com/nathaneastwood/poorman, MIT licensed, Nathan Eastwood, 2020
|
||||||
case_when_AMR <- function(...) {
|
case_when_AMR <- function(...) {
|
||||||
@@ -814,7 +789,7 @@ meet_criteria <- function(object, # can be literally `list(...)` for `allow_argu
|
|||||||
|
|
||||||
# if object is missing, or another error:
|
# if object is missing, or another error:
|
||||||
tryCatch(invisible(object),
|
tryCatch(invisible(object),
|
||||||
error = function(e) AMR_env$meet_criteria_error_txt <- e$message
|
error = function(e) AMR_env$meet_criteria_error_txt <- conditionMessage(e)
|
||||||
)
|
)
|
||||||
if (!is.null(AMR_env$meet_criteria_error_txt)) {
|
if (!is.null(AMR_env$meet_criteria_error_txt)) {
|
||||||
error_txt <- AMR_env$meet_criteria_error_txt
|
error_txt <- AMR_env$meet_criteria_error_txt
|
||||||
@@ -1319,6 +1294,10 @@ font_green_bg <- function(..., collapse = " ") {
|
|||||||
# this is #3caea3 (picked to be colourblind-safe with other SIR colours)
|
# this is #3caea3 (picked to be colourblind-safe with other SIR colours)
|
||||||
try_colour(font_black(..., collapse = collapse, adapt = FALSE), before = "\033[48;5;79m", after = "\033[49m", collapse = collapse)
|
try_colour(font_black(..., collapse = collapse, adapt = FALSE), before = "\033[48;5;79m", after = "\033[49m", collapse = collapse)
|
||||||
}
|
}
|
||||||
|
font_green_lighter_bg <- function(..., collapse = " ") {
|
||||||
|
# this is #8FD6C4 (picked to be colourblind-safe with other SIR colours)
|
||||||
|
try_colour(font_black(..., collapse = collapse, adapt = FALSE), before = "\033[48;5;158m", after = "\033[49m", collapse = collapse)
|
||||||
|
}
|
||||||
font_purple_bg <- function(..., collapse = " ") {
|
font_purple_bg <- function(..., collapse = " ") {
|
||||||
try_colour(font_black(..., collapse = collapse, adapt = FALSE), before = "\033[48;5;89m", after = "\033[49m", collapse = collapse)
|
try_colour(font_black(..., collapse = collapse, adapt = FALSE), before = "\033[48;5;89m", after = "\033[49m", collapse = collapse)
|
||||||
}
|
}
|
||||||
@@ -1636,6 +1615,36 @@ get_n_cores <- function(max_cores = Inf) {
|
|||||||
n_cores
|
n_cores
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Support `where()` if tidyselect not installed ----
|
||||||
|
if (!is.null(import_fn("where", "tidyselect", error_on_fail = FALSE))) {
|
||||||
|
# tidyselect::where() exists, load the namespace to make `where()`s work across the package in default arguments
|
||||||
|
loadNamespace("tidyselect")
|
||||||
|
} else {
|
||||||
|
where <- function(fn) {
|
||||||
|
# based on https://github.com/nathaneastwood/poorman/blob/52eb6947e0b4430cd588976ed8820013eddf955f/R/where.R#L17-L32
|
||||||
|
if (!is.function(fn)) {
|
||||||
|
stop_("`", deparse(substitute(fn)), "()` is not a valid predicate function.")
|
||||||
|
}
|
||||||
|
df <- pm_select_env$.data
|
||||||
|
cols <- pm_select_env$get_colnames()
|
||||||
|
if (is.null(df)) {
|
||||||
|
df <- get_current_data("where", call = FALSE)
|
||||||
|
cols <- colnames(df)
|
||||||
|
}
|
||||||
|
preds <- unlist(lapply(
|
||||||
|
df,
|
||||||
|
function(x, fn) {
|
||||||
|
do.call("fn", list(x))
|
||||||
|
},
|
||||||
|
fn
|
||||||
|
))
|
||||||
|
if (!is.logical(preds)) stop_("`where()` must be used with functions that return `TRUE` or `FALSE`.")
|
||||||
|
data_cols <- cols
|
||||||
|
cols <- data_cols[preds]
|
||||||
|
which(data_cols %in% cols)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
# Faster data.table implementations ----
|
# Faster data.table implementations ----
|
||||||
|
|
||||||
match <- function(x, table, ...) {
|
match <- function(x, table, ...) {
|
||||||
@@ -1655,52 +1664,6 @@ match <- function(x, table, ...) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# nolint start
|
|
||||||
|
|
||||||
# Register S3 methods ----
|
|
||||||
# copied from vctrs::s3_register by their permission:
|
|
||||||
# https://github.com/r-lib/vctrs/blob/05968ce8e669f73213e3e894b5f4424af4f46316/R/register-s3.R
|
|
||||||
s3_register <- function(generic, class, method = NULL) {
|
|
||||||
stopifnot(is.character(generic), length(generic) == 1)
|
|
||||||
stopifnot(is.character(class), length(class) == 1)
|
|
||||||
pieces <- strsplit(generic, "::")[[1]]
|
|
||||||
stopifnot(length(pieces) == 2)
|
|
||||||
package <- pieces[[1]]
|
|
||||||
generic <- pieces[[2]]
|
|
||||||
caller <- parent.frame()
|
|
||||||
get_method_env <- function() {
|
|
||||||
top <- topenv(caller)
|
|
||||||
if (isNamespace(top)) {
|
|
||||||
asNamespace(environmentName(top))
|
|
||||||
} else {
|
|
||||||
caller
|
|
||||||
}
|
|
||||||
}
|
|
||||||
get_method <- function(method, env) {
|
|
||||||
if (is.null(method)) {
|
|
||||||
get(paste0(generic, ".", class), envir = get_method_env())
|
|
||||||
} else {
|
|
||||||
method
|
|
||||||
}
|
|
||||||
}
|
|
||||||
method_fn <- get_method(method)
|
|
||||||
stopifnot(is.function(method_fn))
|
|
||||||
setHook(packageEvent(package, "onLoad"), function(...) {
|
|
||||||
ns <- asNamespace(package)
|
|
||||||
method_fn <- get_method(method)
|
|
||||||
registerS3method(generic, class, method_fn, envir = ns)
|
|
||||||
})
|
|
||||||
if (!isNamespaceLoaded(package)) {
|
|
||||||
return(invisible())
|
|
||||||
}
|
|
||||||
envir <- asNamespace(package)
|
|
||||||
if (exists(generic, envir)) {
|
|
||||||
registerS3method(generic, class, method_fn, envir = envir)
|
|
||||||
}
|
|
||||||
invisible()
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Support old R versions ----
|
# Support old R versions ----
|
||||||
# these functions were not available in previous versions of R
|
# these functions were not available in previous versions of R
|
||||||
# see here for the full list: https://github.com/r-lib/backports
|
# see here for the full list: https://github.com/r-lib/backports
|
||||||
|
@@ -952,7 +952,19 @@ pm_select_env$get_nrow <- function() nrow(pm_select_env$.data)
|
|||||||
pm_select_env$get_ncol <- function() ncol(pm_select_env$.data)
|
pm_select_env$get_ncol <- function() ncol(pm_select_env$.data)
|
||||||
|
|
||||||
pm_select <- function(.data, ...) {
|
pm_select <- function(.data, ...) {
|
||||||
col_pos <- pm_select_positions(.data, ..., .group_pos = TRUE)
|
# col_pos <- pm_select_positions(.data, ..., .group_pos = TRUE),
|
||||||
|
col_pos <- tryCatch(pm_select_positions(.data, ..., .group_pos = TRUE), error = function(e) NULL)
|
||||||
|
if (is.null(col_pos)) {
|
||||||
|
# try with tidyverse
|
||||||
|
select_dplyr <- import_fn("select", "dplyr", error_on_fail = FALSE)
|
||||||
|
if (!is.null(select_dplyr)) {
|
||||||
|
col_pos <- which(colnames(.data) %in% colnames(select_dplyr(.data, ...)))
|
||||||
|
} else {
|
||||||
|
# this will throw an error as it did, but dplyr is not available, so no other option
|
||||||
|
col_pos <- pm_select_positions(.data, ..., .group_pos = TRUE)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
map_names <- names(col_pos)
|
map_names <- names(col_pos)
|
||||||
map_names_length <- nchar(map_names)
|
map_names_length <- nchar(map_names)
|
||||||
if (any(map_names_length == 0L)) {
|
if (any(map_names_length == 0L)) {
|
||||||
|
3
R/ab.R
3
R/ab.R
@@ -184,7 +184,8 @@ as.ab <- function(x, flag_multiple_results = TRUE, language = get_AMR_locale(),
|
|||||||
x_new[known_codes_cid] <- AMR_env$AB_lookup$ab[match(x[known_codes_cid], AMR_env$AB_lookup$cid)]
|
x_new[known_codes_cid] <- AMR_env$AB_lookup$ab[match(x[known_codes_cid], AMR_env$AB_lookup$cid)]
|
||||||
previously_coerced <- x %in% AMR_env$ab_previously_coerced$x
|
previously_coerced <- x %in% AMR_env$ab_previously_coerced$x
|
||||||
x_new[previously_coerced & is.na(x_new)] <- AMR_env$ab_previously_coerced$ab[match(x[is.na(x_new) & x %in% AMR_env$ab_previously_coerced$x], AMR_env$ab_previously_coerced$x)]
|
x_new[previously_coerced & is.na(x_new)] <- AMR_env$ab_previously_coerced$ab[match(x[is.na(x_new) & x %in% AMR_env$ab_previously_coerced$x], AMR_env$ab_previously_coerced$x)]
|
||||||
if (any(previously_coerced) && isTRUE(info) && message_not_thrown_before("as.ab", entire_session = TRUE)) {
|
previously_coerced_mention <- x %in% AMR_env$ab_previously_coerced$x & !x %in% AMR_env$AB_lookup$ab & !x %in% AMR_env$AB_lookup$generalised_name
|
||||||
|
if (any(previously_coerced_mention) && isTRUE(info) && message_not_thrown_before("as.ab", entire_session = TRUE)) {
|
||||||
message_(
|
message_(
|
||||||
"Returning previously coerced ",
|
"Returning previously coerced ",
|
||||||
ifelse(length(unique(which(x[which(previously_coerced)] %in% x_bak_clean))) > 1, "value for an antimicrobial", "values for various antimicrobials"),
|
ifelse(length(unique(which(x[which(previously_coerced)] %in% x_bak_clean))) > 1, "value for an antimicrobial", "values for various antimicrobials"),
|
||||||
|
@@ -445,7 +445,7 @@ ab_validate <- function(x, property, ...) {
|
|||||||
# try to catch an error when inputting an invalid argument
|
# try to catch an error when inputting an invalid argument
|
||||||
# so the 'call.' can be set to FALSE
|
# so the 'call.' can be set to FALSE
|
||||||
tryCatch(x[1L] %in% AMR_env$AB_lookup[1, property, drop = TRUE],
|
tryCatch(x[1L] %in% AMR_env$AB_lookup[1, property, drop = TRUE],
|
||||||
error = function(e) stop(e$message, call. = FALSE)
|
error = function(e) stop(conditionMessage(e), call. = FALSE)
|
||||||
)
|
)
|
||||||
|
|
||||||
if (!all(x %in% AMR_env$AB_lookup[, property, drop = TRUE])) {
|
if (!all(x %in% AMR_env$AB_lookup[, property, drop = TRUE])) {
|
||||||
|
@@ -527,7 +527,7 @@ amr_selector <- function(filter,
|
|||||||
)
|
)
|
||||||
call <- substitute(filter)
|
call <- substitute(filter)
|
||||||
agents <- tryCatch(AMR_env$AB_lookup[which(eval(call, envir = AMR_env$AB_lookup)), "ab", drop = TRUE],
|
agents <- tryCatch(AMR_env$AB_lookup[which(eval(call, envir = AMR_env$AB_lookup)), "ab", drop = TRUE],
|
||||||
error = function(e) stop_(e$message, call = -5)
|
error = function(e) stop_(conditionMessage(e), call = -5)
|
||||||
)
|
)
|
||||||
agents <- ab_in_data[ab_in_data %in% agents]
|
agents <- ab_in_data[ab_in_data %in% agents]
|
||||||
message_agent_names(
|
message_agent_names(
|
||||||
@@ -640,7 +640,7 @@ not_intrinsic_resistant <- function(only_sir_columns = FALSE, col_mo = NULL, ver
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
error = function(e) stop_("in not_intrinsic_resistant(): ", e$message, call = FALSE)
|
error = function(e) stop_("in not_intrinsic_resistant(): ", conditionMessage(e), call = FALSE)
|
||||||
)
|
)
|
||||||
|
|
||||||
agents <- ab_in_data[ab_in_data %in% names(vars_df_R[which(vars_df_R)])]
|
agents <- ab_in_data[ab_in_data %in% names(vars_df_R[which(vars_df_R)])]
|
||||||
|
@@ -576,6 +576,15 @@ antibiogram.default <- function(x,
|
|||||||
}
|
}
|
||||||
antimicrobials <- unlist(antimicrobials)
|
antimicrobials <- unlist(antimicrobials)
|
||||||
} else {
|
} else {
|
||||||
|
existing_ab_combined_cols <- ab_trycatch[ab_trycatch %like% "[+]" & ab_trycatch %in% colnames(x)]
|
||||||
|
if (length(existing_ab_combined_cols) > 0 && !is.null(ab_transform)) {
|
||||||
|
ab_transform <- NULL
|
||||||
|
warning_(
|
||||||
|
"Detected column name(s) containing the '+' character, which conflicts with the expected syntax in `antibiogram()`: the '+' is used to combine separate antimicrobial agent columns (e.g., \"AMP+GEN\").\n\n",
|
||||||
|
"To avoid incorrectly guessing which antimicrobials this represents, `ab_transform` was automatically set to `NULL`.\n\n",
|
||||||
|
"If this is unintended, please rename the column(s) to avoid using '+' in the name, or set `ab_transform = NULL` explicitly to suppress this message."
|
||||||
|
)
|
||||||
|
}
|
||||||
antimicrobials <- ab_trycatch
|
antimicrobials <- ab_trycatch
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -264,7 +264,7 @@ av_validate <- function(x, property, ...) {
|
|||||||
# try to catch an error when inputting an invalid argument
|
# try to catch an error when inputting an invalid argument
|
||||||
# so the 'call.' can be set to FALSE
|
# so the 'call.' can be set to FALSE
|
||||||
tryCatch(x[1L] %in% AMR_env$AV_lookup[1, property, drop = TRUE],
|
tryCatch(x[1L] %in% AMR_env$AV_lookup[1, property, drop = TRUE],
|
||||||
error = function(e) stop(e$message, call. = FALSE)
|
error = function(e) stop(conditionMessage(e), call. = FALSE)
|
||||||
)
|
)
|
||||||
|
|
||||||
if (!all(x %in% AMR_env$AV_lookup[, property, drop = TRUE])) {
|
if (!all(x %in% AMR_env$AV_lookup[, property, drop = TRUE])) {
|
||||||
|
18
R/count.R
18
R/count.R
@@ -126,7 +126,7 @@ count_resistant <- function(..., only_all_tested = FALSE) {
|
|||||||
only_all_tested = only_all_tested,
|
only_all_tested = only_all_tested,
|
||||||
only_count = TRUE
|
only_count = TRUE
|
||||||
),
|
),
|
||||||
error = function(e) stop_(gsub("in sir_calc(): ", "", e$message, fixed = TRUE), call = -5)
|
error = function(e) stop_(gsub("in sir_calc(): ", "", conditionMessage(e), fixed = TRUE), call = -5)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -139,7 +139,7 @@ count_susceptible <- function(..., only_all_tested = FALSE) {
|
|||||||
only_all_tested = only_all_tested,
|
only_all_tested = only_all_tested,
|
||||||
only_count = TRUE
|
only_count = TRUE
|
||||||
),
|
),
|
||||||
error = function(e) stop_(gsub("in sir_calc(): ", "", e$message, fixed = TRUE), call = -5)
|
error = function(e) stop_(gsub("in sir_calc(): ", "", conditionMessage(e), fixed = TRUE), call = -5)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -152,7 +152,7 @@ count_S <- function(..., only_all_tested = FALSE) {
|
|||||||
only_all_tested = only_all_tested,
|
only_all_tested = only_all_tested,
|
||||||
only_count = TRUE
|
only_count = TRUE
|
||||||
),
|
),
|
||||||
error = function(e) stop_(gsub("in sir_calc(): ", "", e$message, fixed = TRUE), call = -5)
|
error = function(e) stop_(gsub("in sir_calc(): ", "", conditionMessage(e), fixed = TRUE), call = -5)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -165,7 +165,7 @@ count_SI <- function(..., only_all_tested = FALSE) {
|
|||||||
only_all_tested = only_all_tested,
|
only_all_tested = only_all_tested,
|
||||||
only_count = TRUE
|
only_count = TRUE
|
||||||
),
|
),
|
||||||
error = function(e) stop_(gsub("in sir_calc(): ", "", e$message, fixed = TRUE), call = -5)
|
error = function(e) stop_(gsub("in sir_calc(): ", "", conditionMessage(e), fixed = TRUE), call = -5)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -178,7 +178,7 @@ count_I <- function(..., only_all_tested = FALSE) {
|
|||||||
only_all_tested = only_all_tested,
|
only_all_tested = only_all_tested,
|
||||||
only_count = TRUE
|
only_count = TRUE
|
||||||
),
|
),
|
||||||
error = function(e) stop_(gsub("in sir_calc(): ", "", e$message, fixed = TRUE), call = -5)
|
error = function(e) stop_(gsub("in sir_calc(): ", "", conditionMessage(e), fixed = TRUE), call = -5)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -191,7 +191,7 @@ count_IR <- function(..., only_all_tested = FALSE) {
|
|||||||
only_all_tested = only_all_tested,
|
only_all_tested = only_all_tested,
|
||||||
only_count = TRUE
|
only_count = TRUE
|
||||||
),
|
),
|
||||||
error = function(e) stop_(gsub("in sir_calc(): ", "", e$message, fixed = TRUE), call = -5)
|
error = function(e) stop_(gsub("in sir_calc(): ", "", conditionMessage(e), fixed = TRUE), call = -5)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -204,7 +204,7 @@ count_R <- function(..., only_all_tested = FALSE) {
|
|||||||
only_all_tested = only_all_tested,
|
only_all_tested = only_all_tested,
|
||||||
only_count = TRUE
|
only_count = TRUE
|
||||||
),
|
),
|
||||||
error = function(e) stop_(gsub("in sir_calc(): ", "", e$message, fixed = TRUE), call = -5)
|
error = function(e) stop_(gsub("in sir_calc(): ", "", conditionMessage(e), fixed = TRUE), call = -5)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -217,7 +217,7 @@ count_all <- function(..., only_all_tested = FALSE) {
|
|||||||
only_all_tested = only_all_tested,
|
only_all_tested = only_all_tested,
|
||||||
only_count = TRUE
|
only_count = TRUE
|
||||||
),
|
),
|
||||||
error = function(e) stop_(gsub("in sir_calc(): ", "", e$message, fixed = TRUE), call = -5)
|
error = function(e) stop_(gsub("in sir_calc(): ", "", conditionMessage(e), fixed = TRUE), call = -5)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -240,6 +240,6 @@ count_df <- function(data,
|
|||||||
combine_SI = combine_SI,
|
combine_SI = combine_SI,
|
||||||
confidence_level = 0.95 # doesn't matter, will be removed
|
confidence_level = 0.95 # doesn't matter, will be removed
|
||||||
),
|
),
|
||||||
error = function(e) stop_(gsub("in sir_calc_df(): ", "", e$message, fixed = TRUE), call = -5)
|
error = function(e) stop_(gsub("in sir_calc_df(): ", "", conditionMessage(e), fixed = TRUE), call = -5)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@@ -175,7 +175,7 @@ custom_mdro_guideline <- function(..., as_factor = TRUE) {
|
|||||||
|
|
||||||
# Value
|
# Value
|
||||||
val <- tryCatch(eval(dots[[i]][[3]]), error = function(e) NULL)
|
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(is.null(val), "rule ", i, " must return a valid value, it now returns an error: ", tryCatch(eval(dots[[i]][[3]]), error = function(e) conditionMessage(e)))
|
||||||
stop_if(length(val) > 1, "rule ", i, " must return a value of length 1, not ", length(val))
|
stop_if(length(val) > 1, "rule ", i, " must return a value of length 1, not ", length(val))
|
||||||
out[[i]]$value <- as.character(val)
|
out[[i]]$value <- as.character(val)
|
||||||
}
|
}
|
||||||
@@ -254,7 +254,7 @@ run_custom_mdro_guideline <- function(df, guideline, info) {
|
|||||||
for (i in seq_len(n_dots)) {
|
for (i in seq_len(n_dots)) {
|
||||||
qry <- tryCatch(eval(parse(text = guideline[[i]]$query), envir = df, enclos = parent.frame()),
|
qry <- tryCatch(eval(parse(text = guideline[[i]]$query), envir = df, enclos = parent.frame()),
|
||||||
error = function(e) {
|
error = function(e) {
|
||||||
AMR_env$err_msg <- e$message
|
AMR_env$err_msg <- conditionMessage(e)
|
||||||
return("error")
|
return("error")
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
@@ -1178,7 +1178,7 @@ edit_sir <- function(x,
|
|||||||
ifelse(length(rows) > 10, "...", ""),
|
ifelse(length(rows) > 10, "...", ""),
|
||||||
" while writing value '", to,
|
" while writing value '", to,
|
||||||
"' to column(s) `", paste(cols, collapse = "`, `"),
|
"' to column(s) `", paste(cols, collapse = "`, `"),
|
||||||
"`:\n", e$message
|
"`:\n", conditionMessage(e)
|
||||||
),
|
),
|
||||||
call. = FALSE
|
call. = FALSE
|
||||||
)
|
)
|
||||||
|
@@ -178,6 +178,7 @@ ggplot_sir <- function(data,
|
|||||||
colours = c(
|
colours = c(
|
||||||
S = "#3CAEA3",
|
S = "#3CAEA3",
|
||||||
SI = "#3CAEA3",
|
SI = "#3CAEA3",
|
||||||
|
SDD = "#8FD6C4",
|
||||||
I = "#F6D55C",
|
I = "#F6D55C",
|
||||||
IR = "#ED553B",
|
IR = "#ED553B",
|
||||||
R = "#ED553B"
|
R = "#ED553B"
|
||||||
|
@@ -31,7 +31,7 @@
|
|||||||
#'
|
#'
|
||||||
#' Calculates a normalised mean for antimicrobial resistance between multiple observations, to help to identify similar isolates without comparing antibiograms by hand.
|
#' Calculates a normalised mean for antimicrobial resistance between multiple observations, to help to identify similar isolates without comparing antibiograms by hand.
|
||||||
#' @param x A vector of class [sir][as.sir()], [mic][as.mic()] or [disk][as.disk()], or a [data.frame] containing columns of any of these classes.
|
#' @param x A vector of class [sir][as.sir()], [mic][as.mic()] or [disk][as.disk()], or a [data.frame] containing columns of any of these classes.
|
||||||
#' @param ... Variables to select. Supports [tidyselect language][tidyselect::language] (such as `column1:column4` and `where(is.mic)`), and can thus also be [antimicrobial selectors][amr_selector()].
|
#' @param ... Variables to select. Supports [tidyselect language][tidyselect::starts_with()] such as `where(is.mic)`, `starts_with(...)`, or `column1:column4`, and can thus also be [antimicrobial selectors][amr_selector()].
|
||||||
#' @param combine_SI A [logical] to indicate whether all values of S, SDD, and I must be merged into one, so the input only consists of S+I vs. R (susceptible vs. resistant) - the default is `TRUE`.
|
#' @param combine_SI A [logical] to indicate whether all values of S, SDD, and I must be merged into one, so the input only consists of S+I vs. R (susceptible vs. resistant) - the default is `TRUE`.
|
||||||
#' @details The mean AMR distance is effectively [the Z-score](https://en.wikipedia.org/wiki/Standard_score); a normalised numeric value to compare AMR test results which can help to identify similar isolates, without comparing antibiograms by hand.
|
#' @details The mean AMR distance is effectively [the Z-score](https://en.wikipedia.org/wiki/Standard_score); a normalised numeric value to compare AMR test results which can help to identify similar isolates, without comparing antibiograms by hand.
|
||||||
#'
|
#'
|
||||||
|
2
R/mo.R
2
R/mo.R
@@ -1186,7 +1186,7 @@ parse_and_convert <- function(x) {
|
|||||||
parsed <- gsub('"', "", parsed, fixed = TRUE)
|
parsed <- gsub('"', "", parsed, fixed = TRUE)
|
||||||
parsed
|
parsed
|
||||||
},
|
},
|
||||||
error = function(e) stop(e$message, call. = FALSE)
|
error = function(e) stop(conditionMessage(e), call. = FALSE)
|
||||||
) # this will also be thrown when running `as.mo(no_existing_object)`
|
) # this will also be thrown when running `as.mo(no_existing_object)`
|
||||||
}
|
}
|
||||||
out <- trimws2(out)
|
out <- trimws2(out)
|
||||||
|
@@ -974,7 +974,7 @@ mo_validate <- function(x, property, language, keep_synonyms = keep_synonyms, ..
|
|||||||
# try to catch an error when inputting an invalid argument
|
# try to catch an error when inputting an invalid argument
|
||||||
# so the 'call.' can be set to FALSE
|
# so the 'call.' can be set to FALSE
|
||||||
tryCatch(x[1L] %in% unlist(AMR_env$MO_lookup[1, property, drop = TRUE]),
|
tryCatch(x[1L] %in% unlist(AMR_env$MO_lookup[1, property, drop = TRUE]),
|
||||||
error = function(e) stop(e$message, call. = FALSE)
|
error = function(e) stop(conditionMessage(e), call. = FALSE)
|
||||||
)
|
)
|
||||||
|
|
||||||
dots <- list(...)
|
dots <- list(...)
|
||||||
|
2
R/pca.R
2
R/pca.R
@@ -99,7 +99,7 @@ pca <- function(x,
|
|||||||
new_list <- list(0)
|
new_list <- list(0)
|
||||||
for (i in seq_len(length(dots) - 1)) {
|
for (i in seq_len(length(dots) - 1)) {
|
||||||
new_list[[i]] <- tryCatch(eval(dots[[i + 1]], envir = x),
|
new_list[[i]] <- tryCatch(eval(dots[[i + 1]], envir = x),
|
||||||
error = function(e) stop(e$message, call. = FALSE)
|
error = function(e) stop(conditionMessage(e), call. = FALSE)
|
||||||
)
|
)
|
||||||
if (length(new_list[[i]]) == 1) {
|
if (length(new_list[[i]]) == 1) {
|
||||||
if (is.character(new_list[[i]]) && new_list[[i]] %in% colnames(x)) {
|
if (is.character(new_list[[i]]) && new_list[[i]] %in% colnames(x)) {
|
||||||
|
245
R/plotting.R
245
R/plotting.R
@@ -377,6 +377,13 @@ create_scale_sir <- function(aesthetics, colours_SIR, language, eucast_I, ...) {
|
|||||||
args <- list(...)
|
args <- list(...)
|
||||||
args[c("value", "labels", "limits")] <- NULL
|
args[c("value", "labels", "limits")] <- NULL
|
||||||
|
|
||||||
|
if (length(colours_SIR) == 1) {
|
||||||
|
colours_SIR <- rep(colours_SIR, 4)
|
||||||
|
} else if (length(colours_SIR) == 3) {
|
||||||
|
colours_SIR <- c(colours_SIR[1], colours_SIR[1], colours_SIR[2], colours_SIR[3])
|
||||||
|
}
|
||||||
|
colours_SIR <- unname(colours_SIR)
|
||||||
|
|
||||||
if (identical(aesthetics, "x")) {
|
if (identical(aesthetics, "x")) {
|
||||||
ggplot_fn <- ggplot2::scale_x_discrete
|
ggplot_fn <- ggplot2::scale_x_discrete
|
||||||
} else {
|
} else {
|
||||||
@@ -388,8 +395,8 @@ create_scale_sir <- function(aesthetics, colours_SIR, language, eucast_I, ...) {
|
|||||||
values = c(
|
values = c(
|
||||||
S = colours_SIR[1],
|
S = colours_SIR[1],
|
||||||
SDD = colours_SIR[2],
|
SDD = colours_SIR[2],
|
||||||
I = colours_SIR[2],
|
I = colours_SIR[3],
|
||||||
R = colours_SIR[3],
|
R = colours_SIR[4],
|
||||||
NI = "grey30"
|
NI = "grey30"
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -427,11 +434,16 @@ create_scale_sir <- function(aesthetics, colours_SIR, language, eucast_I, ...) {
|
|||||||
|
|
||||||
#' @rdname plot
|
#' @rdname plot
|
||||||
#' @export
|
#' @export
|
||||||
scale_x_sir <- function(colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"),
|
scale_x_sir <- function(colours_SIR = c(
|
||||||
|
S = "#3CAEA3",
|
||||||
|
SDD = "#8FD6C4",
|
||||||
|
I = "#F6D55C",
|
||||||
|
R = "#ED553B"
|
||||||
|
),
|
||||||
language = get_AMR_locale(),
|
language = get_AMR_locale(),
|
||||||
eucast_I = getOption("AMR_guideline", "EUCAST") == "EUCAST",
|
eucast_I = getOption("AMR_guideline", "EUCAST") == "EUCAST",
|
||||||
...) {
|
...) {
|
||||||
meet_criteria(colours_SIR, allow_class = "character", has_length = c(1, 3))
|
meet_criteria(colours_SIR, allow_class = "character", has_length = c(1, 3, 4))
|
||||||
language <- validate_language(language)
|
language <- validate_language(language)
|
||||||
meet_criteria(eucast_I, allow_class = "logical", has_length = 1)
|
meet_criteria(eucast_I, allow_class = "logical", has_length = 1)
|
||||||
create_scale_sir(aesthetics = "x", colours_SIR = colours_SIR, language = language, eucast_I = eucast_I)
|
create_scale_sir(aesthetics = "x", colours_SIR = colours_SIR, language = language, eucast_I = eucast_I)
|
||||||
@@ -439,11 +451,16 @@ scale_x_sir <- function(colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"),
|
|||||||
|
|
||||||
#' @rdname plot
|
#' @rdname plot
|
||||||
#' @export
|
#' @export
|
||||||
scale_colour_sir <- function(colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"),
|
scale_colour_sir <- function(colours_SIR = c(
|
||||||
|
S = "#3CAEA3",
|
||||||
|
SDD = "#8FD6C4",
|
||||||
|
I = "#F6D55C",
|
||||||
|
R = "#ED553B"
|
||||||
|
),
|
||||||
language = get_AMR_locale(),
|
language = get_AMR_locale(),
|
||||||
eucast_I = getOption("AMR_guideline", "EUCAST") == "EUCAST",
|
eucast_I = getOption("AMR_guideline", "EUCAST") == "EUCAST",
|
||||||
...) {
|
...) {
|
||||||
meet_criteria(colours_SIR, allow_class = "character", has_length = c(1, 3))
|
meet_criteria(colours_SIR, allow_class = "character", has_length = c(1, 3, 4))
|
||||||
language <- validate_language(language)
|
language <- validate_language(language)
|
||||||
meet_criteria(eucast_I, allow_class = "logical", has_length = 1)
|
meet_criteria(eucast_I, allow_class = "logical", has_length = 1)
|
||||||
args <- list(...)
|
args <- list(...)
|
||||||
@@ -463,11 +480,16 @@ scale_color_sir <- scale_colour_sir
|
|||||||
|
|
||||||
#' @rdname plot
|
#' @rdname plot
|
||||||
#' @export
|
#' @export
|
||||||
scale_fill_sir <- function(colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"),
|
scale_fill_sir <- function(colours_SIR = c(
|
||||||
|
S = "#3CAEA3",
|
||||||
|
SDD = "#8FD6C4",
|
||||||
|
I = "#F6D55C",
|
||||||
|
R = "#ED553B"
|
||||||
|
),
|
||||||
language = get_AMR_locale(),
|
language = get_AMR_locale(),
|
||||||
eucast_I = getOption("AMR_guideline", "EUCAST") == "EUCAST",
|
eucast_I = getOption("AMR_guideline", "EUCAST") == "EUCAST",
|
||||||
...) {
|
...) {
|
||||||
meet_criteria(colours_SIR, allow_class = "character", has_length = c(1, 3))
|
meet_criteria(colours_SIR, allow_class = "character", has_length = c(1, 3, 4))
|
||||||
language <- validate_language(language)
|
language <- validate_language(language)
|
||||||
meet_criteria(eucast_I, allow_class = "logical", has_length = 1)
|
meet_criteria(eucast_I, allow_class = "logical", has_length = 1)
|
||||||
args <- list(...)
|
args <- list(...)
|
||||||
@@ -491,7 +513,12 @@ plot.mic <- function(x,
|
|||||||
main = deparse(substitute(x)),
|
main = deparse(substitute(x)),
|
||||||
ylab = translate_AMR("Frequency", language = language),
|
ylab = translate_AMR("Frequency", language = language),
|
||||||
xlab = translate_AMR("Minimum Inhibitory Concentration (mg/L)", language = language),
|
xlab = translate_AMR("Minimum Inhibitory Concentration (mg/L)", language = language),
|
||||||
colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"),
|
colours_SIR = c(
|
||||||
|
S = "#3CAEA3",
|
||||||
|
SDD = "#8FD6C4",
|
||||||
|
I = "#F6D55C",
|
||||||
|
R = "#ED553B"
|
||||||
|
),
|
||||||
language = get_AMR_locale(),
|
language = get_AMR_locale(),
|
||||||
expand = TRUE,
|
expand = TRUE,
|
||||||
include_PKPD = getOption("AMR_include_PKPD", TRUE),
|
include_PKPD = getOption("AMR_include_PKPD", TRUE),
|
||||||
@@ -503,15 +530,11 @@ plot.mic <- function(x,
|
|||||||
meet_criteria(main, allow_class = "character", has_length = 1, allow_NULL = TRUE)
|
meet_criteria(main, allow_class = "character", has_length = 1, allow_NULL = TRUE)
|
||||||
meet_criteria(ylab, allow_class = "character", has_length = 1)
|
meet_criteria(ylab, allow_class = "character", has_length = 1)
|
||||||
meet_criteria(xlab, allow_class = "character", has_length = 1)
|
meet_criteria(xlab, allow_class = "character", has_length = 1)
|
||||||
meet_criteria(colours_SIR, allow_class = "character", has_length = c(1, 3))
|
meet_criteria(colours_SIR, allow_class = "character", has_length = c(1, 3, 4))
|
||||||
language <- validate_language(language)
|
language <- validate_language(language)
|
||||||
meet_criteria(expand, allow_class = "logical", has_length = 1)
|
meet_criteria(expand, allow_class = "logical", has_length = 1)
|
||||||
|
|
||||||
x <- as.mic(x) # make sure that currently implemented MIC levels are used
|
x <- as.mic(x) # make sure that currently implemented MIC levels are used
|
||||||
|
|
||||||
if (length(colours_SIR) == 1) {
|
|
||||||
colours_SIR <- rep(colours_SIR, 3)
|
|
||||||
}
|
|
||||||
main <- gsub(" +", " ", paste0(main, collapse = " "))
|
main <- gsub(" +", " ", paste0(main, collapse = " "))
|
||||||
|
|
||||||
x <- plotrange_as_table(x, expand = expand)
|
x <- plotrange_as_table(x, expand = expand)
|
||||||
@@ -549,13 +572,17 @@ plot.mic <- function(x,
|
|||||||
legend_col <- colours_SIR[1]
|
legend_col <- colours_SIR[1]
|
||||||
}
|
}
|
||||||
if (any(cols_sub$cols == colours_SIR[2] & cols_sub$count > 0)) {
|
if (any(cols_sub$cols == colours_SIR[2] & cols_sub$count > 0)) {
|
||||||
legend_txt <- c(legend_txt, paste("(I)", plot_name_of_I(cols_sub$guideline)))
|
legend_txt <- c(legend_txt, "(SDD) Susceptible dose-dependent")
|
||||||
legend_col <- c(legend_col, colours_SIR[2])
|
legend_col <- c(legend_col, colours_SIR[2])
|
||||||
}
|
}
|
||||||
if (any(cols_sub$cols == colours_SIR[3] & cols_sub$count > 0)) {
|
if (any(cols_sub$cols == colours_SIR[3] & cols_sub$count > 0)) {
|
||||||
legend_txt <- c(legend_txt, "(R) Resistant")
|
legend_txt <- c(legend_txt, paste("(I)", plot_name_of_I(cols_sub$guideline)))
|
||||||
legend_col <- c(legend_col, colours_SIR[3])
|
legend_col <- c(legend_col, colours_SIR[3])
|
||||||
}
|
}
|
||||||
|
if (any(cols_sub$cols == colours_SIR[4] & cols_sub$count > 0)) {
|
||||||
|
legend_txt <- c(legend_txt, "(R) Resistant")
|
||||||
|
legend_col <- c(legend_col, colours_SIR[4])
|
||||||
|
}
|
||||||
|
|
||||||
legend("top",
|
legend("top",
|
||||||
x.intersp = 0.5,
|
x.intersp = 0.5,
|
||||||
@@ -580,7 +607,12 @@ barplot.mic <- function(height,
|
|||||||
main = deparse(substitute(height)),
|
main = deparse(substitute(height)),
|
||||||
ylab = translate_AMR("Frequency", language = language),
|
ylab = translate_AMR("Frequency", language = language),
|
||||||
xlab = translate_AMR("Minimum Inhibitory Concentration (mg/L)", language = language),
|
xlab = translate_AMR("Minimum Inhibitory Concentration (mg/L)", language = language),
|
||||||
colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"),
|
colours_SIR = c(
|
||||||
|
S = "#3CAEA3",
|
||||||
|
SDD = "#8FD6C4",
|
||||||
|
I = "#F6D55C",
|
||||||
|
R = "#ED553B"
|
||||||
|
),
|
||||||
language = get_AMR_locale(),
|
language = get_AMR_locale(),
|
||||||
expand = TRUE,
|
expand = TRUE,
|
||||||
...) {
|
...) {
|
||||||
@@ -590,7 +622,7 @@ barplot.mic <- function(height,
|
|||||||
meet_criteria(mo, allow_class = c("mo", "character"), allow_NULL = TRUE)
|
meet_criteria(mo, allow_class = c("mo", "character"), allow_NULL = TRUE)
|
||||||
meet_criteria(ab, allow_class = c("ab", "character"), allow_NULL = TRUE)
|
meet_criteria(ab, allow_class = c("ab", "character"), allow_NULL = TRUE)
|
||||||
meet_criteria(guideline, allow_class = "character", has_length = 1)
|
meet_criteria(guideline, allow_class = "character", has_length = 1)
|
||||||
meet_criteria(colours_SIR, allow_class = "character", has_length = c(1, 3))
|
meet_criteria(colours_SIR, allow_class = "character", has_length = c(1, 3, 4))
|
||||||
language <- validate_language(language)
|
language <- validate_language(language)
|
||||||
meet_criteria(expand, allow_class = "logical", has_length = 1)
|
meet_criteria(expand, allow_class = "logical", has_length = 1)
|
||||||
|
|
||||||
@@ -622,7 +654,12 @@ autoplot.mic <- function(object,
|
|||||||
title = deparse(substitute(object)),
|
title = deparse(substitute(object)),
|
||||||
ylab = translate_AMR("Frequency", language = language),
|
ylab = translate_AMR("Frequency", language = language),
|
||||||
xlab = translate_AMR("Minimum Inhibitory Concentration (mg/L)", language = language),
|
xlab = translate_AMR("Minimum Inhibitory Concentration (mg/L)", language = language),
|
||||||
colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"),
|
colours_SIR = c(
|
||||||
|
S = "#3CAEA3",
|
||||||
|
SDD = "#8FD6C4",
|
||||||
|
I = "#F6D55C",
|
||||||
|
R = "#ED553B"
|
||||||
|
),
|
||||||
language = get_AMR_locale(),
|
language = get_AMR_locale(),
|
||||||
expand = TRUE,
|
expand = TRUE,
|
||||||
include_PKPD = getOption("AMR_include_PKPD", TRUE),
|
include_PKPD = getOption("AMR_include_PKPD", TRUE),
|
||||||
@@ -635,7 +672,7 @@ autoplot.mic <- function(object,
|
|||||||
meet_criteria(title, allow_class = "character", allow_NULL = TRUE)
|
meet_criteria(title, allow_class = "character", allow_NULL = TRUE)
|
||||||
meet_criteria(ylab, allow_class = "character", has_length = 1)
|
meet_criteria(ylab, allow_class = "character", has_length = 1)
|
||||||
meet_criteria(xlab, allow_class = "character", has_length = 1)
|
meet_criteria(xlab, allow_class = "character", has_length = 1)
|
||||||
meet_criteria(colours_SIR, allow_class = "character", has_length = c(1, 3))
|
meet_criteria(colours_SIR, allow_class = "character", has_length = c(1, 3, 4))
|
||||||
language <- validate_language(language)
|
language <- validate_language(language)
|
||||||
meet_criteria(expand, allow_class = "logical", has_length = 1)
|
meet_criteria(expand, allow_class = "logical", has_length = 1)
|
||||||
|
|
||||||
@@ -731,7 +768,12 @@ plot.disk <- function(x,
|
|||||||
mo = NULL,
|
mo = NULL,
|
||||||
ab = NULL,
|
ab = NULL,
|
||||||
guideline = getOption("AMR_guideline", "EUCAST"),
|
guideline = getOption("AMR_guideline", "EUCAST"),
|
||||||
colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"),
|
colours_SIR = c(
|
||||||
|
S = "#3CAEA3",
|
||||||
|
SDD = "#8FD6C4",
|
||||||
|
I = "#F6D55C",
|
||||||
|
R = "#ED553B"
|
||||||
|
),
|
||||||
language = get_AMR_locale(),
|
language = get_AMR_locale(),
|
||||||
expand = TRUE,
|
expand = TRUE,
|
||||||
include_PKPD = getOption("AMR_include_PKPD", TRUE),
|
include_PKPD = getOption("AMR_include_PKPD", TRUE),
|
||||||
@@ -743,13 +785,10 @@ plot.disk <- function(x,
|
|||||||
meet_criteria(mo, allow_class = c("mo", "character"), allow_NULL = TRUE)
|
meet_criteria(mo, allow_class = c("mo", "character"), allow_NULL = TRUE)
|
||||||
meet_criteria(ab, allow_class = c("ab", "character"), allow_NULL = TRUE)
|
meet_criteria(ab, allow_class = c("ab", "character"), allow_NULL = TRUE)
|
||||||
meet_criteria(guideline, allow_class = "character", has_length = 1)
|
meet_criteria(guideline, allow_class = "character", has_length = 1)
|
||||||
meet_criteria(colours_SIR, allow_class = "character", has_length = c(1, 3))
|
meet_criteria(colours_SIR, allow_class = "character", has_length = c(1, 3, 4))
|
||||||
language <- validate_language(language)
|
language <- validate_language(language)
|
||||||
meet_criteria(expand, allow_class = "logical", has_length = 1)
|
meet_criteria(expand, allow_class = "logical", has_length = 1)
|
||||||
|
|
||||||
if (length(colours_SIR) == 1) {
|
|
||||||
colours_SIR <- rep(colours_SIR, 3)
|
|
||||||
}
|
|
||||||
main <- gsub(" +", " ", paste0(main, collapse = " "))
|
main <- gsub(" +", " ", paste0(main, collapse = " "))
|
||||||
|
|
||||||
x <- plotrange_as_table(x, expand = expand)
|
x <- plotrange_as_table(x, expand = expand)
|
||||||
@@ -783,12 +822,16 @@ plot.disk <- function(x,
|
|||||||
if (any(colours_SIR %in% cols_sub$cols)) {
|
if (any(colours_SIR %in% cols_sub$cols)) {
|
||||||
legend_txt <- character(0)
|
legend_txt <- character(0)
|
||||||
legend_col <- character(0)
|
legend_col <- character(0)
|
||||||
if (any(cols_sub$cols == colours_SIR[3] & cols_sub$count > 0)) {
|
if (any(cols_sub$cols == colours_SIR[4] & cols_sub$count > 0)) {
|
||||||
legend_txt <- "(R) Resistant"
|
legend_txt <- "(R) Resistant"
|
||||||
legend_col <- colours_SIR[3]
|
legend_col <- colours_SIR[4]
|
||||||
|
}
|
||||||
|
if (any(cols_sub$cols == colours_SIR[3] & cols_sub$count > 0)) {
|
||||||
|
legend_txt <- c(legend_txt, paste("(I)", plot_name_of_I(cols_sub$guideline)))
|
||||||
|
legend_col <- c(legend_col, colours_SIR[3])
|
||||||
}
|
}
|
||||||
if (any(cols_sub$cols == colours_SIR[2] & cols_sub$count > 0)) {
|
if (any(cols_sub$cols == colours_SIR[2] & cols_sub$count > 0)) {
|
||||||
legend_txt <- c(legend_txt, paste("(I)", plot_name_of_I(cols_sub$guideline)))
|
legend_txt <- c(legend_txt, "(SDD) Susceptible dose-dependent")
|
||||||
legend_col <- c(legend_col, colours_SIR[2])
|
legend_col <- c(legend_col, colours_SIR[2])
|
||||||
}
|
}
|
||||||
if (any(cols_sub$cols == colours_SIR[1] & cols_sub$count > 0)) {
|
if (any(cols_sub$cols == colours_SIR[1] & cols_sub$count > 0)) {
|
||||||
@@ -818,7 +861,12 @@ barplot.disk <- function(height,
|
|||||||
mo = NULL,
|
mo = NULL,
|
||||||
ab = NULL,
|
ab = NULL,
|
||||||
guideline = getOption("AMR_guideline", "EUCAST"),
|
guideline = getOption("AMR_guideline", "EUCAST"),
|
||||||
colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"),
|
colours_SIR = c(
|
||||||
|
S = "#3CAEA3",
|
||||||
|
SDD = "#8FD6C4",
|
||||||
|
I = "#F6D55C",
|
||||||
|
R = "#ED553B"
|
||||||
|
),
|
||||||
language = get_AMR_locale(),
|
language = get_AMR_locale(),
|
||||||
expand = TRUE,
|
expand = TRUE,
|
||||||
...) {
|
...) {
|
||||||
@@ -828,7 +876,7 @@ barplot.disk <- function(height,
|
|||||||
meet_criteria(mo, allow_class = c("mo", "character"), allow_NULL = TRUE)
|
meet_criteria(mo, allow_class = c("mo", "character"), allow_NULL = TRUE)
|
||||||
meet_criteria(ab, allow_class = c("ab", "character"), allow_NULL = TRUE)
|
meet_criteria(ab, allow_class = c("ab", "character"), allow_NULL = TRUE)
|
||||||
meet_criteria(guideline, allow_class = "character", has_length = 1)
|
meet_criteria(guideline, allow_class = "character", has_length = 1)
|
||||||
meet_criteria(colours_SIR, allow_class = "character", has_length = c(1, 3))
|
meet_criteria(colours_SIR, allow_class = "character", has_length = c(1, 3, 4))
|
||||||
language <- validate_language(language)
|
language <- validate_language(language)
|
||||||
meet_criteria(expand, allow_class = "logical", has_length = 1)
|
meet_criteria(expand, allow_class = "logical", has_length = 1)
|
||||||
|
|
||||||
@@ -858,7 +906,12 @@ autoplot.disk <- function(object,
|
|||||||
ylab = translate_AMR("Frequency", language = language),
|
ylab = translate_AMR("Frequency", language = language),
|
||||||
xlab = translate_AMR("Disk diffusion diameter (mm)", language = language),
|
xlab = translate_AMR("Disk diffusion diameter (mm)", language = language),
|
||||||
guideline = getOption("AMR_guideline", "EUCAST"),
|
guideline = getOption("AMR_guideline", "EUCAST"),
|
||||||
colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"),
|
colours_SIR = c(
|
||||||
|
S = "#3CAEA3",
|
||||||
|
SDD = "#8FD6C4",
|
||||||
|
I = "#F6D55C",
|
||||||
|
R = "#ED553B"
|
||||||
|
),
|
||||||
language = get_AMR_locale(),
|
language = get_AMR_locale(),
|
||||||
expand = TRUE,
|
expand = TRUE,
|
||||||
include_PKPD = getOption("AMR_include_PKPD", TRUE),
|
include_PKPD = getOption("AMR_include_PKPD", TRUE),
|
||||||
@@ -871,7 +924,7 @@ autoplot.disk <- function(object,
|
|||||||
meet_criteria(mo, allow_class = c("mo", "character"), allow_NULL = TRUE)
|
meet_criteria(mo, allow_class = c("mo", "character"), allow_NULL = TRUE)
|
||||||
meet_criteria(ab, allow_class = c("ab", "character"), allow_NULL = TRUE)
|
meet_criteria(ab, allow_class = c("ab", "character"), allow_NULL = TRUE)
|
||||||
meet_criteria(guideline, allow_class = "character", has_length = 1)
|
meet_criteria(guideline, allow_class = "character", has_length = 1)
|
||||||
meet_criteria(colours_SIR, allow_class = "character", has_length = c(1, 3))
|
meet_criteria(colours_SIR, allow_class = "character", has_length = c(1, 3, 4))
|
||||||
language <- validate_language(language)
|
language <- validate_language(language)
|
||||||
meet_criteria(expand, allow_class = "logical", has_length = 1)
|
meet_criteria(expand, allow_class = "logical", has_length = 1)
|
||||||
|
|
||||||
@@ -1024,22 +1077,31 @@ barplot.sir <- function(height,
|
|||||||
main = deparse(substitute(height)),
|
main = deparse(substitute(height)),
|
||||||
xlab = translate_AMR("Antimicrobial Interpretation", language = language),
|
xlab = translate_AMR("Antimicrobial Interpretation", language = language),
|
||||||
ylab = translate_AMR("Frequency", language = language),
|
ylab = translate_AMR("Frequency", language = language),
|
||||||
colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"),
|
colours_SIR = c(
|
||||||
|
S = "#3CAEA3",
|
||||||
|
SDD = "#8FD6C4",
|
||||||
|
I = "#F6D55C",
|
||||||
|
R = "#ED553B"
|
||||||
|
),
|
||||||
language = get_AMR_locale(),
|
language = get_AMR_locale(),
|
||||||
expand = TRUE,
|
expand = TRUE,
|
||||||
...) {
|
...) {
|
||||||
meet_criteria(xlab, allow_class = "character", has_length = 1)
|
meet_criteria(xlab, allow_class = "character", has_length = 1)
|
||||||
meet_criteria(main, allow_class = "character", has_length = 1, allow_NULL = TRUE)
|
meet_criteria(main, allow_class = "character", has_length = 1, allow_NULL = TRUE)
|
||||||
meet_criteria(ylab, allow_class = "character", has_length = 1)
|
meet_criteria(ylab, allow_class = "character", has_length = 1)
|
||||||
meet_criteria(colours_SIR, allow_class = "character", has_length = c(1, 3))
|
meet_criteria(colours_SIR, allow_class = "character", has_length = c(1, 3, 4))
|
||||||
language <- validate_language(language)
|
language <- validate_language(language)
|
||||||
meet_criteria(expand, allow_class = "logical", has_length = 1)
|
meet_criteria(expand, allow_class = "logical", has_length = 1)
|
||||||
|
|
||||||
if (length(colours_SIR) == 1) {
|
if (length(colours_SIR) == 1) {
|
||||||
colours_SIR <- rep(colours_SIR, 3)
|
colours_SIR <- rep(colours_SIR, 4)
|
||||||
|
} else if (length(colours_SIR) == 3) {
|
||||||
|
colours_SIR <- c(colours_SIR[1], colours_SIR[1], colours_SIR[2], colours_SIR[3])
|
||||||
}
|
}
|
||||||
|
colours_SIR <- unname(colours_SIR)
|
||||||
|
|
||||||
# add SDD and N to colours
|
# add SDD and N to colours
|
||||||
colours_SIR <- c(colours_SIR[1:2], colours_SIR[2], colours_SIR[3], "#888888")
|
colours_SIR <- c(colours_SIR, "grey30")
|
||||||
main <- gsub(" +", " ", paste0(main, collapse = " "))
|
main <- gsub(" +", " ", paste0(main, collapse = " "))
|
||||||
|
|
||||||
x <- table(height)
|
x <- table(height)
|
||||||
@@ -1065,14 +1127,19 @@ autoplot.sir <- function(object,
|
|||||||
title = deparse(substitute(object)),
|
title = deparse(substitute(object)),
|
||||||
xlab = translate_AMR("Antimicrobial Interpretation", language = language),
|
xlab = translate_AMR("Antimicrobial Interpretation", language = language),
|
||||||
ylab = translate_AMR("Frequency", language = language),
|
ylab = translate_AMR("Frequency", language = language),
|
||||||
colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"),
|
colours_SIR = c(
|
||||||
|
S = "#3CAEA3",
|
||||||
|
SDD = "#8FD6C4",
|
||||||
|
I = "#F6D55C",
|
||||||
|
R = "#ED553B"
|
||||||
|
),
|
||||||
language = get_AMR_locale(),
|
language = get_AMR_locale(),
|
||||||
...) {
|
...) {
|
||||||
stop_ifnot_installed("ggplot2")
|
stop_ifnot_installed("ggplot2")
|
||||||
meet_criteria(title, allow_class = "character", allow_NULL = TRUE)
|
meet_criteria(title, allow_class = "character", allow_NULL = TRUE)
|
||||||
meet_criteria(ylab, allow_class = "character", has_length = 1)
|
meet_criteria(ylab, allow_class = "character", has_length = 1)
|
||||||
meet_criteria(xlab, allow_class = "character", has_length = 1)
|
meet_criteria(xlab, allow_class = "character", has_length = 1)
|
||||||
meet_criteria(colours_SIR, allow_class = "character", has_length = c(1, 3))
|
meet_criteria(colours_SIR, allow_class = "character", has_length = c(1, 3, 4))
|
||||||
|
|
||||||
if ("main" %in% names(list(...))) {
|
if ("main" %in% names(list(...))) {
|
||||||
title <- list(...)$main
|
title <- list(...)$main
|
||||||
@@ -1082,8 +1149,11 @@ autoplot.sir <- function(object,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (length(colours_SIR) == 1) {
|
if (length(colours_SIR) == 1) {
|
||||||
colours_SIR <- rep(colours_SIR, 3)
|
colours_SIR <- rep(colours_SIR, 4)
|
||||||
|
} else if (length(colours_SIR) == 3) {
|
||||||
|
colours_SIR <- c(colours_SIR[1], colours_SIR[1], colours_SIR[2], colours_SIR[3])
|
||||||
}
|
}
|
||||||
|
colours_SIR <- unname(colours_SIR)
|
||||||
|
|
||||||
df <- as.data.frame(table(object), stringsAsFactors = TRUE)
|
df <- as.data.frame(table(object), stringsAsFactors = TRUE)
|
||||||
colnames(df) <- c("x", "n")
|
colnames(df) <- c("x", "n")
|
||||||
@@ -1095,9 +1165,9 @@ autoplot.sir <- function(object,
|
|||||||
values = c(
|
values = c(
|
||||||
"S" = colours_SIR[1],
|
"S" = colours_SIR[1],
|
||||||
"SDD" = colours_SIR[2],
|
"SDD" = colours_SIR[2],
|
||||||
"I" = colours_SIR[2],
|
"I" = colours_SIR[3],
|
||||||
"R" = colours_SIR[3],
|
"R" = colours_SIR[4],
|
||||||
"NI" = "#888888"
|
"NI" = "grey30"
|
||||||
),
|
),
|
||||||
limits = force
|
limits = force
|
||||||
) +
|
) +
|
||||||
@@ -1182,6 +1252,13 @@ plot_colours_subtitle_guideline <- function(x, mo, ab, guideline, colours_SIR, f
|
|||||||
|
|
||||||
guideline <- get_guideline(guideline, AMR::clinical_breakpoints)
|
guideline <- get_guideline(guideline, AMR::clinical_breakpoints)
|
||||||
|
|
||||||
|
if (length(colours_SIR) == 1) {
|
||||||
|
colours_SIR <- rep(colours_SIR, 4)
|
||||||
|
} else if (length(colours_SIR) == 3) {
|
||||||
|
colours_SIR <- c(colours_SIR[1], colours_SIR[1], colours_SIR[2], colours_SIR[3])
|
||||||
|
}
|
||||||
|
colours_SIR <- unname(colours_SIR)
|
||||||
|
|
||||||
# store previous interpretations to backup
|
# store previous interpretations to backup
|
||||||
sir_history <- AMR_env$sir_interpretation_history
|
sir_history <- AMR_env$sir_interpretation_history
|
||||||
# and clear previous interpretations
|
# and clear previous interpretations
|
||||||
@@ -1223,9 +1300,9 @@ plot_colours_subtitle_guideline <- function(x, mo, ab, guideline, colours_SIR, f
|
|||||||
cols[is.na(sir)] <- "#BEBEBE"
|
cols[is.na(sir)] <- "#BEBEBE"
|
||||||
cols[sir == "S"] <- colours_SIR[1]
|
cols[sir == "S"] <- colours_SIR[1]
|
||||||
cols[sir == "SDD"] <- colours_SIR[2]
|
cols[sir == "SDD"] <- colours_SIR[2]
|
||||||
cols[sir == "I"] <- colours_SIR[2]
|
cols[sir == "I"] <- colours_SIR[3]
|
||||||
cols[sir == "R"] <- colours_SIR[3]
|
cols[sir == "R"] <- colours_SIR[4]
|
||||||
cols[sir == "NI"] <- "#888888"
|
cols[sir == "NI"] <- "grey30"
|
||||||
sub <- bquote(.(abname) ~ "-" ~ italic(.(moname)) ~ .(guideline_txt))
|
sub <- bquote(.(abname) ~ "-" ~ italic(.(moname)) ~ .(guideline_txt))
|
||||||
} else {
|
} else {
|
||||||
cols <- "#BEBEBE"
|
cols <- "#BEBEBE"
|
||||||
@@ -1284,10 +1361,15 @@ scale_y_percent <- function(breaks = function(x) seq(0, max(x, na.rm = TRUE), 0.
|
|||||||
#' @export
|
#' @export
|
||||||
scale_sir_colours <- function(...,
|
scale_sir_colours <- function(...,
|
||||||
aesthetics,
|
aesthetics,
|
||||||
colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B")) {
|
colours_SIR = c(
|
||||||
|
S = "#3CAEA3",
|
||||||
|
SDD = "#8FD6C4",
|
||||||
|
I = "#F6D55C",
|
||||||
|
R = "#ED553B"
|
||||||
|
)) {
|
||||||
stop_ifnot_installed("ggplot2")
|
stop_ifnot_installed("ggplot2")
|
||||||
meet_criteria(aesthetics, allow_class = "character", is_in = c("alpha", "colour", "color", "fill", "linetype", "shape", "size"))
|
meet_criteria(aesthetics, allow_class = "character", is_in = c("alpha", "colour", "color", "fill", "linetype", "shape", "size"))
|
||||||
meet_criteria(colours_SIR, allow_class = "character", has_length = c(1, 3))
|
meet_criteria(colours_SIR, allow_class = "character", has_length = c(1, 3, 4))
|
||||||
|
|
||||||
if ("fill" %in% aesthetics && message_not_thrown_before("scale_sir_colours", "fill", entire_session = TRUE)) {
|
if ("fill" %in% aesthetics && message_not_thrown_before("scale_sir_colours", "fill", entire_session = TRUE)) {
|
||||||
warning_("Using `scale_sir_colours()` for the `fill` aesthetic has been superseded by `scale_fill_sir()`, please use that instead. This warning will be shown once per session.")
|
warning_("Using `scale_sir_colours()` for the `fill` aesthetic has been superseded by `scale_fill_sir()`, please use that instead. This warning will be shown once per session.")
|
||||||
@@ -1296,67 +1378,52 @@ scale_sir_colours <- function(...,
|
|||||||
warning_("Using `scale_sir_colours()` for the `colour` aesthetic has been superseded by `scale_colour_sir()`, please use that instead. This warning will be shown once per session.")
|
warning_("Using `scale_sir_colours()` for the `colour` aesthetic has been superseded by `scale_colour_sir()`, please use that instead. This warning will be shown once per session.")
|
||||||
}
|
}
|
||||||
|
|
||||||
if (length(colours_SIR) == 1) {
|
|
||||||
colours_SIR <- rep(colours_SIR, 3)
|
|
||||||
}
|
|
||||||
# behaviour until AMR pkg v1.5.0 and also when coming from ggplot_sir()
|
|
||||||
if ("colours" %in% names(list(...))) {
|
if ("colours" %in% names(list(...))) {
|
||||||
original_cols <- c(
|
colours_SIR <- list(...)$colours
|
||||||
S = colours_SIR[1],
|
}
|
||||||
SI = colours_SIR[1],
|
|
||||||
I = colours_SIR[2],
|
if (length(colours_SIR) == 1) {
|
||||||
IR = colours_SIR[3],
|
colours_SIR <- rep(colours_SIR, 4)
|
||||||
R = colours_SIR[3]
|
} else if (length(colours_SIR) == 3) {
|
||||||
)
|
colours_SIR <- c(colours_SIR[1], colours_SIR[1], colours_SIR[2], colours_SIR[3])
|
||||||
colours <- replace(original_cols, names(list(...)$colours), list(...)$colours)
|
}
|
||||||
|
|
||||||
|
# behaviour when coming from ggplot_sir()
|
||||||
|
if ("colours" %in% names(list(...))) {
|
||||||
# limits = force is needed in ggplot2 3.3.4 and 3.3.5, see here;
|
# limits = force is needed in ggplot2 3.3.4 and 3.3.5, see here;
|
||||||
# https://github.com/tidyverse/ggplot2/issues/4511#issuecomment-866185530
|
# https://github.com/tidyverse/ggplot2/issues/4511#issuecomment-866185530
|
||||||
return(ggplot2::scale_fill_manual(values = colours, limits = force, aesthetics = aesthetics))
|
return(ggplot2::scale_fill_manual(values = colours_SIR, limits = force, aesthetics = aesthetics))
|
||||||
}
|
}
|
||||||
if (identical(unlist(list(...)), FALSE)) {
|
if (identical(unlist(list(...)), FALSE)) {
|
||||||
return(invisible())
|
return(invisible())
|
||||||
}
|
}
|
||||||
|
|
||||||
names_susceptible <- c(
|
colours_SIR <- unname(colours_SIR)
|
||||||
"S", "SI", "IS", "S+I", "I+S", "susceptible", "Susceptible",
|
|
||||||
unique(TRANSLATIONS[which(TRANSLATIONS$pattern == "Susceptible"),
|
names_susceptible <- c("S", "SI", "IS", "S+I", "I+S", "susceptible", "Susceptible")
|
||||||
"replacement",
|
names_susceptible_dose_dep <- c("SDD", "susceptible dose-dependent", "Susceptible dose-dependent")
|
||||||
drop = TRUE
|
|
||||||
])
|
|
||||||
)
|
|
||||||
names_incr_exposure <- c(
|
names_incr_exposure <- c(
|
||||||
"I", "intermediate", "increased exposure", "incr. exposure",
|
"I", "intermediate", "increased exposure", "incr. exposure",
|
||||||
"Increased exposure", "Incr. exposure", "Susceptible, incr. exp.",
|
"Increased exposure", "Incr. exposure", "Susceptible, incr. exp."
|
||||||
unique(TRANSLATIONS[which(TRANSLATIONS$pattern == "Intermediate"),
|
|
||||||
"replacement",
|
|
||||||
drop = TRUE
|
|
||||||
]),
|
|
||||||
unique(TRANSLATIONS[which(TRANSLATIONS$pattern == "Susceptible, incr. exp."),
|
|
||||||
"replacement",
|
|
||||||
drop = TRUE
|
|
||||||
])
|
|
||||||
)
|
|
||||||
names_resistant <- c(
|
|
||||||
"R", "IR", "RI", "R+I", "I+R", "resistant", "Resistant",
|
|
||||||
unique(TRANSLATIONS[which(TRANSLATIONS$pattern == "Resistant"),
|
|
||||||
"replacement",
|
|
||||||
drop = TRUE
|
|
||||||
])
|
|
||||||
)
|
)
|
||||||
|
names_resistant <- c("R", "IR", "RI", "R+I", "I+R", "resistant", "Resistant")
|
||||||
|
|
||||||
susceptible <- rep(colours_SIR[1], length(names_susceptible))
|
susceptible <- rep(colours_SIR[1], length(names_susceptible))
|
||||||
names(susceptible) <- names_susceptible
|
names(susceptible) <- names_susceptible
|
||||||
incr_exposure <- rep(colours_SIR[2], length(names_incr_exposure))
|
susceptible_dose_dep <- rep(colours_SIR[2], length(names_susceptible_dose_dep))
|
||||||
|
names(susceptible_dose_dep) <- names_susceptible_dose_dep
|
||||||
|
incr_exposure <- rep(colours_SIR[3], length(names_incr_exposure))
|
||||||
names(incr_exposure) <- names_incr_exposure
|
names(incr_exposure) <- names_incr_exposure
|
||||||
resistant <- rep(colours_SIR[3], length(names_resistant))
|
resistant <- rep(colours_SIR[4], length(names_resistant))
|
||||||
names(resistant) <- names_resistant
|
names(resistant) <- names_resistant
|
||||||
|
|
||||||
original_cols <- c(susceptible, incr_exposure, resistant)
|
original_cols <- c(susceptible, susceptible_dose_dep, incr_exposure, resistant)
|
||||||
dots <- c(...)
|
dots <- c(...)
|
||||||
# replace S, I, R as colours: scale_sir_colours(mydatavalue = "S")
|
# replace S, SDD, I, R as colours: scale_sir_colours(mydatavalue = "S")
|
||||||
dots[dots == "S"] <- colours_SIR[1]
|
dots[dots == "S"] <- colours_SIR[1]
|
||||||
dots[dots == "I"] <- colours_SIR[2]
|
dots[dots == "SDD"] <- colours_SIR[2]
|
||||||
dots[dots == "R"] <- colours_SIR[3]
|
dots[dots == "I"] <- colours_SIR[3]
|
||||||
|
dots[dots == "R"] <- colours_SIR[4]
|
||||||
cols <- replace(original_cols, names(dots), dots)
|
cols <- replace(original_cols, names(dots), dots)
|
||||||
# limits = force is needed in ggplot2 3.3.4 and 3.3.5, see here;
|
# limits = force is needed in ggplot2 3.3.4 and 3.3.5, see here;
|
||||||
# https://github.com/tidyverse/ggplot2/issues/4511#issuecomment-866185530
|
# https://github.com/tidyverse/ggplot2/issues/4511#issuecomment-866185530
|
||||||
|
@@ -237,7 +237,7 @@ resistance <- function(...,
|
|||||||
only_all_tested = only_all_tested,
|
only_all_tested = only_all_tested,
|
||||||
only_count = FALSE
|
only_count = FALSE
|
||||||
),
|
),
|
||||||
error = function(e) stop_(gsub("in sir_calc(): ", "", e$message, fixed = TRUE), call = -5)
|
error = function(e) stop_(gsub("in sir_calc(): ", "", conditionMessage(e), fixed = TRUE), call = -5)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -255,7 +255,7 @@ susceptibility <- function(...,
|
|||||||
only_all_tested = only_all_tested,
|
only_all_tested = only_all_tested,
|
||||||
only_count = FALSE
|
only_count = FALSE
|
||||||
),
|
),
|
||||||
error = function(e) stop_(gsub("in sir_calc(): ", "", e$message, fixed = TRUE), call = -5)
|
error = function(e) stop_(gsub("in sir_calc(): ", "", conditionMessage(e), fixed = TRUE), call = -5)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -283,7 +283,7 @@ sir_confidence_interval <- function(...,
|
|||||||
only_all_tested = only_all_tested,
|
only_all_tested = only_all_tested,
|
||||||
only_count = TRUE
|
only_count = TRUE
|
||||||
),
|
),
|
||||||
error = function(e) stop_(gsub("in sir_calc(): ", "", e$message, fixed = TRUE), call = -5)
|
error = function(e) stop_(gsub("in sir_calc(): ", "", conditionMessage(e), fixed = TRUE), call = -5)
|
||||||
)
|
)
|
||||||
n <- tryCatch(
|
n <- tryCatch(
|
||||||
sir_calc(...,
|
sir_calc(...,
|
||||||
@@ -291,7 +291,7 @@ sir_confidence_interval <- function(...,
|
|||||||
only_all_tested = only_all_tested,
|
only_all_tested = only_all_tested,
|
||||||
only_count = TRUE
|
only_count = TRUE
|
||||||
),
|
),
|
||||||
error = function(e) stop_(gsub("in sir_calc(): ", "", e$message, fixed = TRUE), call = -5)
|
error = function(e) stop_(gsub("in sir_calc(): ", "", conditionMessage(e), fixed = TRUE), call = -5)
|
||||||
)
|
)
|
||||||
|
|
||||||
if (x == 0) {
|
if (x == 0) {
|
||||||
@@ -347,7 +347,7 @@ proportion_R <- function(...,
|
|||||||
only_all_tested = only_all_tested,
|
only_all_tested = only_all_tested,
|
||||||
only_count = FALSE
|
only_count = FALSE
|
||||||
),
|
),
|
||||||
error = function(e) stop_(gsub("in sir_calc(): ", "", e$message, fixed = TRUE), call = -5)
|
error = function(e) stop_(gsub("in sir_calc(): ", "", conditionMessage(e), fixed = TRUE), call = -5)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -365,7 +365,7 @@ proportion_IR <- function(...,
|
|||||||
only_all_tested = only_all_tested,
|
only_all_tested = only_all_tested,
|
||||||
only_count = FALSE
|
only_count = FALSE
|
||||||
),
|
),
|
||||||
error = function(e) stop_(gsub("in sir_calc(): ", "", e$message, fixed = TRUE), call = -5)
|
error = function(e) stop_(gsub("in sir_calc(): ", "", conditionMessage(e), fixed = TRUE), call = -5)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -383,7 +383,7 @@ proportion_I <- function(...,
|
|||||||
only_all_tested = only_all_tested,
|
only_all_tested = only_all_tested,
|
||||||
only_count = FALSE
|
only_count = FALSE
|
||||||
),
|
),
|
||||||
error = function(e) stop_(gsub("in sir_calc(): ", "", e$message, fixed = TRUE), call = -5)
|
error = function(e) stop_(gsub("in sir_calc(): ", "", conditionMessage(e), fixed = TRUE), call = -5)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -401,7 +401,7 @@ proportion_SI <- function(...,
|
|||||||
only_all_tested = only_all_tested,
|
only_all_tested = only_all_tested,
|
||||||
only_count = FALSE
|
only_count = FALSE
|
||||||
),
|
),
|
||||||
error = function(e) stop_(gsub("in sir_calc(): ", "", e$message, fixed = TRUE), call = -5)
|
error = function(e) stop_(gsub("in sir_calc(): ", "", conditionMessage(e), fixed = TRUE), call = -5)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -419,7 +419,7 @@ proportion_S <- function(...,
|
|||||||
only_all_tested = only_all_tested,
|
only_all_tested = only_all_tested,
|
||||||
only_count = FALSE
|
only_count = FALSE
|
||||||
),
|
),
|
||||||
error = function(e) stop_(gsub("in sir_calc(): ", "", e$message, fixed = TRUE), call = -5)
|
error = function(e) stop_(gsub("in sir_calc(): ", "", conditionMessage(e), fixed = TRUE), call = -5)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -443,6 +443,6 @@ proportion_df <- function(data,
|
|||||||
combine_SI = combine_SI,
|
combine_SI = combine_SI,
|
||||||
confidence_level = confidence_level
|
confidence_level = confidence_level
|
||||||
),
|
),
|
||||||
error = function(e) stop_(gsub("in sir_calc_df(): ", "", e$message, fixed = TRUE), call = -5)
|
error = function(e) stop_(gsub("in sir_calc_df(): ", "", conditionMessage(e), fixed = TRUE), call = -5)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
33
R/sir.R
33
R/sir.R
@@ -69,7 +69,9 @@
|
|||||||
#' @param reference_data A [data.frame] to be used for interpretation, which defaults to the [clinical_breakpoints] data set. Changing this argument allows for using own interpretation guidelines. This argument must contain a data set that is equal in structure to the [clinical_breakpoints] data set (same column names and column types). Please note that the `guideline` argument will be ignored when `reference_data` is manually set.
|
#' @param reference_data A [data.frame] to be used for interpretation, which defaults to the [clinical_breakpoints] data set. Changing this argument allows for using own interpretation guidelines. This argument must contain a data set that is equal in structure to the [clinical_breakpoints] data set (same column names and column types). Please note that the `guideline` argument will be ignored when `reference_data` is manually set.
|
||||||
#' @param threshold Maximum fraction of invalid antimicrobial interpretations of `x`, see *Examples*.
|
#' @param threshold Maximum fraction of invalid antimicrobial interpretations of `x`, see *Examples*.
|
||||||
#' @param conserve_capped_values Deprecated, use `capped_mic_handling` instead.
|
#' @param conserve_capped_values Deprecated, use `capped_mic_handling` instead.
|
||||||
#' @param ... For using on a [data.frame]: names of columns to apply [as.sir()] on (supports tidy selection such as `column1:column4`). Otherwise: arguments passed on to methods.
|
#' @param ... For using on a [data.frame]: selection of columns to apply `as.sir()` to. Supports [tidyselect language][tidyselect::starts_with()] such as `where(is.mic)`, `starts_with(...)`, or `column1:column4`, and can thus also be [antimicrobial selectors][amr_selector()] such as `as.sir(df, penicillins())`.
|
||||||
|
#'
|
||||||
|
#' Otherwise: arguments passed on to methods.
|
||||||
#' @details
|
#' @details
|
||||||
#' *Note: The clinical breakpoints in this package were validated through, and imported from, [WHONET](https://whonet.org). The public use of this `AMR` package has been endorsed by both CLSI and EUCAST. See [clinical_breakpoints] for more information.*
|
#' *Note: The clinical breakpoints in this package were validated through, and imported from, [WHONET](https://whonet.org). The public use of this `AMR` package has been endorsed by both CLSI and EUCAST. See [clinical_breakpoints] for more information.*
|
||||||
#'
|
#'
|
||||||
@@ -225,9 +227,12 @@
|
|||||||
#' df_wide %>% mutate_if(is.mic, as.sir)
|
#' df_wide %>% mutate_if(is.mic, as.sir)
|
||||||
#' df_wide %>% mutate_if(function(x) is.mic(x) | is.disk(x), as.sir)
|
#' df_wide %>% mutate_if(function(x) is.mic(x) | is.disk(x), as.sir)
|
||||||
#' df_wide %>% mutate(across(where(is.mic), as.sir))
|
#' df_wide %>% mutate(across(where(is.mic), as.sir))
|
||||||
|
#'
|
||||||
#' df_wide %>% mutate_at(vars(amoxicillin:tobra), as.sir)
|
#' df_wide %>% mutate_at(vars(amoxicillin:tobra), as.sir)
|
||||||
#' df_wide %>% mutate(across(amoxicillin:tobra, as.sir))
|
#' df_wide %>% mutate(across(amoxicillin:tobra, as.sir))
|
||||||
#'
|
#'
|
||||||
|
#' df_wide %>% mutate(across(aminopenicillins(), as.sir))
|
||||||
|
#'
|
||||||
#' # approaches that all work with additional arguments:
|
#' # approaches that all work with additional arguments:
|
||||||
#' df_long %>%
|
#' df_long %>%
|
||||||
#' # given a certain data type, e.g. MIC values
|
#' # given a certain data type, e.g. MIC values
|
||||||
@@ -722,8 +727,17 @@ as.sir.data.frame <- function(x,
|
|||||||
meet_criteria(info, allow_class = "logical", has_length = 1)
|
meet_criteria(info, allow_class = "logical", has_length = 1)
|
||||||
meet_criteria(parallel, allow_class = "logical", has_length = 1)
|
meet_criteria(parallel, allow_class = "logical", has_length = 1)
|
||||||
meet_criteria(max_cores, allow_class = c("numeric", "integer"), has_length = 1)
|
meet_criteria(max_cores, allow_class = c("numeric", "integer"), has_length = 1)
|
||||||
|
|
||||||
x.bak <- x
|
x.bak <- x
|
||||||
|
|
||||||
|
if (tryCatch(length(list(...)) > 0, error = function(e) TRUE)) {
|
||||||
|
sel <- colnames(pm_select(x, ...))
|
||||||
|
} else {
|
||||||
|
sel <- colnames(x)
|
||||||
|
}
|
||||||
|
if (!is.null(col_mo)) {
|
||||||
|
sel <- sel[sel != col_mo]
|
||||||
|
}
|
||||||
|
|
||||||
for (i in seq_len(ncol(x))) {
|
for (i in seq_len(ncol(x))) {
|
||||||
# don't keep factors, overwriting them is hard
|
# don't keep factors, overwriting them is hard
|
||||||
if (is.factor(x[, i, drop = TRUE])) {
|
if (is.factor(x[, i, drop = TRUE])) {
|
||||||
@@ -803,15 +817,6 @@ as.sir.data.frame <- function(x,
|
|||||||
}
|
}
|
||||||
|
|
||||||
i <- 0
|
i <- 0
|
||||||
if (tryCatch(length(list(...)) > 0, error = function(e) TRUE)) {
|
|
||||||
sel <- colnames(pm_select(x, ...))
|
|
||||||
} else {
|
|
||||||
sel <- colnames(x)
|
|
||||||
}
|
|
||||||
if (!is.null(col_mo)) {
|
|
||||||
sel <- sel[sel != col_mo]
|
|
||||||
}
|
|
||||||
|
|
||||||
ab_cols <- colnames(x)[vapply(FUN.VALUE = logical(1), x, function(y) {
|
ab_cols <- colnames(x)[vapply(FUN.VALUE = logical(1), x, function(y) {
|
||||||
i <<- i + 1
|
i <<- i + 1
|
||||||
check <- is.mic(y) | is.disk(y)
|
check <- is.mic(y) | is.disk(y)
|
||||||
@@ -863,7 +868,7 @@ as.sir.data.frame <- function(x,
|
|||||||
cl <- tryCatch(parallel::makeCluster(n_cores, type = "PSOCK"),
|
cl <- tryCatch(parallel::makeCluster(n_cores, type = "PSOCK"),
|
||||||
error = function(e) {
|
error = function(e) {
|
||||||
if (isTRUE(info)) {
|
if (isTRUE(info)) {
|
||||||
message_("Could not create parallel cluster, using single-core computation. Error message: ", e$message, add_fn = font_red)
|
message_("Could not create parallel cluster, using single-core computation. Error message: ", conditionMessage(e), add_fn = font_red)
|
||||||
}
|
}
|
||||||
return(NULL)
|
return(NULL)
|
||||||
}
|
}
|
||||||
@@ -1904,11 +1909,11 @@ pillar_shaft.sir <- function(x, ...) {
|
|||||||
# colours will anyway not work when has_colour() == FALSE,
|
# colours will anyway not work when has_colour() == FALSE,
|
||||||
# but then the indentation should also not be applied
|
# but then the indentation should also not be applied
|
||||||
out[is.na(x)] <- font_grey(" NA")
|
out[is.na(x)] <- font_grey(" NA")
|
||||||
out[x == "NI"] <- font_grey_bg(font_black(" NI "))
|
|
||||||
out[x == "S"] <- font_green_bg(" S ")
|
out[x == "S"] <- font_green_bg(" S ")
|
||||||
|
out[x == "SDD"] <- font_green_lighter_bg(" SDD ")
|
||||||
out[x == "I"] <- font_orange_bg(" I ")
|
out[x == "I"] <- font_orange_bg(" I ")
|
||||||
out[x == "SDD"] <- font_orange_bg(" SDD ")
|
|
||||||
out[x == "R"] <- font_rose_bg(" R ")
|
out[x == "R"] <- font_rose_bg(" R ")
|
||||||
|
out[x == "NI"] <- font_grey_bg(font_black(" NI "))
|
||||||
}
|
}
|
||||||
create_pillar_column(out, align = "left", width = 5)
|
create_pillar_column(out, align = "left", width = 5)
|
||||||
}
|
}
|
||||||
|
19
R/sir_calc.R
19
R/sir_calc.R
@@ -244,7 +244,7 @@ sir_calc_df <- function(type, # "proportion", "count" or "both"
|
|||||||
translate_ab <- get_translate_ab(translate_ab)
|
translate_ab <- get_translate_ab(translate_ab)
|
||||||
|
|
||||||
data.bak <- data
|
data.bak <- data
|
||||||
# select only groups and antimicrobials
|
# select only groups and antibiotics
|
||||||
if (is_null_or_grouped_tbl(data)) {
|
if (is_null_or_grouped_tbl(data)) {
|
||||||
data_has_groups <- TRUE
|
data_has_groups <- TRUE
|
||||||
groups <- get_group_names(data)
|
groups <- get_group_names(data)
|
||||||
@@ -255,15 +255,14 @@ sir_calc_df <- function(type, # "proportion", "count" or "both"
|
|||||||
}
|
}
|
||||||
|
|
||||||
data <- as.data.frame(data, stringsAsFactors = FALSE)
|
data <- as.data.frame(data, stringsAsFactors = FALSE)
|
||||||
if (isTRUE(combine_SI)) {
|
|
||||||
for (i in seq_len(ncol(data))) {
|
for (i in seq_len(ncol(data))) {
|
||||||
if (is.sir(data[, i, drop = TRUE])) {
|
data[, i] <- as.character(as.sir(data[, i, drop = TRUE]))
|
||||||
data[, i] <- as.character(data[, i, drop = TRUE])
|
if (isTRUE(combine_SI)) {
|
||||||
if ("SDD" %in% data[, i, drop = TRUE] && message_not_thrown_before("sir_calc_df", combine_SI, entire_session = TRUE)) {
|
if ("SDD" %in% data[, i, drop = TRUE] && message_not_thrown_before("sir_calc_df", combine_SI, entire_session = TRUE)) {
|
||||||
message_("Note that `sir_calc_df()` will also count dose-dependent susceptibility, 'SDD', as 'SI' when `combine_SI = TRUE`. This note will be shown once for this session.", as_note = FALSE)
|
message_("Note that `sir_calc_df()` will also count dose-dependent susceptibility, 'SDD', as 'SI' when `combine_SI = TRUE`. This note will be shown once for this session.", as_note = FALSE)
|
||||||
}
|
|
||||||
data[, i] <- gsub("(I|S|SDD)", "SI", data[, i, drop = TRUE])
|
|
||||||
}
|
}
|
||||||
|
data[, i] <- gsub("(I|S|SDD)", "SI", data[, i, drop = TRUE])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -364,7 +363,7 @@ sir_calc_df <- function(type, # "proportion", "count" or "both"
|
|||||||
} else {
|
} else {
|
||||||
# don't use as.sir() here, as it would add the class 'sir' and we would like
|
# don't use as.sir() here, as it would add the class 'sir' and we would like
|
||||||
# the same data structure as output, regardless of input
|
# the same data structure as output, regardless of input
|
||||||
if (out$value[out$interpretation == "SDD"] > 0) {
|
if (any(out$value[out$interpretation == "SDD"] > 0, na.rm = TRUE)) {
|
||||||
out$interpretation <- factor(out$interpretation, levels = c("S", "SDD", "I", "R"), ordered = TRUE)
|
out$interpretation <- factor(out$interpretation, levels = c("S", "SDD", "I", "R"), ordered = TRUE)
|
||||||
} else {
|
} else {
|
||||||
out$interpretation <- factor(out$interpretation, levels = c("S", "I", "R"), ordered = TRUE)
|
out$interpretation <- factor(out$interpretation, levels = c("S", "I", "R"), ordered = TRUE)
|
||||||
|
@@ -47,6 +47,6 @@ sir_df <- function(data,
|
|||||||
combine_SI = combine_SI,
|
combine_SI = combine_SI,
|
||||||
confidence_level = confidence_level
|
confidence_level = confidence_level
|
||||||
),
|
),
|
||||||
error = function(e) stop_(gsub("in sir_calc_df(): ", "", e$message, fixed = TRUE), call = -5)
|
error = function(e) stop_(gsub("in sir_calc_df(): ", "", conditionMessage(e), fixed = TRUE), call = -5)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
BIN
R/sysdata.rda
BIN
R/sysdata.rda
Binary file not shown.
@@ -30,7 +30,6 @@
|
|||||||
# These are all S3 implementations for the vctrs package,
|
# These are all S3 implementations for the vctrs package,
|
||||||
# that is used internally by tidyverse packages such as dplyr.
|
# that is used internally by tidyverse packages such as dplyr.
|
||||||
# They are to convert AMR-specific classes to bare characters and integers.
|
# They are to convert AMR-specific classes to bare characters and integers.
|
||||||
# All of them will be exported using s3_register() in R/zzz.R when loading the package.
|
|
||||||
|
|
||||||
# see https://github.com/tidyverse/dplyr/issues/5955 why this is required
|
# see https://github.com/tidyverse/dplyr/issues/5955 why this is required
|
||||||
|
|
||||||
|
4
R/zzz.R
4
R/zzz.R
@@ -127,7 +127,7 @@ AMR_env$cross_icon <- if (isTRUE(base::l10n_info()$`UTF-8`)) "\u00d7" else "x"
|
|||||||
suppressWarnings(suppressMessages(add_custom_antimicrobials(x)))
|
suppressWarnings(suppressMessages(add_custom_antimicrobials(x)))
|
||||||
packageStartupMessage("OK.")
|
packageStartupMessage("OK.")
|
||||||
},
|
},
|
||||||
error = function(e) packageStartupMessage("Failed: ", e$message)
|
error = function(e) packageStartupMessage("Failed: ", conditionMessage(e))
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -143,7 +143,7 @@ AMR_env$cross_icon <- if (isTRUE(base::l10n_info()$`UTF-8`)) "\u00d7" else "x"
|
|||||||
suppressWarnings(suppressMessages(add_custom_microorganisms(x)))
|
suppressWarnings(suppressMessages(add_custom_microorganisms(x)))
|
||||||
packageStartupMessage("OK.")
|
packageStartupMessage("OK.")
|
||||||
},
|
},
|
||||||
error = function(e) packageStartupMessage("Failed: ", e$message)
|
error = function(e) packageStartupMessage("Failed: ", conditionMessage(e))
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -288,7 +288,7 @@ for (page in LETTERS) {
|
|||||||
url <- paste0("https://lpsn.dsmz.de/genus?page=", page)
|
url <- paste0("https://lpsn.dsmz.de/genus?page=", page)
|
||||||
x <- tryCatch(read_html(url),
|
x <- tryCatch(read_html(url),
|
||||||
error = function(e) {
|
error = function(e) {
|
||||||
message("Waiting 10 seconds because of error: ", e$message)
|
message("Waiting 10 seconds because of error: ", conditionMessage(e))
|
||||||
Sys.sleep(10)
|
Sys.sleep(10)
|
||||||
read_html(url)
|
read_html(url)
|
||||||
})
|
})
|
||||||
|
@@ -108,3 +108,18 @@ writeLines(contents, "R/aa_helper_pm_functions.R")
|
|||||||
|
|
||||||
# note: pm_left_join() will be overwritten by aaa_helper_functions.R, which contains a faster implementation
|
# note: pm_left_join() will be overwritten by aaa_helper_functions.R, which contains a faster implementation
|
||||||
# replace `res <- as.data.frame(res)` with `res <- as.data.frame(res, stringsAsFactors = FALSE)`
|
# replace `res <- as.data.frame(res)` with `res <- as.data.frame(res, stringsAsFactors = FALSE)`
|
||||||
|
|
||||||
|
# after running, pm_select must be altered. The line:
|
||||||
|
# col_pos <- pm_select_positions(.data, ..., .group_pos = TRUE)
|
||||||
|
# ... must be replaced with this to support tidyselect functionality such as `starts_with()`:
|
||||||
|
# col_pos <- tryCatch(pm_select_positions(.data, ..., .group_pos = TRUE), error = function(e) NULL)
|
||||||
|
# if (is.null(col_pos)) {
|
||||||
|
# # try with tidyverse
|
||||||
|
# select_dplyr <- import_fn("select", "dplyr", error_on_fail = FALSE)
|
||||||
|
# if (!is.null(select_dplyr)) {
|
||||||
|
# col_pos <- which(colnames(.data) %in% colnames(select_dplyr(.data, ...)))
|
||||||
|
# } else {
|
||||||
|
# # this will throw an error as it did, but dplyr is not available, so no other option
|
||||||
|
# col_pos <- pm_select_positions(.data, ..., .group_pos = TRUE)
|
||||||
|
# }
|
||||||
|
# }
|
||||||
|
@@ -283,7 +283,7 @@ for (i in 2:length(sheets_to_analyse)) {
|
|||||||
guideline_name = guideline_name
|
guideline_name = guideline_name
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
error = function(e) message(e$message)
|
error = function(e) message(conditionMessage(e))
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Binary file not shown.
40
index.md
40
index.md
@@ -27,12 +27,12 @@
|
|||||||
|
|
||||||
<p style="text-align:left; width: 50%;">
|
<p style="text-align:left; width: 50%;">
|
||||||
|
|
||||||
<small><a href="https://amr-for-r.org/">https://amr-for-r.org</a></small>
|
<small><a href="https://amr-for-r.org/">amr-for-r.org</a></small>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p style="text-align:right; width: 50%;">
|
<p style="text-align:right; width: 50%;">
|
||||||
|
|
||||||
<small><a href="https://doi.org/10.18637/jss.v104.i03" target="_blank">https://doi.org/10.18637/jss.v104.i03</a></small>
|
<small><a href="https://doi.org/10.18637/jss.v104.i03" target="_blank">doi.org/10.18637/jss.v104.i03</a></small>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@@ -321,9 +321,9 @@ example_isolates %>%
|
|||||||
#> # A tibble: 3 × 5
|
#> # A tibble: 3 × 5
|
||||||
#> ward GEN_total_R GEN_conf_int TOB_total_R TOB_conf_int
|
#> ward GEN_total_R GEN_conf_int TOB_total_R TOB_conf_int
|
||||||
#> <chr> <dbl> <chr> <dbl> <chr>
|
#> <chr> <dbl> <chr> <dbl> <chr>
|
||||||
#> 1 Clinical 0.2289362 0.205-0.254 0.3147503 0.284-0.347
|
#> 1 Clinical 0.229 0.205-0.254 0.315 0.284-0.347
|
||||||
#> 2 ICU 0.2902655 0.253-0.33 0.4004739 0.353-0.449
|
#> 2 ICU 0.290 0.253-0.33 0.400 0.353-0.449
|
||||||
#> 3 Outpatient 0.2 0.131-0.285 0.3676471 0.254-0.493
|
#> 3 Outpatient 0.2 0.131-0.285 0.368 0.254-0.493
|
||||||
```
|
```
|
||||||
|
|
||||||
Or use [antimicrobial
|
Or use [antimicrobial
|
||||||
@@ -351,33 +351,33 @@ out <- example_isolates %>%
|
|||||||
#> "Outpatient" (minimum = 30).
|
#> "Outpatient" (minimum = 30).
|
||||||
out
|
out
|
||||||
#> # A tibble: 3 × 6
|
#> # A tibble: 3 × 6
|
||||||
#> ward GEN TOB AMK KAN COL
|
#> ward GEN TOB AMK KAN COL
|
||||||
#> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
|
#> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
|
||||||
#> 1 Clinical 0.2289362 0.3147503 0.6258993 1 0.7802956
|
#> 1 Clinical 0.229 0.315 0.626 1 0.780
|
||||||
#> 2 ICU 0.2902655 0.4004739 0.6624473 1 0.8574144
|
#> 2 ICU 0.290 0.400 0.662 1 0.857
|
||||||
#> 3 Outpatient 0.2 0.3676471 0.6052632 NA 0.8888889
|
#> 3 Outpatient 0.2 0.368 0.605 NA 0.889
|
||||||
```
|
```
|
||||||
|
|
||||||
``` r
|
``` r
|
||||||
# transform the antibiotic columns to names:
|
# transform the antibiotic columns to names:
|
||||||
out %>% set_ab_names()
|
out %>% set_ab_names()
|
||||||
#> # A tibble: 3 × 6
|
#> # A tibble: 3 × 6
|
||||||
#> ward gentamicin tobramycin amikacin kanamycin colistin
|
#> ward gentamicin tobramycin amikacin kanamycin colistin
|
||||||
#> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
|
#> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
|
||||||
#> 1 Clinical 0.2289362 0.3147503 0.6258993 1 0.7802956
|
#> 1 Clinical 0.229 0.315 0.626 1 0.780
|
||||||
#> 2 ICU 0.2902655 0.4004739 0.6624473 1 0.8574144
|
#> 2 ICU 0.290 0.400 0.662 1 0.857
|
||||||
#> 3 Outpatient 0.2 0.3676471 0.6052632 NA 0.8888889
|
#> 3 Outpatient 0.2 0.368 0.605 NA 0.889
|
||||||
```
|
```
|
||||||
|
|
||||||
``` r
|
``` r
|
||||||
# transform the antibiotic column to ATC codes:
|
# transform the antibiotic column to ATC codes:
|
||||||
out %>% set_ab_names(property = "atc")
|
out %>% set_ab_names(property = "atc")
|
||||||
#> # A tibble: 3 × 6
|
#> # A tibble: 3 × 6
|
||||||
#> ward J01GB03 J01GB01 J01GB06 J01GB04 J01XB01
|
#> ward J01GB03 J01GB01 J01GB06 J01GB04 J01XB01
|
||||||
#> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
|
#> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
|
||||||
#> 1 Clinical 0.2289362 0.3147503 0.6258993 1 0.7802956
|
#> 1 Clinical 0.229 0.315 0.626 1 0.780
|
||||||
#> 2 ICU 0.2902655 0.4004739 0.6624473 1 0.8574144
|
#> 2 ICU 0.290 0.400 0.662 1 0.857
|
||||||
#> 3 Outpatient 0.2 0.3676471 0.6052632 NA 0.8888889
|
#> 3 Outpatient 0.2 0.368 0.605 NA 0.889
|
||||||
```
|
```
|
||||||
|
|
||||||
## What else can you do with this package?
|
## What else can you do with this package?
|
||||||
|
@@ -75,7 +75,9 @@ sir_interpretation_history(clean = FALSE)
|
|||||||
\arguments{
|
\arguments{
|
||||||
\item{x}{Vector of values (for class \code{\link{mic}}: MIC values in mg/L, for class \code{\link{disk}}: a disk diffusion radius in millimetres).}
|
\item{x}{Vector of values (for class \code{\link{mic}}: MIC values in mg/L, for class \code{\link{disk}}: a disk diffusion radius in millimetres).}
|
||||||
|
|
||||||
\item{...}{For using on a \link{data.frame}: names of columns to apply \code{\link[=as.sir]{as.sir()}} on (supports tidy selection such as \code{column1:column4}). Otherwise: arguments passed on to methods.}
|
\item{...}{For using on a \link{data.frame}: selection of columns to apply \code{as.sir()} to. Supports \link[tidyselect:starts_with]{tidyselect language} such as \code{where(is.mic)}, \code{starts_with(...)}, or \code{column1:column4}, and can thus also be \link[=amr_selector]{antimicrobial selectors} such as \code{as.sir(df, penicillins())}.
|
||||||
|
|
||||||
|
Otherwise: arguments passed on to methods.}
|
||||||
|
|
||||||
\item{threshold}{Maximum fraction of invalid antimicrobial interpretations of \code{x}, see \emph{Examples}.}
|
\item{threshold}{Maximum fraction of invalid antimicrobial interpretations of \code{x}, see \emph{Examples}.}
|
||||||
|
|
||||||
@@ -314,9 +316,12 @@ if (require("dplyr")) {
|
|||||||
df_wide \%>\% mutate_if(is.mic, as.sir)
|
df_wide \%>\% mutate_if(is.mic, as.sir)
|
||||||
df_wide \%>\% mutate_if(function(x) is.mic(x) | is.disk(x), as.sir)
|
df_wide \%>\% mutate_if(function(x) is.mic(x) | is.disk(x), as.sir)
|
||||||
df_wide \%>\% mutate(across(where(is.mic), as.sir))
|
df_wide \%>\% mutate(across(where(is.mic), as.sir))
|
||||||
|
|
||||||
df_wide \%>\% mutate_at(vars(amoxicillin:tobra), as.sir)
|
df_wide \%>\% mutate_at(vars(amoxicillin:tobra), as.sir)
|
||||||
df_wide \%>\% mutate(across(amoxicillin:tobra, as.sir))
|
df_wide \%>\% mutate(across(amoxicillin:tobra, as.sir))
|
||||||
|
|
||||||
|
df_wide \%>\% mutate(across(aminopenicillins(), as.sir))
|
||||||
|
|
||||||
# approaches that all work with additional arguments:
|
# approaches that all work with additional arguments:
|
||||||
df_long \%>\%
|
df_long \%>\%
|
||||||
# given a certain data type, e.g. MIC values
|
# given a certain data type, e.g. MIC values
|
||||||
|
@@ -9,10 +9,10 @@ ggplot_sir(data, position = NULL, x = "antibiotic",
|
|||||||
fill = "interpretation", facet = NULL, breaks = seq(0, 1, 0.1),
|
fill = "interpretation", facet = NULL, breaks = seq(0, 1, 0.1),
|
||||||
limits = NULL, translate_ab = "name", combine_SI = TRUE,
|
limits = NULL, translate_ab = "name", combine_SI = TRUE,
|
||||||
minimum = 30, language = get_AMR_locale(), nrow = NULL, colours = c(S
|
minimum = 30, language = get_AMR_locale(), nrow = NULL, colours = c(S
|
||||||
= "#3CAEA3", SI = "#3CAEA3", I = "#F6D55C", IR = "#ED553B", R = "#ED553B"),
|
= "#3CAEA3", SI = "#3CAEA3", SDD = "#8FD6C4", I = "#F6D55C", IR = "#ED553B",
|
||||||
datalabels = TRUE, datalabels.size = 2.5, datalabels.colour = "grey15",
|
R = "#ED553B"), datalabels = TRUE, datalabels.size = 2.5,
|
||||||
title = NULL, subtitle = NULL, caption = NULL,
|
datalabels.colour = "grey15", title = NULL, subtitle = NULL,
|
||||||
x.title = "Antimicrobial", y.title = "Proportion", ...)
|
caption = NULL, x.title = "Antimicrobial", y.title = "Proportion", ...)
|
||||||
|
|
||||||
geom_sir(position = NULL, x = c("antibiotic", "interpretation"),
|
geom_sir(position = NULL, x = c("antibiotic", "interpretation"),
|
||||||
fill = "interpretation", translate_ab = "name", minimum = 30,
|
fill = "interpretation", translate_ab = "name", minimum = 30,
|
||||||
|
@@ -18,7 +18,7 @@ amr_distance_from_row(amr_distance, row)
|
|||||||
\arguments{
|
\arguments{
|
||||||
\item{x}{A vector of class \link[=as.sir]{sir}, \link[=as.mic]{mic} or \link[=as.disk]{disk}, or a \link{data.frame} containing columns of any of these classes.}
|
\item{x}{A vector of class \link[=as.sir]{sir}, \link[=as.mic]{mic} or \link[=as.disk]{disk}, or a \link{data.frame} containing columns of any of these classes.}
|
||||||
|
|
||||||
\item{...}{Variables to select. Supports \link[tidyselect:language]{tidyselect language} (such as \code{column1:column4} and \code{where(is.mic)}), and can thus also be \link[=amr_selector]{antimicrobial selectors}.}
|
\item{...}{Variables to select. Supports \link[tidyselect:starts_with]{tidyselect language} such as \code{where(is.mic)}, \code{starts_with(...)}, or \code{column1:column4}, and can thus also be \link[=amr_selector]{antimicrobial selectors}.}
|
||||||
|
|
||||||
\item{combine_SI}{A \link{logical} to indicate whether all values of S, SDD, and I must be merged into one, so the input only consists of S+I vs. R (susceptible vs. resistant) - the default is \code{TRUE}.}
|
\item{combine_SI}{A \link{logical} to indicate whether all values of S, SDD, and I must be merged into one, so the input only consists of S+I vs. R (susceptible vs. resistant) - the default is \code{TRUE}.}
|
||||||
|
|
||||||
|
42
man/plot.Rd
42
man/plot.Rd
@@ -33,25 +33,25 @@ scale_colour_mic(keep_operators = "edges", mic_range = NULL, ...)
|
|||||||
|
|
||||||
scale_fill_mic(keep_operators = "edges", mic_range = NULL, ...)
|
scale_fill_mic(keep_operators = "edges", mic_range = NULL, ...)
|
||||||
|
|
||||||
scale_x_sir(colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"),
|
scale_x_sir(colours_SIR = c(S = "#3CAEA3", SDD = "#8FD6C4", I = "#F6D55C", R
|
||||||
language = get_AMR_locale(), eucast_I = getOption("AMR_guideline",
|
= "#ED553B"), language = get_AMR_locale(),
|
||||||
"EUCAST") == "EUCAST", ...)
|
eucast_I = getOption("AMR_guideline", "EUCAST") == "EUCAST", ...)
|
||||||
|
|
||||||
scale_colour_sir(colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"),
|
scale_colour_sir(colours_SIR = c(S = "#3CAEA3", SDD = "#8FD6C4", I =
|
||||||
language = get_AMR_locale(), eucast_I = getOption("AMR_guideline",
|
"#F6D55C", R = "#ED553B"), language = get_AMR_locale(),
|
||||||
"EUCAST") == "EUCAST", ...)
|
eucast_I = getOption("AMR_guideline", "EUCAST") == "EUCAST", ...)
|
||||||
|
|
||||||
scale_fill_sir(colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"),
|
scale_fill_sir(colours_SIR = c(S = "#3CAEA3", SDD = "#8FD6C4", I = "#F6D55C",
|
||||||
language = get_AMR_locale(), eucast_I = getOption("AMR_guideline",
|
R = "#ED553B"), language = get_AMR_locale(),
|
||||||
"EUCAST") == "EUCAST", ...)
|
eucast_I = getOption("AMR_guideline", "EUCAST") == "EUCAST", ...)
|
||||||
|
|
||||||
\method{plot}{mic}(x, mo = NULL, ab = NULL,
|
\method{plot}{mic}(x, mo = NULL, ab = NULL,
|
||||||
guideline = getOption("AMR_guideline", "EUCAST"),
|
guideline = getOption("AMR_guideline", "EUCAST"),
|
||||||
main = deparse(substitute(x)), ylab = translate_AMR("Frequency", language
|
main = deparse(substitute(x)), ylab = translate_AMR("Frequency", language
|
||||||
= language),
|
= language),
|
||||||
xlab = translate_AMR("Minimum Inhibitory Concentration (mg/L)", language =
|
xlab = translate_AMR("Minimum Inhibitory Concentration (mg/L)", language =
|
||||||
language), colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"),
|
language), colours_SIR = c(S = "#3CAEA3", SDD = "#8FD6C4", I = "#F6D55C", R
|
||||||
language = get_AMR_locale(), expand = TRUE,
|
= "#ED553B"), language = get_AMR_locale(), expand = TRUE,
|
||||||
include_PKPD = getOption("AMR_include_PKPD", TRUE),
|
include_PKPD = getOption("AMR_include_PKPD", TRUE),
|
||||||
breakpoint_type = getOption("AMR_breakpoint_type", "human"), ...)
|
breakpoint_type = getOption("AMR_breakpoint_type", "human"), ...)
|
||||||
|
|
||||||
@@ -60,8 +60,8 @@ scale_fill_sir(colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"),
|
|||||||
title = deparse(substitute(object)), ylab = translate_AMR("Frequency",
|
title = deparse(substitute(object)), ylab = translate_AMR("Frequency",
|
||||||
language = language),
|
language = language),
|
||||||
xlab = translate_AMR("Minimum Inhibitory Concentration (mg/L)", language =
|
xlab = translate_AMR("Minimum Inhibitory Concentration (mg/L)", language =
|
||||||
language), colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"),
|
language), colours_SIR = c(S = "#3CAEA3", SDD = "#8FD6C4", I = "#F6D55C", R
|
||||||
language = get_AMR_locale(), expand = TRUE,
|
= "#ED553B"), language = get_AMR_locale(), expand = TRUE,
|
||||||
include_PKPD = getOption("AMR_include_PKPD", TRUE),
|
include_PKPD = getOption("AMR_include_PKPD", TRUE),
|
||||||
breakpoint_type = getOption("AMR_breakpoint_type", "human"), ...)
|
breakpoint_type = getOption("AMR_breakpoint_type", "human"), ...)
|
||||||
|
|
||||||
@@ -69,8 +69,8 @@ scale_fill_sir(colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"),
|
|||||||
ylab = translate_AMR("Frequency", language = language),
|
ylab = translate_AMR("Frequency", language = language),
|
||||||
xlab = translate_AMR("Disk diffusion diameter (mm)", language = language),
|
xlab = translate_AMR("Disk diffusion diameter (mm)", language = language),
|
||||||
mo = NULL, ab = NULL, guideline = getOption("AMR_guideline", "EUCAST"),
|
mo = NULL, ab = NULL, guideline = getOption("AMR_guideline", "EUCAST"),
|
||||||
colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"),
|
colours_SIR = c(S = "#3CAEA3", SDD = "#8FD6C4", I = "#F6D55C", R =
|
||||||
language = get_AMR_locale(), expand = TRUE,
|
"#ED553B"), language = get_AMR_locale(), expand = TRUE,
|
||||||
include_PKPD = getOption("AMR_include_PKPD", TRUE),
|
include_PKPD = getOption("AMR_include_PKPD", TRUE),
|
||||||
breakpoint_type = getOption("AMR_breakpoint_type", "human"), ...)
|
breakpoint_type = getOption("AMR_breakpoint_type", "human"), ...)
|
||||||
|
|
||||||
@@ -78,8 +78,8 @@ scale_fill_sir(colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"),
|
|||||||
title = deparse(substitute(object)), ylab = translate_AMR("Frequency",
|
title = deparse(substitute(object)), ylab = translate_AMR("Frequency",
|
||||||
language = language), xlab = translate_AMR("Disk diffusion diameter (mm)",
|
language = language), xlab = translate_AMR("Disk diffusion diameter (mm)",
|
||||||
language = language), guideline = getOption("AMR_guideline", "EUCAST"),
|
language = language), guideline = getOption("AMR_guideline", "EUCAST"),
|
||||||
colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"),
|
colours_SIR = c(S = "#3CAEA3", SDD = "#8FD6C4", I = "#F6D55C", R =
|
||||||
language = get_AMR_locale(), expand = TRUE,
|
"#ED553B"), language = get_AMR_locale(), expand = TRUE,
|
||||||
include_PKPD = getOption("AMR_include_PKPD", TRUE),
|
include_PKPD = getOption("AMR_include_PKPD", TRUE),
|
||||||
breakpoint_type = getOption("AMR_breakpoint_type", "human"), ...)
|
breakpoint_type = getOption("AMR_breakpoint_type", "human"), ...)
|
||||||
|
|
||||||
@@ -90,8 +90,8 @@ scale_fill_sir(colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"),
|
|||||||
|
|
||||||
\method{autoplot}{sir}(object, title = deparse(substitute(object)),
|
\method{autoplot}{sir}(object, title = deparse(substitute(object)),
|
||||||
xlab = translate_AMR("Antimicrobial Interpretation", language = language),
|
xlab = translate_AMR("Antimicrobial Interpretation", language = language),
|
||||||
ylab = translate_AMR("Frequency", language = language),
|
ylab = translate_AMR("Frequency", language = language), colours_SIR = c(S
|
||||||
colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"),
|
= "#3CAEA3", SDD = "#8FD6C4", I = "#F6D55C", R = "#ED553B"),
|
||||||
language = get_AMR_locale(), ...)
|
language = get_AMR_locale(), ...)
|
||||||
|
|
||||||
facet_sir(facet = c("interpretation", "antibiotic"), nrow = NULL)
|
facet_sir(facet = c("interpretation", "antibiotic"), nrow = NULL)
|
||||||
@@ -99,8 +99,8 @@ facet_sir(facet = c("interpretation", "antibiotic"), nrow = NULL)
|
|||||||
scale_y_percent(breaks = function(x) seq(0, max(x, na.rm = TRUE), 0.1),
|
scale_y_percent(breaks = function(x) seq(0, max(x, na.rm = TRUE), 0.1),
|
||||||
limits = c(0, NA))
|
limits = c(0, NA))
|
||||||
|
|
||||||
scale_sir_colours(..., aesthetics, colours_SIR = c("#3CAEA3", "#F6D55C",
|
scale_sir_colours(..., aesthetics, colours_SIR = c(S = "#3CAEA3", SDD =
|
||||||
"#ED553B"))
|
"#8FD6C4", I = "#F6D55C", R = "#ED553B"))
|
||||||
|
|
||||||
theme_sir()
|
theme_sir()
|
||||||
|
|
||||||
|
@@ -63,10 +63,12 @@ test_that("test-zzz.R", {
|
|||||||
"progress_bar" = "progress",
|
"progress_bar" = "progress",
|
||||||
"read_html" = "xml2",
|
"read_html" = "xml2",
|
||||||
"right_join" = "dplyr",
|
"right_join" = "dplyr",
|
||||||
|
"select" = "dplyr",
|
||||||
"semi_join" = "dplyr",
|
"semi_join" = "dplyr",
|
||||||
"showQuestion" = "rstudioapi",
|
"showQuestion" = "rstudioapi",
|
||||||
"symbol" = "cli",
|
"symbol" = "cli",
|
||||||
"tibble" = "tibble",
|
"tibble" = "tibble",
|
||||||
|
"where" = "tidyselect",
|
||||||
"write.xlsx" = "openxlsx"
|
"write.xlsx" = "openxlsx"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user