mirror of https://github.com/msberends/AMR
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
132 lines
6.8 KiB
132 lines
6.8 KiB
# ==================================================================== # |
|
# TITLE # |
|
# Antimicrobial Resistance (AMR) Data Analysis for R # |
|
# # |
|
# SOURCE # |
|
# https://github.com/msberends/AMR # |
|
# # |
|
# LICENCE # |
|
# (c) 2018-2021 Berends MS, Luz CF et al. # |
|
# Developed at the University of Groningen, the Netherlands, in # |
|
# collaboration with non-profit organisations Certe Medical # |
|
# Diagnostics & Advice, and University Medical Center Groningen. # |
|
# # |
|
# This R package is free software; you can freely use and distribute # |
|
# it for both personal and commercial purposes under the terms of the # |
|
# GNU General Public License version 2.0 (GNU GPL-2), as published by # |
|
# the Free Software Foundation. # |
|
# We created this package for both routine data analysis and academic # |
|
# research and it was publicly released in the hope that it will be # |
|
# useful, but it comes WITHOUT ANY WARRANTY OR LIABILITY. # |
|
# # |
|
# Visit our website for the full manual and a complete tutorial about # |
|
# how to conduct AMR data analysis: https://msberends.github.io/AMR/ # |
|
# ==================================================================== # |
|
|
|
#' Italicise Taxonomic Families, Genera, Species, Subspecies |
|
#' |
|
#' According to the binomial nomenclature, the lowest four taxonomic levels (family, genus, species, subspecies) should be printed in italic. This function finds taxonomic names within strings and makes them italic. |
|
#' @inheritSection lifecycle Stable Lifecycle |
|
#' @param string a [character] (vector) |
|
#' @param type type of conversion of the taxonomic names, either "markdown" or "ansi", see *Details* |
|
#' @details |
|
#' This function finds the taxonomic names and makes them italic based on the [microorganisms] data set. |
|
#' |
|
#' The taxonomic names can be italicised using markdown (the default) by adding `*` before and after the taxonomic names, or using ANSI colours by adding `\033[3m` before and `\033[23m` after the taxonomic names. If multiple ANSI colours are not available, no conversion will occur. |
|
#' |
|
#' This function also supports abbreviation of the genus if it is followed by a species, such as "E. coli" and "K. pneumoniae ozaenae". |
|
#' @inheritSection AMR Read more on Our Website! |
|
#' @export |
|
#' @examples |
|
#' italicise_taxonomy("An overview of Staphylococcus aureus isolates") |
|
#' italicise_taxonomy("An overview of S. aureus isolates") |
|
#' |
|
#' cat(italicise_taxonomy("An overview of S. aureus isolates", type = "ansi")) |
|
#' |
|
#' # since ggplot2 supports no markdown (yet), use |
|
#' # italicise_taxonomy() and the `ggtext` package for titles: |
|
#' \donttest{ |
|
#' if (require("ggplot2") && require("ggtext")) { |
|
#' autoplot(example_isolates$AMC, |
|
#' title = italicise_taxonomy("Amoxi/clav in E. coli")) + |
|
#' theme(plot.title = ggtext::element_markdown()) |
|
#' } |
|
#' } |
|
italicise_taxonomy <- function(string, type = c("markdown", "ansi")) { |
|
if (missing(type)) { |
|
type <- "markdown" |
|
} |
|
meet_criteria(string, allow_class = "character") |
|
meet_criteria(type, allow_class = "character", has_length = 1, is_in = c("markdown", "ansi")) |
|
|
|
if (type == "markdown") { |
|
before <- "*" |
|
after <- "*" |
|
} else if (type == "ansi") { |
|
if (!has_colour()) { |
|
return(string) |
|
} |
|
before <- "\033[3m" |
|
after <- "\033[23m" |
|
} |
|
|
|
vapply(FUN.VALUE = character(1), |
|
string, |
|
function(s) { |
|
s_split <- unlist(strsplit(s, " ")) |
|
|
|
search_strings <- gsub("[^a-zA-Z-]", "", s_split) |
|
|
|
ind_species <- search_strings != "" & |
|
search_strings %in% MO_lookup[which(MO_lookup$rank %in% c("family", |
|
"genus", |
|
"species", |
|
"subspecies", |
|
"infraspecies", |
|
"subsp.")), |
|
"species", |
|
drop = TRUE] |
|
|
|
ind_fullname <- search_strings != "" & |
|
search_strings %in% c(MO_lookup[which(MO_lookup$rank %in% c("family", |
|
"genus", |
|
"species", |
|
"subspecies", |
|
"infraspecies", |
|
"subsp.")), |
|
"fullname", |
|
drop = TRUE], |
|
MO_lookup[which(MO_lookup$rank %in% c("family", |
|
"genus", |
|
"species", |
|
"subspecies", |
|
"infraspecies", |
|
"subsp.")), |
|
"subspecies", |
|
drop = TRUE]) |
|
|
|
# also support E. coli, add "E." to indices |
|
has_previous_genera_abbr <- s_split[which(ind_species) - 1] %like_case% "^[A-Z][.]?$" |
|
ind_species <- c(which(ind_species), which(ind_species)[has_previous_genera_abbr] - 1) |
|
|
|
ind <- c(ind_species, which(ind_fullname)) |
|
|
|
s_split[ind] <- paste0(before, s_split[ind], after) |
|
s_paste <- paste(s_split, collapse = " ") |
|
|
|
# clean up a bit |
|
s_paste <- gsub(paste0(after, " ", before), " ", s_paste, fixed = TRUE) |
|
|
|
s_paste |
|
}, |
|
USE.NAMES = FALSE) |
|
} |
|
|
|
#' @rdname italicise_taxonomy |
|
#' @export |
|
italicize_taxonomy <- function(string, type = c("markdown", "ansi")) { |
|
if (missing(type)) { |
|
type <- "markdown" |
|
} |
|
italicise_taxonomy(string = string, type = type) |
|
}
|
|
|