From 1149360b273ade1918f6b3ba2d0b0a99da0d42ac Mon Sep 17 00:00:00 2001 From: Matthijs Berends Date: Mon, 27 Jan 2025 16:17:03 +0100 Subject: [PATCH] (v2.1.1.9129) unit test fix --- DESCRIPTION | 3 +- NEWS.md | 2 +- PythonPackage/AMR/AMR.egg-info/PKG-INFO | 2 +- PythonPackage/AMR/AMR/datasets.py | 36 ++++++++---------- .../AMR/dist/AMR-2.1.1.9128-py3-none-any.whl | Bin 10176 -> 0 bytes .../AMR/dist/AMR-2.1.1.9129-py3-none-any.whl | Bin 0 -> 10161 bytes PythonPackage/AMR/dist/amr-2.1.1.9128.tar.gz | Bin 10009 -> 0 bytes PythonPackage/AMR/dist/amr-2.1.1.9129.tar.gz | Bin 0 -> 9995 bytes PythonPackage/AMR/setup.py | 2 +- R/aa_globals.R | 2 + R/antibiogram.R | 2 +- R/bug_drug_combinations.R | 3 +- R/ggplot_pca.R | 2 +- R/top_n_microorganisms.R | 2 +- data-raw/_generate_python_wrapper.sh | 36 ++++++++---------- ....txt => gpt_training_text_v2.1.1.9129.txt} | 8 ++-- data-raw/reproduction_of_microorganisms.R | 6 +-- inst/{tinytest => tests}/test-_deprecated.R | 0 inst/{tinytest => tests}/test-_misc.R | 9 +++++ inst/{tinytest => tests}/test-ab.R | 0 inst/{tinytest => tests}/test-ab_from_text.R | 0 inst/{tinytest => tests}/test-ab_property.R | 0 inst/{tinytest => tests}/test-ab_selectors.R | 0 inst/{tinytest => tests}/test-age.R | 0 inst/{tinytest => tests}/test-antibiogram.R | 0 inst/{tinytest => tests}/test-atc_online.R | 0 inst/{tinytest => tests}/test-av.R | 0 inst/{tinytest => tests}/test-av_from_text.R | 0 inst/{tinytest => tests}/test-av_property.R | 0 inst/{tinytest => tests}/test-availability.R | 0 .../test-bug_drug_combinations.R | 0 inst/{tinytest => tests}/test-count.R | 0 .../test-custom_antimicrobials.R | 0 .../test-custom_microorganisms.R | 2 +- inst/{tinytest => tests}/test-data.R | 0 inst/{tinytest => tests}/test-disk.R | 0 inst/{tinytest => tests}/test-eucast_rules.R | 0 inst/{tinytest => tests}/test-first_isolate.R | 0 inst/{tinytest => tests}/test-g.test.R | 0 inst/{tinytest => tests}/test-get_episode.R | 0 inst/{tinytest => tests}/test-ggplot_sir.R | 16 ++++---- inst/{tinytest => tests}/test-guess_ab_col.R | 0 .../test-italicise_taxonomy.R | 0 .../test-join_microorganisms.R | 0 .../test-key_antimicrobials.R | 0 inst/{tinytest => tests}/test-kurtosis.R | 0 inst/{tinytest => tests}/test-like.R | 0 inst/{tinytest => tests}/test-mdro.R | 0 .../test-mean_amr_distance.R | 0 inst/{tinytest => tests}/test-mic.R | 0 inst/{tinytest => tests}/test-mo.R | 0 inst/{tinytest => tests}/test-mo_property.R | 0 inst/{tinytest => tests}/test-pca.R | 0 inst/{tinytest => tests}/test-proportion.R | 0 inst/{tinytest => tests}/test-random.R | 0 .../test-resistance_predict.R | 0 inst/{tinytest => tests}/test-sir.R | 0 inst/{tinytest => tests}/test-skewness.R | 0 .../test-top_n_microorganisms.R | 0 inst/{tinytest => tests}/test-translate.R | 0 inst/{tinytest => tests}/test-vctrs.R | 0 inst/{tinytest => tests}/test-zzz.R | 0 man/antibiogram.Rd | 2 +- man/bug_drug_combinations.Rd | 2 + man/top_n_microorganisms.Rd | 2 +- tests/tinytest.R | 35 +++++++++-------- 66 files changed, 94 insertions(+), 80 deletions(-) delete mode 100644 PythonPackage/AMR/dist/AMR-2.1.1.9128-py3-none-any.whl create mode 100644 PythonPackage/AMR/dist/AMR-2.1.1.9129-py3-none-any.whl delete mode 100644 PythonPackage/AMR/dist/amr-2.1.1.9128.tar.gz create mode 100644 PythonPackage/AMR/dist/amr-2.1.1.9129.tar.gz rename data-raw/{gpt_training_text_v2.1.1.9128.txt => gpt_training_text_v2.1.1.9129.txt} (99%) rename inst/{tinytest => tests}/test-_deprecated.R (100%) rename inst/{tinytest => tests}/test-_misc.R (87%) rename inst/{tinytest => tests}/test-ab.R (100%) rename inst/{tinytest => tests}/test-ab_from_text.R (100%) rename inst/{tinytest => tests}/test-ab_property.R (100%) rename inst/{tinytest => tests}/test-ab_selectors.R (100%) rename inst/{tinytest => tests}/test-age.R (100%) rename inst/{tinytest => tests}/test-antibiogram.R (100%) rename inst/{tinytest => tests}/test-atc_online.R (100%) rename inst/{tinytest => tests}/test-av.R (100%) rename inst/{tinytest => tests}/test-av_from_text.R (100%) rename inst/{tinytest => tests}/test-av_property.R (100%) rename inst/{tinytest => tests}/test-availability.R (100%) rename inst/{tinytest => tests}/test-bug_drug_combinations.R (100%) rename inst/{tinytest => tests}/test-count.R (100%) rename inst/{tinytest => tests}/test-custom_antimicrobials.R (100%) rename inst/{tinytest => tests}/test-custom_microorganisms.R (99%) rename inst/{tinytest => tests}/test-data.R (100%) rename inst/{tinytest => tests}/test-disk.R (100%) rename inst/{tinytest => tests}/test-eucast_rules.R (100%) rename inst/{tinytest => tests}/test-first_isolate.R (100%) rename inst/{tinytest => tests}/test-g.test.R (100%) rename inst/{tinytest => tests}/test-get_episode.R (100%) rename inst/{tinytest => tests}/test-ggplot_sir.R (92%) rename inst/{tinytest => tests}/test-guess_ab_col.R (100%) rename inst/{tinytest => tests}/test-italicise_taxonomy.R (100%) rename inst/{tinytest => tests}/test-join_microorganisms.R (100%) rename inst/{tinytest => tests}/test-key_antimicrobials.R (100%) rename inst/{tinytest => tests}/test-kurtosis.R (100%) rename inst/{tinytest => tests}/test-like.R (100%) rename inst/{tinytest => tests}/test-mdro.R (100%) rename inst/{tinytest => tests}/test-mean_amr_distance.R (100%) rename inst/{tinytest => tests}/test-mic.R (100%) rename inst/{tinytest => tests}/test-mo.R (100%) rename inst/{tinytest => tests}/test-mo_property.R (100%) rename inst/{tinytest => tests}/test-pca.R (100%) rename inst/{tinytest => tests}/test-proportion.R (100%) rename inst/{tinytest => tests}/test-random.R (100%) rename inst/{tinytest => tests}/test-resistance_predict.R (100%) rename inst/{tinytest => tests}/test-sir.R (100%) rename inst/{tinytest => tests}/test-skewness.R (100%) rename inst/{tinytest => tests}/test-top_n_microorganisms.R (100%) rename inst/{tinytest => tests}/test-translate.R (100%) rename inst/{tinytest => tests}/test-vctrs.R (100%) rename inst/{tinytest => tests}/test-zzz.R (100%) diff --git a/DESCRIPTION b/DESCRIPTION index 139b89e64..69f382ee8 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,5 +1,5 @@ Package: AMR -Version: 2.1.1.9128 +Version: 2.1.1.9129 Date: 2025-01-27 Title: Antimicrobial Resistance Data Analysis Description: Functions to simplify and standardise antimicrobial resistance (AMR) @@ -46,6 +46,7 @@ Suggests: rmarkdown, rvest, skimr, + testthat, tibble, tidymodels, tidyselect, diff --git a/NEWS.md b/NEWS.md index a9c4aa550..3e1cee524 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,4 +1,4 @@ -# AMR 2.1.1.9128 +# AMR 2.1.1.9129 *(this beta version will eventually become v3.0. We're happy to reach a new major milestone soon, which will be all about the new One Health support! Install this beta using [the instructions here](https://msberends.github.io/AMR/#latest-development-version).)* diff --git a/PythonPackage/AMR/AMR.egg-info/PKG-INFO b/PythonPackage/AMR/AMR.egg-info/PKG-INFO index b80d3fc6e..30b6ef0b2 100644 --- a/PythonPackage/AMR/AMR.egg-info/PKG-INFO +++ b/PythonPackage/AMR/AMR.egg-info/PKG-INFO @@ -1,6 +1,6 @@ Metadata-Version: 2.2 Name: AMR -Version: 2.1.1.9128 +Version: 2.1.1.9129 Summary: A Python wrapper for the AMR R package Home-page: https://github.com/msberends/AMR Author: Matthijs Berends diff --git a/PythonPackage/AMR/AMR/datasets.py b/PythonPackage/AMR/AMR/datasets.py index efc5d87d8..28774b333 100644 --- a/PythonPackage/AMR/AMR/datasets.py +++ b/PythonPackage/AMR/AMR/datasets.py @@ -1,7 +1,3 @@ -BLUE = '\033[94m' -GREEN = '\033[32m' -RESET = '\033[0m' - import os import sys from rpy2 import robjects @@ -17,18 +13,22 @@ venv_path = sys.prefix r_lib_path = os.path.join(venv_path, "R_libs") # Ensure the R library path exists os.makedirs(r_lib_path, exist_ok=True) -# Set the R library path in .libPaths -base = importr('base') -# Turn off warnings -base.options(warn = -1) -base._libPaths(r_lib_path) +# Import base and utils +base = importr('base') +utils = importr('utils') + +# Override R library paths globally for the session +robjects.r(f'.Library <- "{r_lib_path}"') # Replace default library +robjects.r(f'.Library.site <- "{r_lib_path}"') # Replace site-specific library +base._libPaths(r_lib_path) # Override .libPaths() as well + +# Get the effective library path r_amr_lib_path = base._libPaths()[0] # Check if the AMR package is installed in R -if not isinstalled('AMR', lib_loc = r_amr_lib_path): - utils = importr('utils') - print(f"{BLUE}AMR:{RESET} Installing AMR package to {BLUE}{r_amr_lib_path}/{RESET}...", flush=True) +if not isinstalled('AMR', lib_loc=r_amr_lib_path): + print(f"AMR: Installing latest AMR R package to {r_amr_lib_path}...", flush=True) utils.install_packages('AMR', repos='https://msberends.r-universe.dev', quiet=True) # Python package version of AMR @@ -43,16 +43,12 @@ r_amr_version = robjects.r(f'as.character(packageVersion("AMR", lib.loc = "{r_li # Compare R and Python package versions if r_amr_version != python_amr_version: try: - print(f"{BLUE}AMR:{RESET} Updating AMR package in {BLUE}{r_amr_lib_path}/{RESET}...", flush=True) - utils = importr('utils') + print(f"AMR: Updating AMR package in {r_amr_lib_path}...", flush=True) utils.install_packages('AMR', repos='https://msberends.r-universe.dev', quiet=True) except Exception as e: - print(f"{BLUE}AMR:{RESET} Could not update: {e}{RESET}", flush=True) + print(f"AMR: Could not update: {e}", flush=True) -# Restore warnings to default -base.options(warn = 0) - -print(f"{BLUE}AMR:{RESET} Setting up R environment and AMR datasets...", flush=True) +print(f"AMR: Setting up R environment and AMR datasets...", flush=True) # Activate the automatic conversion between R and pandas DataFrames pandas2ri.activate() @@ -77,4 +73,4 @@ microorganisms = pandas2ri.rpy2py(robjects.r('AMR::microorganisms[, !sapply(AMR: antibiotics = pandas2ri.rpy2py(robjects.r('AMR::antibiotics[, !sapply(AMR::antibiotics, is.list)]')) clinical_breakpoints = pandas2ri.rpy2py(robjects.r('AMR::clinical_breakpoints[, !sapply(AMR::clinical_breakpoints, is.list)]')) -print(f"{BLUE}AMR:{RESET} {GREEN}Done.{RESET}", flush=True) +print(f"AMR: Done.", flush=True) diff --git a/PythonPackage/AMR/dist/AMR-2.1.1.9128-py3-none-any.whl b/PythonPackage/AMR/dist/AMR-2.1.1.9128-py3-none-any.whl deleted file mode 100644 index 2a5f62f2f6ed109af570b38105a2eb6c14cb2009..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10176 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
N2dXbWpuePKZ`YIwlR%B)t{P4j7_g1t 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 atnXi{Qj~%EOU(f2KkfF97z-)>y89n2xWHuq literal 0 HcmV?d00001 diff --git a/PythonPackage/AMR/dist/amr-2.1.1.9128.tar.gz b/PythonPackage/AMR/dist/amr-2.1.1.9128.tar.gz deleted file mode 100644 index fe3bebc9446557f85e728ebc3ac1f36cfb8c90c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10009 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 WNA>^hcKt33hC65wgbud_5BFb;&D;6_ literal 0 HcmV?d00001 diff --git a/PythonPackage/AMR/setup.py b/PythonPackage/AMR/setup.py index b48a98844..51c775221 100644 --- a/PythonPackage/AMR/setup.py +++ b/PythonPackage/AMR/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages setup( name='AMR', - version='2.1.1.9128', + version='2.1.1.9129', packages=find_packages(), install_requires=[ 'rpy2', diff --git a/R/aa_globals.R b/R/aa_globals.R index 16e6a3837..8e245be4e 100755 --- a/R/aa_globals.R +++ b/R/aa_globals.R @@ -165,6 +165,7 @@ globalVariables(c( "lang", "language", "lookup", + "lower", "method", "mic ", "mic", @@ -198,6 +199,7 @@ globalVariables(c( "total", "txt", "type", + "upper", "uti_index", "value", "varname", diff --git a/R/antibiogram.R b/R/antibiogram.R index 503273433..a57592524 100755 --- a/R/antibiogram.R +++ b/R/antibiogram.R @@ -60,7 +60,7 @@ #' #' For estimating antimicrobial coverage, especially when creating a WISCA, the outcome might become more reliable by only including the top *n* species encountered in the data. You can filter on this top *n* using [top_n_microorganisms()]. For example, use `top_n_microorganisms(your_data, n = 10)` as a pre-processing step to only include the top 10 species in the data. #' -#' The numeric values of an antibiogram are stored in a long format as the [attribute] `long_numeric`. You can retrieve them using `attributes(x)$long_numeric`, where `x` is the outcome of [antibiogram()] or [wisca()]. This is ideal for e.g. advanced plotting. +#' The numeric values of an antibiogram are stored in a long format as the [attribute][attributes()] `long_numeric`. You can retrieve them using `attributes(x)$long_numeric`, where `x` is the outcome of [antibiogram()] or [wisca()]. This is ideal for e.g. advanced plotting. #' #' ### Formatting Type #' diff --git a/R/bug_drug_combinations.R b/R/bug_drug_combinations.R index dd4ee82c7..2d8b0c6fd 100755 --- a/R/bug_drug_combinations.R +++ b/R/bug_drug_combinations.R @@ -36,6 +36,7 @@ #' @param remove_intrinsic_resistant [logical] to indicate that rows and columns with 100% resistance for all tested antimicrobials must be removed from the table #' @param FUN the function to call on the `mo` column to transform the microorganism codes - the default is [mo_shortname()] #' @param translate_ab a [character] of length 1 containing column names of the [antibiotics] data set +#' @param include_n_rows a [logical] to indicate if the total number of rows must be included in the output #' @param ... arguments passed on to `FUN` #' @inheritParams sir_df #' @inheritParams base::formatC @@ -182,8 +183,8 @@ bug_drug_combinations <- function(x, out <- out[, colnames(out)[colnames(out) != "total_rows"], drop = FALSE] } - out <- out %pm>% pm_arrange(mo, ab) out <- as_original_data_class(out, class(x.bak)) # will remove tibble groups + out <- out %pm>% pm_arrange(mo, ab) rownames(out) <- NULL structure(out, class = c("bug_drug_combinations", if(data_has_groups) "grouped" else NULL, class(out))) } diff --git a/R/ggplot_pca.R b/R/ggplot_pca.R index 4d879bff4..72e86aa03 100755 --- a/R/ggplot_pca.R +++ b/R/ggplot_pca.R @@ -261,7 +261,7 @@ ggplot_pca <- function(x, type = "open" ), colour = arrows_colour, - size = arrows_size, + linewidth = arrows_size, alpha = arrows_alpha ) if (arrows_textangled == TRUE) { diff --git a/R/top_n_microorganisms.R b/R/top_n_microorganisms.R index 5c4193cca..8d6ae4ee9 100755 --- a/R/top_n_microorganisms.R +++ b/R/top_n_microorganisms.R @@ -36,7 +36,7 @@ #' @param n_for_each an optional integer specifying the maximum number of rows to retain for each value of the selected property. If `NULL`, all rows within the top *n* groups will be included. #' @param col_mo A character string indicating the column in `x` that contains microorganism names or codes. Defaults to the first column of class [`mo`]. Values will be coerced using [as.mo()]. #' @param ... Additional arguments passed on to [mo_property()] when `property` is not `NULL`. -#' @details This function is useful for preprocessing data before creating [antibiograms][antibiograms()] or other analyses that require focused subsets of microbial data. For example, it can filter a data set to only include isolates from the top 10 species. +#' @details This function is useful for preprocessing data before creating [antibiograms][antibiogram()] or other analyses that require focused subsets of microbial data. For example, it can filter a data set to only include isolates from the top 10 species. #' @export #' @seealso [mo_property()], [as.mo()], [antibiogram()] #' @examples diff --git a/data-raw/_generate_python_wrapper.sh b/data-raw/_generate_python_wrapper.sh index b9b629f8d..e5f7519e1 100644 --- a/data-raw/_generate_python_wrapper.sh +++ b/data-raw/_generate_python_wrapper.sh @@ -42,10 +42,6 @@ description_file="../DESCRIPTION" # Write header to the datasets Python file, including the convert_to_python function cat < "$datasets_file" -BLUE = '\033[94m' -GREEN = '\033[32m' -RESET = '\033[0m' - import os import sys from rpy2 import robjects @@ -61,18 +57,22 @@ venv_path = sys.prefix r_lib_path = os.path.join(venv_path, "R_libs") # Ensure the R library path exists os.makedirs(r_lib_path, exist_ok=True) -# Set the R library path in .libPaths -base = importr('base') -# Turn off warnings -base.options(warn = -1) -base._libPaths(r_lib_path) +# Import base and utils +base = importr('base') +utils = importr('utils') + +# Override R library paths globally for the session +robjects.r(f'.Library <- "{r_lib_path}"') # Replace default library +robjects.r(f'.Library.site <- "{r_lib_path}"') # Replace site-specific library +base._libPaths(r_lib_path) # Override .libPaths() as well + +# Get the effective library path r_amr_lib_path = base._libPaths()[0] # Check if the AMR package is installed in R -if not isinstalled('AMR', lib_loc = r_amr_lib_path): - utils = importr('utils') - print(f"{BLUE}AMR:{RESET} Installing AMR package to {BLUE}{r_amr_lib_path}/{RESET}...", flush=True) +if not isinstalled('AMR', lib_loc=r_amr_lib_path): + print(f"AMR: Installing latest AMR R package to {r_amr_lib_path}...", flush=True) utils.install_packages('AMR', repos='https://msberends.r-universe.dev', quiet=True) # Python package version of AMR @@ -87,16 +87,12 @@ r_amr_version = robjects.r(f'as.character(packageVersion("AMR", lib.loc = "{r_li # Compare R and Python package versions if r_amr_version != python_amr_version: try: - print(f"{BLUE}AMR:{RESET} Updating AMR package in {BLUE}{r_amr_lib_path}/{RESET}...", flush=True) - utils = importr('utils') + print(f"AMR: Updating AMR package in {r_amr_lib_path}...", flush=True) utils.install_packages('AMR', repos='https://msberends.r-universe.dev', quiet=True) except Exception as e: - print(f"{BLUE}AMR:{RESET} Could not update: {e}{RESET}", flush=True) + print(f"AMR: Could not update: {e}", flush=True) -# Restore warnings to default -base.options(warn = 0) - -print(f"{BLUE}AMR:{RESET} Setting up R environment and AMR datasets...", flush=True) +print(f"AMR: Setting up R environment and AMR datasets...", flush=True) # Activate the automatic conversion between R and pandas DataFrames pandas2ri.activate() @@ -121,7 +117,7 @@ microorganisms = pandas2ri.rpy2py(robjects.r('AMR::microorganisms[, !sapply(AMR: antibiotics = pandas2ri.rpy2py(robjects.r('AMR::antibiotics[, !sapply(AMR::antibiotics, is.list)]')) clinical_breakpoints = pandas2ri.rpy2py(robjects.r('AMR::clinical_breakpoints[, !sapply(AMR::clinical_breakpoints, is.list)]')) -print(f"{BLUE}AMR:{RESET} {GREEN}Done.{RESET}", flush=True) +print(f"AMR: Done.", flush=True) EOL echo "from .datasets import example_isolates" >> $init_file diff --git a/data-raw/gpt_training_text_v2.1.1.9128.txt b/data-raw/gpt_training_text_v2.1.1.9129.txt similarity index 99% rename from data-raw/gpt_training_text_v2.1.1.9128.txt rename to data-raw/gpt_training_text_v2.1.1.9129.txt index ad94c68c8..f7252d947 100644 --- a/data-raw/gpt_training_text_v2.1.1.9128.txt +++ b/data-raw/gpt_training_text_v2.1.1.9129.txt @@ -1,5 +1,5 @@ This files contains all context you must know about the AMR package for R. -First and foremost, you are trained on version 2.1.1.9128. Remember this whenever someone asks which AMR package version you’re at. +First and foremost, you are trained on version 2.1.1.9129. Remember this whenever someone asks which AMR package version you’re at. -------------------------------- THE PART HEREAFTER CONTAINS CONTENTS FROM FILE 'NAMESPACE': @@ -1705,7 +1705,7 @@ This function returns a table with values between 0 and 100 for \emph{susceptibi For estimating antimicrobial coverage, especially when creating a WISCA, the outcome might become more reliable by only including the top \emph{n} species encountered in the data. You can filter on this top \emph{n} using \code{\link[=top_n_microorganisms]{top_n_microorganisms()}}. For example, use \code{top_n_microorganisms(your_data, n = 10)} as a pre-processing step to only include the top 10 species in the data. -The numeric values of an antibiogram are stored in a long format as the \link{attribute} \code{long_numeric}. You can retrieve them using \code{attributes(x)$long_numeric}, where \code{x} is the outcome of \code{\link[=antibiogram]{antibiogram()}} or \code{\link[=wisca]{wisca()}}. This is ideal for e.g. advanced plotting. +The numeric values of an antibiogram are stored in a long format as the \link[=attributes]{attribute} \code{long_numeric}. You can retrieve them using \code{attributes(x)$long_numeric}, where \code{x} is the outcome of \code{\link[=antibiogram]{antibiogram()}} or \code{\link[=wisca]{wisca()}}. This is ideal for e.g. advanced plotting. \subsection{Formatting Type}{ The formatting of the 'cells' of the table can be set with the argument \code{formatting_type}. In these examples, \code{5} is the susceptibility percentage (for WISCA: \code{4-6} indicates the confidence level), \code{15} the numerator, and \code{300} the denominator: @@ -3900,6 +3900,8 @@ bug_drug_combinations(x, col_mo = NULL, FUN = mo_shortname, \item{FUN}{the function to call on the \code{mo} column to transform the microorganism codes - the default is \code{\link[=mo_shortname]{mo_shortname()}}} +\item{include_n_rows}{a \link{logical} to indicate if the total number of rows must be included in the output} + \item{...}{arguments passed on to \code{FUN}} \item{translate_ab}{a \link{character} of length 1 containing column names of the \link{antibiotics} data set} @@ -8027,7 +8029,7 @@ top_n_microorganisms(x, n, property = "fullname", n_for_each = NULL, This function filters a data set to include only the top \emph{n} microorganisms based on a specified property, such as taxonomic family or genus. For example, it can filter a data set to the top 3 species, or to any species in the top 5 genera, or to the top 3 species in each of the top 5 genera. } \details{ -This function is useful for preprocessing data before creating \link[=antibiograms]{antibiograms} or other analyses that require focused subsets of microbial data. For example, it can filter a data set to only include isolates from the top 10 species. +This function is useful for preprocessing data before creating \link[=antibiogram]{antibiograms} or other analyses that require focused subsets of microbial data. For example, it can filter a data set to only include isolates from the top 10 species. } \examples{ # filter to the top 3 species: diff --git a/data-raw/reproduction_of_microorganisms.R b/data-raw/reproduction_of_microorganisms.R index 843bcf668..842bbcd77 100644 --- a/data-raw/reproduction_of_microorganisms.R +++ b/data-raw/reproduction_of_microorganisms.R @@ -2210,6 +2210,6 @@ devtools::load_all(".") # run the unit tests Sys.setenv(NOT_CRAN = "true") -testthat::test_file("inst/tinytest/test-data.R") -testthat::test_file("inst/tinytest/test-mo.R") -testthat::test_file("inst/tinytest/test-mo_property.R") +testthat::test_file("inst/tests/testthat/test-data.R") +testthat::test_file("inst/tests/testthat/test-mo.R") +testthat::test_file("inst/tests/testthat/test-mo_property.R") diff --git a/inst/tinytest/test-_deprecated.R b/inst/tests/test-_deprecated.R similarity index 100% rename from inst/tinytest/test-_deprecated.R rename to inst/tests/test-_deprecated.R diff --git a/inst/tinytest/test-_misc.R b/inst/tests/test-_misc.R similarity index 87% rename from inst/tinytest/test-_misc.R rename to inst/tests/test-_misc.R index 582a09c5e..05f26b83a 100755 --- a/inst/tinytest/test-_misc.R +++ b/inst/tests/test-_misc.R @@ -27,6 +27,15 @@ # how to conduct AMR data analysis: https://msberends.github.io/AMR/ # # ==================================================================== # +tryCatch(!is.function(expect_stout), error = function(e) TRUE) { + expect_stout <<- testthat::expect_output +} +tryCatch(!is.function(expect_inherits), error = function(e) TRUE) { + expect_inherits <<- function(x, y, ...) testthat::expect(inherits(x, y), + failure_message = paste0("Expected class ", paste(y, collapse = "/"), + ", got class ", paste(class(x), collapse = "/"))) +} + expect_equal(AMR:::percentage(0.25), "25%") expect_equal(AMR:::percentage(0.5), "50%") expect_equal(AMR:::percentage(0.500, digits = 1), "50.0%") diff --git a/inst/tinytest/test-ab.R b/inst/tests/test-ab.R similarity index 100% rename from inst/tinytest/test-ab.R rename to inst/tests/test-ab.R diff --git a/inst/tinytest/test-ab_from_text.R b/inst/tests/test-ab_from_text.R similarity index 100% rename from inst/tinytest/test-ab_from_text.R rename to inst/tests/test-ab_from_text.R diff --git a/inst/tinytest/test-ab_property.R b/inst/tests/test-ab_property.R similarity index 100% rename from inst/tinytest/test-ab_property.R rename to inst/tests/test-ab_property.R diff --git a/inst/tinytest/test-ab_selectors.R b/inst/tests/test-ab_selectors.R similarity index 100% rename from inst/tinytest/test-ab_selectors.R rename to inst/tests/test-ab_selectors.R diff --git a/inst/tinytest/test-age.R b/inst/tests/test-age.R similarity index 100% rename from inst/tinytest/test-age.R rename to inst/tests/test-age.R diff --git a/inst/tinytest/test-antibiogram.R b/inst/tests/test-antibiogram.R similarity index 100% rename from inst/tinytest/test-antibiogram.R rename to inst/tests/test-antibiogram.R diff --git a/inst/tinytest/test-atc_online.R b/inst/tests/test-atc_online.R similarity index 100% rename from inst/tinytest/test-atc_online.R rename to inst/tests/test-atc_online.R diff --git a/inst/tinytest/test-av.R b/inst/tests/test-av.R similarity index 100% rename from inst/tinytest/test-av.R rename to inst/tests/test-av.R diff --git a/inst/tinytest/test-av_from_text.R b/inst/tests/test-av_from_text.R similarity index 100% rename from inst/tinytest/test-av_from_text.R rename to inst/tests/test-av_from_text.R diff --git a/inst/tinytest/test-av_property.R b/inst/tests/test-av_property.R similarity index 100% rename from inst/tinytest/test-av_property.R rename to inst/tests/test-av_property.R diff --git a/inst/tinytest/test-availability.R b/inst/tests/test-availability.R similarity index 100% rename from inst/tinytest/test-availability.R rename to inst/tests/test-availability.R diff --git a/inst/tinytest/test-bug_drug_combinations.R b/inst/tests/test-bug_drug_combinations.R similarity index 100% rename from inst/tinytest/test-bug_drug_combinations.R rename to inst/tests/test-bug_drug_combinations.R diff --git a/inst/tinytest/test-count.R b/inst/tests/test-count.R similarity index 100% rename from inst/tinytest/test-count.R rename to inst/tests/test-count.R diff --git a/inst/tinytest/test-custom_antimicrobials.R b/inst/tests/test-custom_antimicrobials.R similarity index 100% rename from inst/tinytest/test-custom_antimicrobials.R rename to inst/tests/test-custom_antimicrobials.R diff --git a/inst/tinytest/test-custom_microorganisms.R b/inst/tests/test-custom_microorganisms.R similarity index 99% rename from inst/tinytest/test-custom_microorganisms.R rename to inst/tests/test-custom_microorganisms.R index 5d106ab6e..acfe7fa7a 100644 --- a/inst/tinytest/test-custom_microorganisms.R +++ b/inst/tests/test-custom_microorganisms.R @@ -37,7 +37,7 @@ suppressMessages( species = "asburiae/cloacae") ) ) - + expect_identical(as.character(as.mo("ENT_ASB_CLO")), "ENT_ASB_CLO") expect_identical(mo_name("ENT_ASB_CLO"), "Enterobacter asburiae/cloacae") expect_identical(mo_gramstain("ENT_ASB_CLO", language = NULL), "Gram-negative") diff --git a/inst/tinytest/test-data.R b/inst/tests/test-data.R similarity index 100% rename from inst/tinytest/test-data.R rename to inst/tests/test-data.R diff --git a/inst/tinytest/test-disk.R b/inst/tests/test-disk.R similarity index 100% rename from inst/tinytest/test-disk.R rename to inst/tests/test-disk.R diff --git a/inst/tinytest/test-eucast_rules.R b/inst/tests/test-eucast_rules.R similarity index 100% rename from inst/tinytest/test-eucast_rules.R rename to inst/tests/test-eucast_rules.R diff --git a/inst/tinytest/test-first_isolate.R b/inst/tests/test-first_isolate.R similarity index 100% rename from inst/tinytest/test-first_isolate.R rename to inst/tests/test-first_isolate.R diff --git a/inst/tinytest/test-g.test.R b/inst/tests/test-g.test.R similarity index 100% rename from inst/tinytest/test-g.test.R rename to inst/tests/test-g.test.R diff --git a/inst/tinytest/test-get_episode.R b/inst/tests/test-get_episode.R similarity index 100% rename from inst/tinytest/test-get_episode.R rename to inst/tests/test-get_episode.R diff --git a/inst/tinytest/test-ggplot_sir.R b/inst/tests/test-ggplot_sir.R similarity index 92% rename from inst/tinytest/test-ggplot_sir.R rename to inst/tests/test-ggplot_sir.R index 29ec76249..afbe4ac94 100644 --- a/inst/tinytest/test-ggplot_sir.R +++ b/inst/tests/test-ggplot_sir.R @@ -43,13 +43,15 @@ if (AMR:::pkg_is_available("dplyr", min_version = "1.0.0", also_load = TRUE) && summarise_all(resistance) %>% as.double() ) - - expect_stdout(print(example_isolates %>% - select(AMC, CIP) %>% - ggplot_sir(x = "interpretation", facet = "antibiotic"))) - expect_stdout(print(example_isolates %>% - select(AMC, CIP) %>% - ggplot_sir(x = "antibiotic", facet = "interpretation"))) + + expect_inherits(example_isolates %>% + select(AMC, CIP) %>% + ggplot_sir(x = "interpretation", facet = "antibiotic"), + "gg") + expect_inherits(example_isolates %>% + select(AMC, CIP) %>% + ggplot_sir(x = "antibiotic", facet = "interpretation"), + "gg") expect_equal( (example_isolates %>% diff --git a/inst/tinytest/test-guess_ab_col.R b/inst/tests/test-guess_ab_col.R similarity index 100% rename from inst/tinytest/test-guess_ab_col.R rename to inst/tests/test-guess_ab_col.R diff --git a/inst/tinytest/test-italicise_taxonomy.R b/inst/tests/test-italicise_taxonomy.R similarity index 100% rename from inst/tinytest/test-italicise_taxonomy.R rename to inst/tests/test-italicise_taxonomy.R diff --git a/inst/tinytest/test-join_microorganisms.R b/inst/tests/test-join_microorganisms.R similarity index 100% rename from inst/tinytest/test-join_microorganisms.R rename to inst/tests/test-join_microorganisms.R diff --git a/inst/tinytest/test-key_antimicrobials.R b/inst/tests/test-key_antimicrobials.R similarity index 100% rename from inst/tinytest/test-key_antimicrobials.R rename to inst/tests/test-key_antimicrobials.R diff --git a/inst/tinytest/test-kurtosis.R b/inst/tests/test-kurtosis.R similarity index 100% rename from inst/tinytest/test-kurtosis.R rename to inst/tests/test-kurtosis.R diff --git a/inst/tinytest/test-like.R b/inst/tests/test-like.R similarity index 100% rename from inst/tinytest/test-like.R rename to inst/tests/test-like.R diff --git a/inst/tinytest/test-mdro.R b/inst/tests/test-mdro.R similarity index 100% rename from inst/tinytest/test-mdro.R rename to inst/tests/test-mdro.R diff --git a/inst/tinytest/test-mean_amr_distance.R b/inst/tests/test-mean_amr_distance.R similarity index 100% rename from inst/tinytest/test-mean_amr_distance.R rename to inst/tests/test-mean_amr_distance.R diff --git a/inst/tinytest/test-mic.R b/inst/tests/test-mic.R similarity index 100% rename from inst/tinytest/test-mic.R rename to inst/tests/test-mic.R diff --git a/inst/tinytest/test-mo.R b/inst/tests/test-mo.R similarity index 100% rename from inst/tinytest/test-mo.R rename to inst/tests/test-mo.R diff --git a/inst/tinytest/test-mo_property.R b/inst/tests/test-mo_property.R similarity index 100% rename from inst/tinytest/test-mo_property.R rename to inst/tests/test-mo_property.R diff --git a/inst/tinytest/test-pca.R b/inst/tests/test-pca.R similarity index 100% rename from inst/tinytest/test-pca.R rename to inst/tests/test-pca.R diff --git a/inst/tinytest/test-proportion.R b/inst/tests/test-proportion.R similarity index 100% rename from inst/tinytest/test-proportion.R rename to inst/tests/test-proportion.R diff --git a/inst/tinytest/test-random.R b/inst/tests/test-random.R similarity index 100% rename from inst/tinytest/test-random.R rename to inst/tests/test-random.R diff --git a/inst/tinytest/test-resistance_predict.R b/inst/tests/test-resistance_predict.R similarity index 100% rename from inst/tinytest/test-resistance_predict.R rename to inst/tests/test-resistance_predict.R diff --git a/inst/tinytest/test-sir.R b/inst/tests/test-sir.R similarity index 100% rename from inst/tinytest/test-sir.R rename to inst/tests/test-sir.R diff --git a/inst/tinytest/test-skewness.R b/inst/tests/test-skewness.R similarity index 100% rename from inst/tinytest/test-skewness.R rename to inst/tests/test-skewness.R diff --git a/inst/tinytest/test-top_n_microorganisms.R b/inst/tests/test-top_n_microorganisms.R similarity index 100% rename from inst/tinytest/test-top_n_microorganisms.R rename to inst/tests/test-top_n_microorganisms.R diff --git a/inst/tinytest/test-translate.R b/inst/tests/test-translate.R similarity index 100% rename from inst/tinytest/test-translate.R rename to inst/tests/test-translate.R diff --git a/inst/tinytest/test-vctrs.R b/inst/tests/test-vctrs.R similarity index 100% rename from inst/tinytest/test-vctrs.R rename to inst/tests/test-vctrs.R diff --git a/inst/tinytest/test-zzz.R b/inst/tests/test-zzz.R similarity index 100% rename from inst/tinytest/test-zzz.R rename to inst/tests/test-zzz.R diff --git a/man/antibiogram.Rd b/man/antibiogram.Rd index c3023111a..8f2506c33 100644 --- a/man/antibiogram.Rd +++ b/man/antibiogram.Rd @@ -100,7 +100,7 @@ This function returns a table with values between 0 and 100 for \emph{susceptibi For estimating antimicrobial coverage, especially when creating a WISCA, the outcome might become more reliable by only including the top \emph{n} species encountered in the data. You can filter on this top \emph{n} using \code{\link[=top_n_microorganisms]{top_n_microorganisms()}}. For example, use \code{top_n_microorganisms(your_data, n = 10)} as a pre-processing step to only include the top 10 species in the data. -The numeric values of an antibiogram are stored in a long format as the \link{attribute} \code{long_numeric}. You can retrieve them using \code{attributes(x)$long_numeric}, where \code{x} is the outcome of \code{\link[=antibiogram]{antibiogram()}} or \code{\link[=wisca]{wisca()}}. This is ideal for e.g. advanced plotting. +The numeric values of an antibiogram are stored in a long format as the \link[=attributes]{attribute} \code{long_numeric}. You can retrieve them using \code{attributes(x)$long_numeric}, where \code{x} is the outcome of \code{\link[=antibiogram]{antibiogram()}} or \code{\link[=wisca]{wisca()}}. This is ideal for e.g. advanced plotting. \subsection{Formatting Type}{ The formatting of the 'cells' of the table can be set with the argument \code{formatting_type}. In these examples, \code{5} is the susceptibility percentage (for WISCA: \code{4-6} indicates the confidence level), \code{15} the numerator, and \code{300} the denominator: diff --git a/man/bug_drug_combinations.Rd b/man/bug_drug_combinations.Rd index 3544563ed..8a2206b83 100644 --- a/man/bug_drug_combinations.Rd +++ b/man/bug_drug_combinations.Rd @@ -21,6 +21,8 @@ bug_drug_combinations(x, col_mo = NULL, FUN = mo_shortname, \item{FUN}{the function to call on the \code{mo} column to transform the microorganism codes - the default is \code{\link[=mo_shortname]{mo_shortname()}}} +\item{include_n_rows}{a \link{logical} to indicate if the total number of rows must be included in the output} + \item{...}{arguments passed on to \code{FUN}} \item{translate_ab}{a \link{character} of length 1 containing column names of the \link{antibiotics} data set} diff --git a/man/top_n_microorganisms.Rd b/man/top_n_microorganisms.Rd index 876ea2bff..2c2e87b60 100644 --- a/man/top_n_microorganisms.Rd +++ b/man/top_n_microorganisms.Rd @@ -24,7 +24,7 @@ top_n_microorganisms(x, n, property = "fullname", n_for_each = NULL, This function filters a data set to include only the top \emph{n} microorganisms based on a specified property, such as taxonomic family or genus. For example, it can filter a data set to the top 3 species, or to any species in the top 5 genera, or to the top 3 species in each of the top 5 genera. } \details{ -This function is useful for preprocessing data before creating \link[=antibiograms]{antibiograms} or other analyses that require focused subsets of microbial data. For example, it can filter a data set to only include isolates from the top 10 species. +This function is useful for preprocessing data before creating \link[=antibiogram]{antibiograms} or other analyses that require focused subsets of microbial data. For example, it can filter a data set to only include isolates from the top 10 species. } \examples{ # filter to the top 3 species: diff --git a/tests/tinytest.R b/tests/tinytest.R index cede282c9..48ca4a9dc 100644 --- a/tests/tinytest.R +++ b/tests/tinytest.R @@ -27,21 +27,25 @@ # how to conduct AMR data analysis: https://msberends.github.io/AMR/ # # ==================================================================== # -# we use {tinytest} instead of {testthat} because it does not rely on recent R versions - we want to test on R >= 3.0. +# we use {tinytest} for older R versions to allow unit testing in R >= 3.0.0. -# Run them in RStudio using: -# rstudioapi::jobRunScript("tests/tinytest.R", name = "AMR Unit Tests", workingDir = getwd(), exportEnv = "tinytest_results") +# use this to quickly use testtthat for more informative errors: +# testthat::test_dir("inst/tests") -# test only on GitHub Actions and at using RStudio jobs - not on CRAN as tests are lengthy -if (tryCatch(isTRUE(AMR:::import_fn("isJob", "rstudioapi")()), error = function(e) FALSE) || - identical(Sys.getenv("R_RUN_TINYTEST"), "true")) { - # env var 'R_LIBS_USER' got overwritten during 'R CMD check' in GitHub Actions, so: +# test only on GitHub Actions - not on CRAN as tests are lengthy +if (identical(Sys.getenv("R_RUN_TINYTEST"), "true")) { + # env var 'R_LIBS_USER' gets overwritten during 'R CMD check' in GitHub Actions, so: .libPaths(c(Sys.getenv("R_LIBS_USER_GH_ACTIONS"), .libPaths())) + if (AMR:::pkg_is_available("tinytest", also_load = TRUE)) { + + # load the package library(AMR) + # set language set_AMR_locale("English") - # set some functions if on old R + + # set some functions for older R versions if (getRversion() < "3.2.0") { anyNA <- AMR:::anyNA dir.exists <- AMR:::dir.exists @@ -64,16 +68,15 @@ if (tryCatch(isTRUE(AMR:::import_fn("isJob", "rstudioapi")()), error = function( if (getRversion() < "4.0.0") { deparse1 <- AMR:::deparse1 } - - # start the unit tests + suppressMessages( out <- test_package("AMR", - testdir = ifelse(dir.exists("inst/tinytest"), - "inst/tinytest", - "tinytest" - ), - verbose = FALSE, - color = FALSE + testdir = ifelse(dir.exists("inst/tests"), + "inst/tests", + "tests" + ), + verbose = FALSE, + color = FALSE ) ) cat("\n\nSUMMARY:\n")