diff --git a/DESCRIPTION b/DESCRIPTION index 1b14fb83e..b49b83390 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: AMR -Version: 2.1.1.9126 -Date: 2025-01-26 +Version: 2.1.1.9127 +Date: 2025-01-27 Title: Antimicrobial Resistance Data Analysis Description: Functions to simplify and standardise antimicrobial resistance (AMR) data analysis and to work with microbial and antimicrobial properties by diff --git a/NAMESPACE b/NAMESPACE index d9ca17aa2..78f103355 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -221,7 +221,6 @@ export(g.test) export(geom_sir) export(get_AMR_locale) export(get_episode) -export(get_long_numeric_format) export(get_mo_source) export(ggplot_pca) export(ggplot_sir) diff --git a/NEWS.md b/NEWS.md index 5483caddd..9f354c607 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,4 +1,4 @@ -# AMR 2.1.1.9126 +# AMR 2.1.1.9127 *(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).)* @@ -16,7 +16,7 @@ This package now supports not only tools for AMR data analysis in clinical setti * The `antibiotics` data set contains all veterinary antibiotics, such as pradofloxacin and enrofloxacin. All WHOCC codes for veterinary use have been added as well. * `ab_atc()` now supports ATC codes of veterinary antibiotics (that all start with "Q") * `ab_url()` now supports retrieving the WHOCC url of their ATCvet pages -* Support for WISCA antibiograms** +* **Support for WISCA antibiograms** * The `antibiogram()` function now supports creating true Weighted-Incidence Syndromic Combination Antibiograms (WISCA), a powerful Bayesian method for estimating regimen coverage probabilities using pathogen incidence and antimicrobial susceptibility data. WISCA offers improved precision for syndrome-specific treatment, even in datasets with sparse data. A dedicated `wisca()` function is also available for easy usage. * **Major update to fungal taxonomy and tools for mycologists** * MycoBank has now been integrated as the primary taxonomic source for fungi. The `microorganisms` data set has been enriched with new columns (`mycobank`, `mycobank_parent`, and `mycobank_renamed_to`) that provide detailed information for fungal species. diff --git a/PythonPackage/AMR/AMR.egg-info/PKG-INFO b/PythonPackage/AMR/AMR.egg-info/PKG-INFO index b8389d8fe..bbf2afcfc 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.9126 +Version: 2.1.1.9127 Summary: A Python wrapper for the AMR R package Home-page: https://github.com/msberends/AMR Author: Matthijs Berends @@ -123,48 +123,6 @@ print(df) * **ab_name**: Similarly, this function standardises antimicrobial names. The different representations of ciprofloxacin (e.g., "Cipro", "CIP", "J01MA02", and "Ciproxin") are all converted to the standard name, "Ciprofloxacin". - -## Taxonomic Data Sets Now in Python! - -As a Python user, you might like that the most important data sets of the `AMR` R package, `microorganisms`, `antibiotics`, `clinical_breakpoints`, and `example_isolates`, are now available as regular Python data frames: - -```python -AMR.microorganisms -``` - -| mo | fullname | status | kingdom | gbif | gbif_parent | gbif_renamed_to | prevalence | -|--------------|------------------------------------|----------|----------|-----------|-------------|-----------------|------------| -| B_GRAMN | (unknown Gram-negatives) | unknown | Bacteria | None | None | None | 2.0 | -| B_GRAMP | (unknown Gram-positives) | unknown | Bacteria | None | None | None | 2.0 | -| B_ANAER-NEG | (unknown anaerobic Gram-negatives) | unknown | Bacteria | None | None | None | 2.0 | -| B_ANAER-POS | (unknown anaerobic Gram-positives) | unknown | Bacteria | None | None | None | 2.0 | -| B_ANAER | (unknown anaerobic bacteria) | unknown | Bacteria | None | None | None | 2.0 | -| ... | ... | ... | ... | ... | ... | ... | ... | -| B_ZYMMN_POMC | Zymomonas pomaceae | accepted | Bacteria | 10744418 | 3221412 | None | 2.0 | -| B_ZYMPH | Zymophilus | synonym | Bacteria | None | 9475166 | None | 2.0 | -| B_ZYMPH_PCVR | Zymophilus paucivorans | synonym | Bacteria | None | None | None | 2.0 | -| B_ZYMPH_RFFN | Zymophilus raffinosivorans | synonym | Bacteria | None | None | None | 2.0 | -| F_ZYZYG | Zyzygomyces | unknown | Fungi | None | 7581 | None | 2.0 | - -```python -AMR.antibiotics -``` - -| ab | cid | name | group | oral_ddd | oral_units | iv_ddd | iv_units | -|-----|-------------|----------------------|----------------------------|----------|------------|--------|----------| -| AMA | 4649.0 | 4-aminosalicylic acid| Antimycobacterials | 12.00 | g | NaN | None | -| ACM | 6450012.0 | Acetylmidecamycin | Macrolides/lincosamides | NaN | None | NaN | None | -| ASP | 49787020.0 | Acetylspiramycin | Macrolides/lincosamides | NaN | None | NaN | None | -| ALS | 8954.0 | Aldesulfone sodium | Other antibacterials | 0.33 | g | NaN | None | -| AMK | 37768.0 | Amikacin | Aminoglycosides | NaN | None | 1.0 | g | -| ... | ... | ... | ... | ... | ... | ... | ... | -| VIR | 11979535.0 | Virginiamycine | Other antibacterials | NaN | None | NaN | None | -| VOR | 71616.0 | Voriconazole | Antifungals/antimycotics | 0.40 | g | 0.4 | g | -| XBR | 72144.0 | Xibornol | Other antibacterials | NaN | None | NaN | None | -| ZID | 77846445.0 | Zidebactam | Other antibacterials | NaN | None | NaN | None | -| ZFD | NaN | Zoliflodacin | None | NaN | None | NaN | None | - - ## Calculating AMR ```python @@ -215,6 +173,47 @@ print(result2b) In this example, we generate an antibiogram by selecting various antibiotics. +## Taxonomic Data Sets Now in Python! + +As a Python user, you might like that the most important data sets of the `AMR` R package, `microorganisms`, `antibiotics`, `clinical_breakpoints`, and `example_isolates`, are now available as regular Python data frames: + +```python +AMR.microorganisms +``` + +| mo | fullname | status | kingdom | gbif | gbif_parent | gbif_renamed_to | prevalence | +|--------------|------------------------------------|----------|----------|-----------|-------------|-----------------|------------| +| B_GRAMN | (unknown Gram-negatives) | unknown | Bacteria | None | None | None | 2.0 | +| B_GRAMP | (unknown Gram-positives) | unknown | Bacteria | None | None | None | 2.0 | +| B_ANAER-NEG | (unknown anaerobic Gram-negatives) | unknown | Bacteria | None | None | None | 2.0 | +| B_ANAER-POS | (unknown anaerobic Gram-positives) | unknown | Bacteria | None | None | None | 2.0 | +| B_ANAER | (unknown anaerobic bacteria) | unknown | Bacteria | None | None | None | 2.0 | +| ... | ... | ... | ... | ... | ... | ... | ... | +| B_ZYMMN_POMC | Zymomonas pomaceae | accepted | Bacteria | 10744418 | 3221412 | None | 2.0 | +| B_ZYMPH | Zymophilus | synonym | Bacteria | None | 9475166 | None | 2.0 | +| B_ZYMPH_PCVR | Zymophilus paucivorans | synonym | Bacteria | None | None | None | 2.0 | +| B_ZYMPH_RFFN | Zymophilus raffinosivorans | synonym | Bacteria | None | None | None | 2.0 | +| F_ZYZYG | Zyzygomyces | unknown | Fungi | None | 7581 | None | 2.0 | + +```python +AMR.antibiotics +``` + +| ab | cid | name | group | oral_ddd | oral_units | iv_ddd | iv_units | +|-----|-------------|----------------------|----------------------------|----------|------------|--------|----------| +| AMA | 4649.0 | 4-aminosalicylic acid| Antimycobacterials | 12.00 | g | NaN | None | +| ACM | 6450012.0 | Acetylmidecamycin | Macrolides/lincosamides | NaN | None | NaN | None | +| ASP | 49787020.0 | Acetylspiramycin | Macrolides/lincosamides | NaN | None | NaN | None | +| ALS | 8954.0 | Aldesulfone sodium | Other antibacterials | 0.33 | g | NaN | None | +| AMK | 37768.0 | Amikacin | Aminoglycosides | NaN | None | 1.0 | g | +| ... | ... | ... | ... | ... | ... | ... | ... | +| VIR | 11979535.0 | Virginiamycine | Other antibacterials | NaN | None | NaN | None | +| VOR | 71616.0 | Voriconazole | Antifungals/antimycotics | 0.40 | g | 0.4 | g | +| XBR | 72144.0 | Xibornol | Other antibacterials | NaN | None | NaN | None | +| ZID | 77846445.0 | Zidebactam | Other antibacterials | NaN | None | NaN | None | +| ZFD | NaN | Zoliflodacin | None | NaN | None | NaN | None | + + # Conclusion With the `AMR` Python package, Python users can now effortlessly call R functions from the `AMR` R package. This eliminates the need for complex `rpy2` configurations and provides a clean, easy-to-use interface for antimicrobial resistance analysis. The examples provided above demonstrate how this can be applied to typical workflows, such as standardising microorganism and antimicrobial names or calculating resistance. diff --git a/PythonPackage/AMR/AMR/datasets.py b/PythonPackage/AMR/AMR/datasets.py index 6d1dccd68..efc5d87d8 100644 --- a/PythonPackage/AMR/AMR/datasets.py +++ b/PythonPackage/AMR/AMR/datasets.py @@ -19,6 +19,9 @@ r_lib_path = os.path.join(venv_path, "R_libs") 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) r_amr_lib_path = base._libPaths()[0] @@ -46,6 +49,9 @@ if r_amr_version != python_amr_version: except Exception as e: print(f"{BLUE}AMR:{RESET} Could not update: {e}{RESET}", flush=True) +# Restore warnings to default +base.options(warn = 0) + print(f"{BLUE}AMR:{RESET} Setting up R environment and AMR datasets...", flush=True) # Activate the automatic conversion between R and pandas DataFrames diff --git a/PythonPackage/AMR/README.md b/PythonPackage/AMR/README.md index c28f09998..de26a764e 100755 --- a/PythonPackage/AMR/README.md +++ b/PythonPackage/AMR/README.md @@ -95,48 +95,6 @@ print(df) * **ab_name**: Similarly, this function standardises antimicrobial names. The different representations of ciprofloxacin (e.g., "Cipro", "CIP", "J01MA02", and "Ciproxin") are all converted to the standard name, "Ciprofloxacin". - -## Taxonomic Data Sets Now in Python! - -As a Python user, you might like that the most important data sets of the `AMR` R package, `microorganisms`, `antibiotics`, `clinical_breakpoints`, and `example_isolates`, are now available as regular Python data frames: - -```python -AMR.microorganisms -``` - -| mo | fullname | status | kingdom | gbif | gbif_parent | gbif_renamed_to | prevalence | -|--------------|------------------------------------|----------|----------|-----------|-------------|-----------------|------------| -| B_GRAMN | (unknown Gram-negatives) | unknown | Bacteria | None | None | None | 2.0 | -| B_GRAMP | (unknown Gram-positives) | unknown | Bacteria | None | None | None | 2.0 | -| B_ANAER-NEG | (unknown anaerobic Gram-negatives) | unknown | Bacteria | None | None | None | 2.0 | -| B_ANAER-POS | (unknown anaerobic Gram-positives) | unknown | Bacteria | None | None | None | 2.0 | -| B_ANAER | (unknown anaerobic bacteria) | unknown | Bacteria | None | None | None | 2.0 | -| ... | ... | ... | ... | ... | ... | ... | ... | -| B_ZYMMN_POMC | Zymomonas pomaceae | accepted | Bacteria | 10744418 | 3221412 | None | 2.0 | -| B_ZYMPH | Zymophilus | synonym | Bacteria | None | 9475166 | None | 2.0 | -| B_ZYMPH_PCVR | Zymophilus paucivorans | synonym | Bacteria | None | None | None | 2.0 | -| B_ZYMPH_RFFN | Zymophilus raffinosivorans | synonym | Bacteria | None | None | None | 2.0 | -| F_ZYZYG | Zyzygomyces | unknown | Fungi | None | 7581 | None | 2.0 | - -```python -AMR.antibiotics -``` - -| ab | cid | name | group | oral_ddd | oral_units | iv_ddd | iv_units | -|-----|-------------|----------------------|----------------------------|----------|------------|--------|----------| -| AMA | 4649.0 | 4-aminosalicylic acid| Antimycobacterials | 12.00 | g | NaN | None | -| ACM | 6450012.0 | Acetylmidecamycin | Macrolides/lincosamides | NaN | None | NaN | None | -| ASP | 49787020.0 | Acetylspiramycin | Macrolides/lincosamides | NaN | None | NaN | None | -| ALS | 8954.0 | Aldesulfone sodium | Other antibacterials | 0.33 | g | NaN | None | -| AMK | 37768.0 | Amikacin | Aminoglycosides | NaN | None | 1.0 | g | -| ... | ... | ... | ... | ... | ... | ... | ... | -| VIR | 11979535.0 | Virginiamycine | Other antibacterials | NaN | None | NaN | None | -| VOR | 71616.0 | Voriconazole | Antifungals/antimycotics | 0.40 | g | 0.4 | g | -| XBR | 72144.0 | Xibornol | Other antibacterials | NaN | None | NaN | None | -| ZID | 77846445.0 | Zidebactam | Other antibacterials | NaN | None | NaN | None | -| ZFD | NaN | Zoliflodacin | None | NaN | None | NaN | None | - - ## Calculating AMR ```python @@ -187,6 +145,47 @@ print(result2b) In this example, we generate an antibiogram by selecting various antibiotics. +## Taxonomic Data Sets Now in Python! + +As a Python user, you might like that the most important data sets of the `AMR` R package, `microorganisms`, `antibiotics`, `clinical_breakpoints`, and `example_isolates`, are now available as regular Python data frames: + +```python +AMR.microorganisms +``` + +| mo | fullname | status | kingdom | gbif | gbif_parent | gbif_renamed_to | prevalence | +|--------------|------------------------------------|----------|----------|-----------|-------------|-----------------|------------| +| B_GRAMN | (unknown Gram-negatives) | unknown | Bacteria | None | None | None | 2.0 | +| B_GRAMP | (unknown Gram-positives) | unknown | Bacteria | None | None | None | 2.0 | +| B_ANAER-NEG | (unknown anaerobic Gram-negatives) | unknown | Bacteria | None | None | None | 2.0 | +| B_ANAER-POS | (unknown anaerobic Gram-positives) | unknown | Bacteria | None | None | None | 2.0 | +| B_ANAER | (unknown anaerobic bacteria) | unknown | Bacteria | None | None | None | 2.0 | +| ... | ... | ... | ... | ... | ... | ... | ... | +| B_ZYMMN_POMC | Zymomonas pomaceae | accepted | Bacteria | 10744418 | 3221412 | None | 2.0 | +| B_ZYMPH | Zymophilus | synonym | Bacteria | None | 9475166 | None | 2.0 | +| B_ZYMPH_PCVR | Zymophilus paucivorans | synonym | Bacteria | None | None | None | 2.0 | +| B_ZYMPH_RFFN | Zymophilus raffinosivorans | synonym | Bacteria | None | None | None | 2.0 | +| F_ZYZYG | Zyzygomyces | unknown | Fungi | None | 7581 | None | 2.0 | + +```python +AMR.antibiotics +``` + +| ab | cid | name | group | oral_ddd | oral_units | iv_ddd | iv_units | +|-----|-------------|----------------------|----------------------------|----------|------------|--------|----------| +| AMA | 4649.0 | 4-aminosalicylic acid| Antimycobacterials | 12.00 | g | NaN | None | +| ACM | 6450012.0 | Acetylmidecamycin | Macrolides/lincosamides | NaN | None | NaN | None | +| ASP | 49787020.0 | Acetylspiramycin | Macrolides/lincosamides | NaN | None | NaN | None | +| ALS | 8954.0 | Aldesulfone sodium | Other antibacterials | 0.33 | g | NaN | None | +| AMK | 37768.0 | Amikacin | Aminoglycosides | NaN | None | 1.0 | g | +| ... | ... | ... | ... | ... | ... | ... | ... | +| VIR | 11979535.0 | Virginiamycine | Other antibacterials | NaN | None | NaN | None | +| VOR | 71616.0 | Voriconazole | Antifungals/antimycotics | 0.40 | g | 0.4 | g | +| XBR | 72144.0 | Xibornol | Other antibacterials | NaN | None | NaN | None | +| ZID | 77846445.0 | Zidebactam | Other antibacterials | NaN | None | NaN | None | +| ZFD | NaN | Zoliflodacin | None | NaN | None | NaN | None | + + # Conclusion With the `AMR` Python package, Python users can now effortlessly call R functions from the `AMR` R package. This eliminates the need for complex `rpy2` configurations and provides a clean, easy-to-use interface for antimicrobial resistance analysis. The examples provided above demonstrate how this can be applied to typical workflows, such as standardising microorganism and antimicrobial names or calculating resistance. diff --git a/PythonPackage/AMR/dist/AMR-2.1.1.9126-py3-none-any.whl b/PythonPackage/AMR/dist/AMR-2.1.1.9126-py3-none-any.whl deleted file mode 100644 index 90ab360cc..000000000 Binary files a/PythonPackage/AMR/dist/AMR-2.1.1.9126-py3-none-any.whl and /dev/null differ diff --git a/PythonPackage/AMR/dist/AMR-2.1.1.9127-py3-none-any.whl b/PythonPackage/AMR/dist/AMR-2.1.1.9127-py3-none-any.whl new file mode 100644 index 000000000..c15c6ef5b Binary files /dev/null and b/PythonPackage/AMR/dist/AMR-2.1.1.9127-py3-none-any.whl differ diff --git a/PythonPackage/AMR/dist/amr-2.1.1.9126.tar.gz b/PythonPackage/AMR/dist/amr-2.1.1.9126.tar.gz deleted file mode 100644 index 9a3ee31d6..000000000 Binary files a/PythonPackage/AMR/dist/amr-2.1.1.9126.tar.gz and /dev/null differ diff --git a/PythonPackage/AMR/dist/amr-2.1.1.9127.tar.gz b/PythonPackage/AMR/dist/amr-2.1.1.9127.tar.gz new file mode 100644 index 000000000..95c0b8d3d Binary files /dev/null and b/PythonPackage/AMR/dist/amr-2.1.1.9127.tar.gz differ diff --git a/PythonPackage/AMR/setup.py b/PythonPackage/AMR/setup.py index e1ceb8d41..49c451f84 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.9126', + version='2.1.1.9127', packages=find_packages(), install_requires=[ 'rpy2', diff --git a/R/antibiogram.R b/R/antibiogram.R index 6115a5db4..503273433 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. #' -#' Using [get_long_numeric_format()], the antibiogram is converted to a long format containing numeric values. This is ideal for e.g. advanced plotting. +#' 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. #' #' ### Formatting Type #' @@ -345,7 +345,8 @@ #' #' ab1 <- antibiogram(example_isolates, #' antibiotics = c("AMC", "CIP", "TZP", "TZP+TOB"), -#' mo_transform = "gramstain" +#' mo_transform = "gramstain", +#' wisca = TRUE #' ) #' ab2 <- antibiogram(example_isolates, #' antibiotics = c("AMC", "CIP", "TZP", "TZP+TOB"), @@ -648,14 +649,14 @@ antibiogram.default <- function(x, } if (wisca == TRUE) { - out_numeric <- out %pm>% + long_numeric <- out %pm>% pm_summarise(percentage = percentage, lower = lower, upper = upper, numerator = numerator, total = total) } else { - out_numeric <- out %pm>% + long_numeric <- out %pm>% pm_summarise(percentage = numerator / total, numerator = numerator, total = total) @@ -727,7 +728,7 @@ antibiogram.default <- function(x, out } out$ab <- ab_naming_function(out$ab, t = ab_transform, l = language, s = sep) - out_numeric$ab <- ab_naming_function(out_numeric$ab, t = ab_transform, l = language, s = sep) + long_numeric$ab <- ab_naming_function(long_numeric$ab, t = ab_transform, l = language, s = sep) # transform long to wide long_to_wide <- function(object) { @@ -801,14 +802,14 @@ antibiogram.default <- function(x, out <- as_original_data_class(new_df, class(x), extra_class = "antibiogram") rownames(out) <- NULL - rownames(out_numeric) <- NULL + rownames(long_numeric) <- NULL structure(out, has_syndromic_group = has_syndromic_group, combine_SI = combine_SI, wisca = wisca, conf_interval = conf_interval, - out_numeric = as_original_data_class(out_numeric, class(out)) + long_numeric = as_original_data_class(long_numeric, class(out)) ) } @@ -868,7 +869,7 @@ antibiogram.grouped_df <- function(x, conf_interval = conf_interval, interval_side = interval_side, info = i == 1 && info == TRUE) - new_out_numeric <- attributes(new_out)$out_numeric + new_long_numeric <- attributes(new_out)$long_numeric if (i == 1) progress$tick() @@ -878,7 +879,7 @@ antibiogram.grouped_df <- function(x, # remove first column 'Pathogen' (in whatever language) new_out <- new_out[, -1, drop = FALSE] - new_out_numeric <- new_out_numeric[, -1, drop = FALSE] + new_long_numeric <- new_long_numeric[, -1, drop = FALSE] # add group names to data set for (col in rev(seq_len(NCOL(groups) - 1))) { @@ -886,17 +887,17 @@ antibiogram.grouped_df <- function(x, col_value <- groups[i, col, drop = TRUE] new_out[, col_name] <- col_value new_out <- new_out[, c(col_name, setdiff(names(new_out), col_name))] # set place to 1st col - new_out_numeric[, col_name] <- col_value - new_out_numeric <- new_out_numeric[, c(col_name, setdiff(names(new_out_numeric), col_name))] # set place to 1st col + new_long_numeric[, col_name] <- col_value + new_long_numeric <- new_long_numeric[, c(col_name, setdiff(names(new_long_numeric), col_name))] # set place to 1st col } if (i == 1) { # the first go out <- new_out - out_numeric <- new_out_numeric + long_numeric <- new_long_numeric } else { out <- rbind_AMR(out, new_out) - out_numeric <- rbind_AMR(out_numeric, new_out_numeric) + long_numeric <- rbind_AMR(long_numeric, new_long_numeric) } } @@ -907,7 +908,7 @@ antibiogram.grouped_df <- function(x, combine_SI = isTRUE(combine_SI), wisca = isTRUE(wisca), conf_interval = conf_interval, - out_numeric = as_original_data_class(out_numeric, class(x))) + long_numeric = as_original_data_class(long_numeric, class(x))) } #' @export @@ -947,14 +948,6 @@ wisca <- function(x, info = info) } -#' @export -#' @param antibiogram the outcome of [antibiogram()] or [wisca()] -#' @rdname antibiogram -get_long_numeric_format <- function(antibiogram) { - stop_ifnot(inherits(antibiogram, "antibiogram"), "This function only works for the output of `antibiogram()` and `wisca()`.", call = FALSE) - attributes(antibiogram)$out_numeric -} - calculate_priors <- function(data, combine_SI = TRUE) { # Ensure data has required columns stopifnot(all(c("mo", "total_rows", "total", "S") %in% colnames(data))) @@ -1009,9 +1002,10 @@ tbl_format_footer.antibiogram <- function(x, ...) { #' @export #' @rdname antibiogram plot.antibiogram <- function(x, ...) { - df <- attributes(x)$out_numeric + df <- attributes(x)$long_numeric if (!"mo" %in% colnames(df)) { - stop_("Plotting antibiograms using plot() is only possible if they were not created using dplyr groups. Consider using `get_long_numeric_format()` to retrieve raw antibiogram values.") + stop_("Plotting antibiograms using `plot()` is only possible if they were not created using dplyr groups. See `?antibiogram` for how to retrieve numeric values in a long format for advanced plotting.", + call = FALSE) } if ("syndromic_group" %in% colnames(df)) { # barplot in base R does not support facets - paste columns together @@ -1063,9 +1057,10 @@ barplot.antibiogram <- function(height, ...) { #' @rdname antibiogram # will be exported using s3_register() in R/zzz.R autoplot.antibiogram <- function(object, ...) { - df <- attributes(object)$out_numeric + df <- attributes(object)$long_numeric if (!"mo" %in% colnames(df)) { - stop_("Plotting antibiograms using plot() is only possible if they were not created using dplyr groups. Consider using `get_long_numeric_format()` to retrieve raw antibiogram values.") + stop_("Plotting antibiograms using `autoplot()` is only possible if they were not created using dplyr groups. See `?antibiogram` for how to retrieve numeric values in a long format for advanced plotting.", + call = FALSE) } out <- ggplot2::ggplot(df, mapping = ggplot2::aes( @@ -1107,7 +1102,7 @@ knit_print.antibiogram <- function(x, italicise = TRUE, na = getOption("knitr.ka meet_criteria(italicise, allow_class = "logical", has_length = 1) meet_criteria(na, allow_class = "character", has_length = 1, allow_NA = TRUE) - if (isTRUE(italicise) && "mo" %in% colnames(attributes(x)$out_numeric)) { + if (isTRUE(italicise) && "mo" %in% colnames(attributes(x)$long_numeric)) { # make all microorganism names italic, according to nomenclature names_col <- ifelse(isTRUE(attributes(x)$has_syndromic_group), 2, 1) x[[names_col]] <- italicise_taxonomy(x[[names_col]], type = "markdown") diff --git a/data-raw/_generate_python_wrapper.sh b/data-raw/_generate_python_wrapper.sh index 841d57b6e..b9b629f8d 100644 --- a/data-raw/_generate_python_wrapper.sh +++ b/data-raw/_generate_python_wrapper.sh @@ -63,6 +63,9 @@ r_lib_path = os.path.join(venv_path, "R_libs") 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) r_amr_lib_path = base._libPaths()[0] @@ -90,6 +93,9 @@ if r_amr_version != python_amr_version: except Exception as e: print(f"{BLUE}AMR:{RESET} Could not update: {e}{RESET}", flush=True) +# Restore warnings to default +base.options(warn = 0) + print(f"{BLUE}AMR:{RESET} Setting up R environment and AMR datasets...", flush=True) # Activate the automatic conversion between R and pandas DataFrames diff --git a/data-raw/gpt_training_text_v2.1.1.9126.txt b/data-raw/gpt_training_text_v2.1.1.9127.txt similarity index 99% rename from data-raw/gpt_training_text_v2.1.1.9126.txt rename to data-raw/gpt_training_text_v2.1.1.9127.txt index f16964c22..e030aade0 100644 --- a/data-raw/gpt_training_text_v2.1.1.9126.txt +++ b/data-raw/gpt_training_text_v2.1.1.9127.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.9126. Remember this whenever someone asks which AMR package version you’re at. +First and foremost, you are trained on version 2.1.1.9127. Remember this whenever someone asks which AMR package version you’re at. -------------------------------- THE PART HEREAFTER CONTAINS CONTENTS FROM FILE 'NAMESPACE': @@ -228,7 +228,6 @@ export(g.test) export(geom_sir) export(get_AMR_locale) export(get_episode) -export(get_long_numeric_format) export(get_mo_source) export(ggplot_pca) export(ggplot_sir) @@ -1609,7 +1608,6 @@ THE PART HEREAFTER CONTAINS CONTENTS FROM FILE 'man/antibiogram.Rd': \name{antibiogram} \alias{antibiogram} \alias{wisca} -\alias{get_long_numeric_format} \alias{plot.antibiogram} \alias{autoplot.antibiogram} \alias{knit_print.antibiogram} @@ -1641,8 +1639,6 @@ wisca(x, antibiotics = where(is.sir), mo_transform = "shortname", combine_SI = TRUE, sep = " + ", simulations = 1000, info = interactive()) -get_long_numeric_format(antibiogram) - \method{plot}{antibiogram}(x, ...) \method{autoplot}{antibiogram}(object, ...) @@ -1689,8 +1685,6 @@ get_long_numeric_format(antibiogram) \item{info}{a \link{logical} to indicate info should be printed - the default is \code{TRUE} only in interactive mode} -\item{antibiogram}{the outcome of \code{\link[=antibiogram]{antibiogram()}} or \code{\link[=wisca]{wisca()}}} - \item{...}{when used in \link[knitr:kable]{R Markdown or Quarto}: arguments passed on to \code{\link[knitr:kable]{knitr::kable()}} (otherwise, has no use)} \item{object}{an \code{\link[=antibiogram]{antibiogram()}} object} @@ -1711,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. -Using \code{\link[=get_long_numeric_format]{get_long_numeric_format()}}, the antibiogram is converted to a long format containing numeric values. This is ideal for e.g. advanced plotting. +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. \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: @@ -1985,7 +1979,8 @@ if (requireNamespace("knitr")) { ab1 <- antibiogram(example_isolates, antibiotics = c("AMC", "CIP", "TZP", "TZP+TOB"), - mo_transform = "gramstain" + mo_transform = "gramstain", + wisca = TRUE ) ab2 <- antibiogram(example_isolates, antibiotics = c("AMC", "CIP", "TZP", "TZP+TOB"), @@ -8596,48 +8591,6 @@ print(df) * **ab_name**: Similarly, this function standardises antimicrobial names. The different representations of ciprofloxacin (e.g., "Cipro", "CIP", "J01MA02", and "Ciproxin") are all converted to the standard name, "Ciprofloxacin". - -## Taxonomic Data Sets Now in Python! - -As a Python user, you might like that the most important data sets of the `AMR` R package, `microorganisms`, `antibiotics`, `clinical_breakpoints`, and `example_isolates`, are now available as regular Python data frames: - -```python -AMR.microorganisms -``` - -| mo | fullname | status | kingdom | gbif | gbif_parent | gbif_renamed_to | prevalence | -|--------------|------------------------------------|----------|----------|-----------|-------------|-----------------|------------| -| B_GRAMN | (unknown Gram-negatives) | unknown | Bacteria | None | None | None | 2.0 | -| B_GRAMP | (unknown Gram-positives) | unknown | Bacteria | None | None | None | 2.0 | -| B_ANAER-NEG | (unknown anaerobic Gram-negatives) | unknown | Bacteria | None | None | None | 2.0 | -| B_ANAER-POS | (unknown anaerobic Gram-positives) | unknown | Bacteria | None | None | None | 2.0 | -| B_ANAER | (unknown anaerobic bacteria) | unknown | Bacteria | None | None | None | 2.0 | -| ... | ... | ... | ... | ... | ... | ... | ... | -| B_ZYMMN_POMC | Zymomonas pomaceae | accepted | Bacteria | 10744418 | 3221412 | None | 2.0 | -| B_ZYMPH | Zymophilus | synonym | Bacteria | None | 9475166 | None | 2.0 | -| B_ZYMPH_PCVR | Zymophilus paucivorans | synonym | Bacteria | None | None | None | 2.0 | -| B_ZYMPH_RFFN | Zymophilus raffinosivorans | synonym | Bacteria | None | None | None | 2.0 | -| F_ZYZYG | Zyzygomyces | unknown | Fungi | None | 7581 | None | 2.0 | - -```python -AMR.antibiotics -``` - -| ab | cid | name | group | oral_ddd | oral_units | iv_ddd | iv_units | -|-----|-------------|----------------------|----------------------------|----------|------------|--------|----------| -| AMA | 4649.0 | 4-aminosalicylic acid| Antimycobacterials | 12.00 | g | NaN | None | -| ACM | 6450012.0 | Acetylmidecamycin | Macrolides/lincosamides | NaN | None | NaN | None | -| ASP | 49787020.0 | Acetylspiramycin | Macrolides/lincosamides | NaN | None | NaN | None | -| ALS | 8954.0 | Aldesulfone sodium | Other antibacterials | 0.33 | g | NaN | None | -| AMK | 37768.0 | Amikacin | Aminoglycosides | NaN | None | 1.0 | g | -| ... | ... | ... | ... | ... | ... | ... | ... | -| VIR | 11979535.0 | Virginiamycine | Other antibacterials | NaN | None | NaN | None | -| VOR | 71616.0 | Voriconazole | Antifungals/antimycotics | 0.40 | g | 0.4 | g | -| XBR | 72144.0 | Xibornol | Other antibacterials | NaN | None | NaN | None | -| ZID | 77846445.0 | Zidebactam | Other antibacterials | NaN | None | NaN | None | -| ZFD | NaN | Zoliflodacin | None | NaN | None | NaN | None | - - ## Calculating AMR ```python @@ -8688,6 +8641,47 @@ print(result2b) In this example, we generate an antibiogram by selecting various antibiotics. +## Taxonomic Data Sets Now in Python! + +As a Python user, you might like that the most important data sets of the `AMR` R package, `microorganisms`, `antibiotics`, `clinical_breakpoints`, and `example_isolates`, are now available as regular Python data frames: + +```python +AMR.microorganisms +``` + +| mo | fullname | status | kingdom | gbif | gbif_parent | gbif_renamed_to | prevalence | +|--------------|------------------------------------|----------|----------|-----------|-------------|-----------------|------------| +| B_GRAMN | (unknown Gram-negatives) | unknown | Bacteria | None | None | None | 2.0 | +| B_GRAMP | (unknown Gram-positives) | unknown | Bacteria | None | None | None | 2.0 | +| B_ANAER-NEG | (unknown anaerobic Gram-negatives) | unknown | Bacteria | None | None | None | 2.0 | +| B_ANAER-POS | (unknown anaerobic Gram-positives) | unknown | Bacteria | None | None | None | 2.0 | +| B_ANAER | (unknown anaerobic bacteria) | unknown | Bacteria | None | None | None | 2.0 | +| ... | ... | ... | ... | ... | ... | ... | ... | +| B_ZYMMN_POMC | Zymomonas pomaceae | accepted | Bacteria | 10744418 | 3221412 | None | 2.0 | +| B_ZYMPH | Zymophilus | synonym | Bacteria | None | 9475166 | None | 2.0 | +| B_ZYMPH_PCVR | Zymophilus paucivorans | synonym | Bacteria | None | None | None | 2.0 | +| B_ZYMPH_RFFN | Zymophilus raffinosivorans | synonym | Bacteria | None | None | None | 2.0 | +| F_ZYZYG | Zyzygomyces | unknown | Fungi | None | 7581 | None | 2.0 | + +```python +AMR.antibiotics +``` + +| ab | cid | name | group | oral_ddd | oral_units | iv_ddd | iv_units | +|-----|-------------|----------------------|----------------------------|----------|------------|--------|----------| +| AMA | 4649.0 | 4-aminosalicylic acid| Antimycobacterials | 12.00 | g | NaN | None | +| ACM | 6450012.0 | Acetylmidecamycin | Macrolides/lincosamides | NaN | None | NaN | None | +| ASP | 49787020.0 | Acetylspiramycin | Macrolides/lincosamides | NaN | None | NaN | None | +| ALS | 8954.0 | Aldesulfone sodium | Other antibacterials | 0.33 | g | NaN | None | +| AMK | 37768.0 | Amikacin | Aminoglycosides | NaN | None | 1.0 | g | +| ... | ... | ... | ... | ... | ... | ... | ... | +| VIR | 11979535.0 | Virginiamycine | Other antibacterials | NaN | None | NaN | None | +| VOR | 71616.0 | Voriconazole | Antifungals/antimycotics | 0.40 | g | 0.4 | g | +| XBR | 72144.0 | Xibornol | Other antibacterials | NaN | None | NaN | None | +| ZID | 77846445.0 | Zidebactam | Other antibacterials | NaN | None | NaN | None | +| ZFD | NaN | Zoliflodacin | None | NaN | None | NaN | None | + + # Conclusion With the `AMR` Python package, Python users can now effortlessly call R functions from the `AMR` R package. This eliminates the need for complex `rpy2` configurations and provides a clean, easy-to-use interface for antimicrobial resistance analysis. The examples provided above demonstrate how this can be applied to typical workflows, such as standardising microorganism and antimicrobial names or calculating resistance. diff --git a/inst/tinytest/test-_deprecated.R b/inst/tinytest/test-_deprecated.R index a9e1139c9..95bfcd045 100644 --- a/inst/tinytest/test-_deprecated.R +++ b/inst/tinytest/test-_deprecated.R @@ -27,4 +27,5 @@ # how to conduct AMR data analysis: https://msberends.github.io/AMR/ # # ==================================================================== # - +expect_warning(example_isolates[, ab_class("mycobact")]) +expect_warning(example_isolates[, ab_selector(name %like% "trim")]) diff --git a/inst/tinytest/test-ab_selectors.R b/inst/tinytest/test-ab_selectors.R index e41f138d3..ac1a45837 100644 --- a/inst/tinytest/test-ab_selectors.R +++ b/inst/tinytest/test-ab_selectors.R @@ -28,7 +28,8 @@ # ==================================================================== # # antibiotic class selectors -expect_equal(ncol(example_isolates[, ab_class("antimyco"), drop = FALSE]), 1, tolerance = 0.5) +expect_equal(ncol(example_isolates[, amr_class("antimyco"), drop = FALSE]), 1, tolerance = 0.5) +expect_equal(ncol(example_isolates[, amr_selector(name %like% "trim"), drop = FALSE]), 2, tolerance = 0.5) expect_equal(ncol(example_isolates[, aminoglycosides(), drop = FALSE]), 4, tolerance = 0.5) expect_equal(ncol(example_isolates[, aminopenicillins(), drop = FALSE]), 2, tolerance = 0.5) expect_equal(ncol(example_isolates[, betalactams(), drop = FALSE]), 16, tolerance = 0.5) diff --git a/inst/tinytest/test-antibiogram.R b/inst/tinytest/test-antibiogram.R index 6614a902e..8725436c1 100644 --- a/inst/tinytest/test-antibiogram.R +++ b/inst/tinytest/test-antibiogram.R @@ -128,9 +128,7 @@ expect_silent(plot(ab5)) expect_silent(plot(ab6)) expect_silent(plot(ab7)) expect_silent(plot(ab8)) -if (AMR:::pkg_is_available("dplyr", min_version = "1.0.0", also_load = TRUE)) { - expect_silent(plot(ab9)) -} +expect_error(plot(ab9)) if (AMR:::pkg_is_available("ggplot2")) { expect_inherits(ggplot2::autoplot(ab1), "gg") @@ -141,7 +139,5 @@ if (AMR:::pkg_is_available("ggplot2")) { expect_inherits(ggplot2::autoplot(ab6), "gg") expect_inherits(ggplot2::autoplot(ab7), "gg") expect_inherits(ggplot2::autoplot(ab8), "gg") - if (AMR:::pkg_is_available("dplyr", min_version = "1.0.0", also_load = TRUE)) { - expect_inherits(ggplot2::autoplot(ab9), "gg") - } + expect_error(ggplot2::autoplot(ab9)) } diff --git a/man/antibiogram.Rd b/man/antibiogram.Rd index bc63ccfd2..c3023111a 100644 --- a/man/antibiogram.Rd +++ b/man/antibiogram.Rd @@ -3,7 +3,6 @@ \name{antibiogram} \alias{antibiogram} \alias{wisca} -\alias{get_long_numeric_format} \alias{plot.antibiogram} \alias{autoplot.antibiogram} \alias{knit_print.antibiogram} @@ -35,8 +34,6 @@ wisca(x, antibiotics = where(is.sir), mo_transform = "shortname", combine_SI = TRUE, sep = " + ", simulations = 1000, info = interactive()) -get_long_numeric_format(antibiogram) - \method{plot}{antibiogram}(x, ...) \method{autoplot}{antibiogram}(object, ...) @@ -83,8 +80,6 @@ get_long_numeric_format(antibiogram) \item{info}{a \link{logical} to indicate info should be printed - the default is \code{TRUE} only in interactive mode} -\item{antibiogram}{the outcome of \code{\link[=antibiogram]{antibiogram()}} or \code{\link[=wisca]{wisca()}}} - \item{...}{when used in \link[knitr:kable]{R Markdown or Quarto}: arguments passed on to \code{\link[knitr:kable]{knitr::kable()}} (otherwise, has no use)} \item{object}{an \code{\link[=antibiogram]{antibiogram()}} object} @@ -105,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. -Using \code{\link[=get_long_numeric_format]{get_long_numeric_format()}}, the antibiogram is converted to a long format containing numeric values. This is ideal for e.g. advanced plotting. +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. \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: @@ -379,7 +374,8 @@ if (requireNamespace("knitr")) { ab1 <- antibiogram(example_isolates, antibiotics = c("AMC", "CIP", "TZP", "TZP+TOB"), - mo_transform = "gramstain" + mo_transform = "gramstain", + wisca = TRUE ) ab2 <- antibiogram(example_isolates, antibiotics = c("AMC", "CIP", "TZP", "TZP+TOB"), diff --git a/vignettes/AMR_for_Python.Rmd b/vignettes/AMR_for_Python.Rmd index c28f09998..de26a764e 100755 --- a/vignettes/AMR_for_Python.Rmd +++ b/vignettes/AMR_for_Python.Rmd @@ -95,48 +95,6 @@ print(df) * **ab_name**: Similarly, this function standardises antimicrobial names. The different representations of ciprofloxacin (e.g., "Cipro", "CIP", "J01MA02", and "Ciproxin") are all converted to the standard name, "Ciprofloxacin". - -## Taxonomic Data Sets Now in Python! - -As a Python user, you might like that the most important data sets of the `AMR` R package, `microorganisms`, `antibiotics`, `clinical_breakpoints`, and `example_isolates`, are now available as regular Python data frames: - -```python -AMR.microorganisms -``` - -| mo | fullname | status | kingdom | gbif | gbif_parent | gbif_renamed_to | prevalence | -|--------------|------------------------------------|----------|----------|-----------|-------------|-----------------|------------| -| B_GRAMN | (unknown Gram-negatives) | unknown | Bacteria | None | None | None | 2.0 | -| B_GRAMP | (unknown Gram-positives) | unknown | Bacteria | None | None | None | 2.0 | -| B_ANAER-NEG | (unknown anaerobic Gram-negatives) | unknown | Bacteria | None | None | None | 2.0 | -| B_ANAER-POS | (unknown anaerobic Gram-positives) | unknown | Bacteria | None | None | None | 2.0 | -| B_ANAER | (unknown anaerobic bacteria) | unknown | Bacteria | None | None | None | 2.0 | -| ... | ... | ... | ... | ... | ... | ... | ... | -| B_ZYMMN_POMC | Zymomonas pomaceae | accepted | Bacteria | 10744418 | 3221412 | None | 2.0 | -| B_ZYMPH | Zymophilus | synonym | Bacteria | None | 9475166 | None | 2.0 | -| B_ZYMPH_PCVR | Zymophilus paucivorans | synonym | Bacteria | None | None | None | 2.0 | -| B_ZYMPH_RFFN | Zymophilus raffinosivorans | synonym | Bacteria | None | None | None | 2.0 | -| F_ZYZYG | Zyzygomyces | unknown | Fungi | None | 7581 | None | 2.0 | - -```python -AMR.antibiotics -``` - -| ab | cid | name | group | oral_ddd | oral_units | iv_ddd | iv_units | -|-----|-------------|----------------------|----------------------------|----------|------------|--------|----------| -| AMA | 4649.0 | 4-aminosalicylic acid| Antimycobacterials | 12.00 | g | NaN | None | -| ACM | 6450012.0 | Acetylmidecamycin | Macrolides/lincosamides | NaN | None | NaN | None | -| ASP | 49787020.0 | Acetylspiramycin | Macrolides/lincosamides | NaN | None | NaN | None | -| ALS | 8954.0 | Aldesulfone sodium | Other antibacterials | 0.33 | g | NaN | None | -| AMK | 37768.0 | Amikacin | Aminoglycosides | NaN | None | 1.0 | g | -| ... | ... | ... | ... | ... | ... | ... | ... | -| VIR | 11979535.0 | Virginiamycine | Other antibacterials | NaN | None | NaN | None | -| VOR | 71616.0 | Voriconazole | Antifungals/antimycotics | 0.40 | g | 0.4 | g | -| XBR | 72144.0 | Xibornol | Other antibacterials | NaN | None | NaN | None | -| ZID | 77846445.0 | Zidebactam | Other antibacterials | NaN | None | NaN | None | -| ZFD | NaN | Zoliflodacin | None | NaN | None | NaN | None | - - ## Calculating AMR ```python @@ -187,6 +145,47 @@ print(result2b) In this example, we generate an antibiogram by selecting various antibiotics. +## Taxonomic Data Sets Now in Python! + +As a Python user, you might like that the most important data sets of the `AMR` R package, `microorganisms`, `antibiotics`, `clinical_breakpoints`, and `example_isolates`, are now available as regular Python data frames: + +```python +AMR.microorganisms +``` + +| mo | fullname | status | kingdom | gbif | gbif_parent | gbif_renamed_to | prevalence | +|--------------|------------------------------------|----------|----------|-----------|-------------|-----------------|------------| +| B_GRAMN | (unknown Gram-negatives) | unknown | Bacteria | None | None | None | 2.0 | +| B_GRAMP | (unknown Gram-positives) | unknown | Bacteria | None | None | None | 2.0 | +| B_ANAER-NEG | (unknown anaerobic Gram-negatives) | unknown | Bacteria | None | None | None | 2.0 | +| B_ANAER-POS | (unknown anaerobic Gram-positives) | unknown | Bacteria | None | None | None | 2.0 | +| B_ANAER | (unknown anaerobic bacteria) | unknown | Bacteria | None | None | None | 2.0 | +| ... | ... | ... | ... | ... | ... | ... | ... | +| B_ZYMMN_POMC | Zymomonas pomaceae | accepted | Bacteria | 10744418 | 3221412 | None | 2.0 | +| B_ZYMPH | Zymophilus | synonym | Bacteria | None | 9475166 | None | 2.0 | +| B_ZYMPH_PCVR | Zymophilus paucivorans | synonym | Bacteria | None | None | None | 2.0 | +| B_ZYMPH_RFFN | Zymophilus raffinosivorans | synonym | Bacteria | None | None | None | 2.0 | +| F_ZYZYG | Zyzygomyces | unknown | Fungi | None | 7581 | None | 2.0 | + +```python +AMR.antibiotics +``` + +| ab | cid | name | group | oral_ddd | oral_units | iv_ddd | iv_units | +|-----|-------------|----------------------|----------------------------|----------|------------|--------|----------| +| AMA | 4649.0 | 4-aminosalicylic acid| Antimycobacterials | 12.00 | g | NaN | None | +| ACM | 6450012.0 | Acetylmidecamycin | Macrolides/lincosamides | NaN | None | NaN | None | +| ASP | 49787020.0 | Acetylspiramycin | Macrolides/lincosamides | NaN | None | NaN | None | +| ALS | 8954.0 | Aldesulfone sodium | Other antibacterials | 0.33 | g | NaN | None | +| AMK | 37768.0 | Amikacin | Aminoglycosides | NaN | None | 1.0 | g | +| ... | ... | ... | ... | ... | ... | ... | ... | +| VIR | 11979535.0 | Virginiamycine | Other antibacterials | NaN | None | NaN | None | +| VOR | 71616.0 | Voriconazole | Antifungals/antimycotics | 0.40 | g | 0.4 | g | +| XBR | 72144.0 | Xibornol | Other antibacterials | NaN | None | NaN | None | +| ZID | 77846445.0 | Zidebactam | Other antibacterials | NaN | None | NaN | None | +| ZFD | NaN | Zoliflodacin | None | NaN | None | NaN | None | + + # Conclusion With the `AMR` Python package, Python users can now effortlessly call R functions from the `AMR` R package. This eliminates the need for complex `rpy2` configurations and provides a clean, easy-to-use interface for antimicrobial resistance analysis. The examples provided above demonstrate how this can be applied to typical workflows, such as standardising microorganism and antimicrobial names or calculating resistance.