mirror of https://github.com/msberends/AMR.git
133 lines
6.8 KiB
R
133 lines
6.8 KiB
R
# ==================================================================== #
|
|
# TITLE #
|
|
# Antimicrobial Resistance (AMR) Data Analysis for R #
|
|
# #
|
|
# SOURCE #
|
|
# https://github.com/msberends/AMR #
|
|
# #
|
|
# LICENCE #
|
|
# (c) 2018-2022 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)
|
|
}
|