2021-05-03 10:47:32 +02:00
# ==================================================================== #
# 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.
2021-11-28 23:01:26 +01:00
#' @inheritSection lifecycle Stable Lifecycle
2021-05-12 18:15:03 +02:00
#' @param string a [character] (vector)
2021-05-03 10:47:32 +02:00
#' @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"))
2021-05-12 18:15:03 +02:00
#'
#' # since ggplot2 supports no markdown (yet), use
2021-07-23 21:42:11 +02:00
#' # italicise_taxonomy() and the `ggtext` package for titles:
2021-05-24 09:00:11 +02:00
#' \donttest{
2021-05-12 18:15:03 +02:00
#' if (require("ggplot2") && require("ggtext")) {
2021-07-23 21:42:11 +02:00
#' autoplot(example_isolates$AMC,
#' title = italicise_taxonomy("Amoxi/clav in E. coli")) +
2021-05-12 18:15:03 +02:00
#' theme(plot.title = ggtext::element_markdown())
#' }
2021-05-24 09:00:11 +02:00
#' }
2021-05-03 10:47:32 +02:00
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" ) ) {
2021-05-03 13:06:43 +02:00
if ( missing ( type ) ) {
type <- " markdown"
}
italicise_taxonomy ( string = string , type = type )
2021-05-03 10:47:32 +02:00
}