From 398c5bdc4f7d8aac36684543fc4fceaab5ecdb9d Mon Sep 17 00:00:00 2001 From: "Matthijs S. Berends" Date: Sun, 15 Sep 2019 22:57:30 +0200 Subject: [PATCH] (v0.7.1.9073) as.mo() self-learning algorithm --- .Rbuildignore | 1 + .gitignore | 1 + .gitlab-ci.yml | 2 +- DESCRIPTION | 7 +- NAMESPACE | 2 + NEWS.md | 19 +- R/like.R | 26 +- R/misc.R | 4 +- R/mo.R | 1431 ++++++++-------- R/mo2.R | 1489 ----------------- R/mo_history.R | 238 +-- R/mo_property.R | 2 +- R/zzz.R | 6 +- _pkgdown.yml | 2 +- codecov.yml | 1 + data-raw/internals.R | 15 +- docs/LICENSE-text.html | 2 +- .../figure-html/unnamed-chunk-4-1.png | Bin 224399 -> 95360 bytes .../figure-html/unnamed-chunk-6-1.png | Bin 105743 -> 61344 bytes docs/articles/index.html | 2 +- docs/authors.html | 6 +- docs/index.html | 2 +- docs/reference/as.mo.html | 19 +- docs/reference/index.html | 10 +- docs/reference/like.html | 17 +- docs/reference/translate.html | 2 +- inst/mo_history/mo_history.csv | 1 + man/as.mo.Rd | 19 +- man/like.Rd | 10 +- tests/testthat/test-mo.R | 2 + vignettes/benchmarks.Rmd | 52 +- 31 files changed, 1030 insertions(+), 2360 deletions(-) delete mode 100644 R/mo2.R create mode 100644 inst/mo_history/mo_history.csv diff --git a/.Rbuildignore b/.Rbuildignore index 87240fb2..e2e1dfe2 100755 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -21,3 +21,4 @@ ^pkgdown$ ^public$ ^data-raw$ +R/aa_test.R$ diff --git a/.gitignore b/.gitignore index 9a2c3cb6..3b12302a 100755 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,4 @@ packrat/src/ cran-comments.md data-raw/taxon.tab data-raw/DSMZ_bactnames.xlsx +R/aa_test.R diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 8e301830..bcb8cfd5 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -118,7 +118,7 @@ coverage: # install missing and outdated packages - Rscript -e 'source(".gitlab-ci.R"); gl_update_pkg_all(repos = "https://cran.rstudio.com", quiet = TRUE, install_pkgdown = FALSE)' # codecov token is set in https://gitlab.com/msberends/AMR/settings/ci_cd - - Rscript -e "cc <- covr::package_coverage(line_exclusions = list('R/atc_online.R', 'R/mo_source.R')); covr::codecov(coverage = cc, token = '$codecov'); cat('Code coverage:', covr::percent_coverage(cc))" + - Rscript -e "cc <- covr::package_coverage(); covr::codecov(coverage = cc, token = '$codecov'); cat('Code coverage:', covr::percent_coverage(cc))" coverage: '/Code coverage: \d+\.\d+/' pages: diff --git a/DESCRIPTION b/DESCRIPTION index 55bf8cad..68ab9046 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: AMR -Version: 0.7.1.9072 -Date: 2019-09-12 +Version: 0.7.1.9073 +Date: 2019-09-15 Title: Antimicrobial Resistance Analysis Authors@R: c( person(role = c("aut", "cre"), @@ -17,6 +17,8 @@ Authors@R: c( family = "Glasner", given = "Corinna", email = "c.glasner@umcg.nl", comment = c(ORCID = "0000-0003-1241-1328")), person(role = "ctb", family = "Hassing", given = c("Erwin", "E.", "A."), email = "e.hassing@certe.nl"), + person(role = "ctb", + family = "Hazenberg", given = c("Eric", "H.", "L.", "C.", "M."), email = "e.hazenberg@jbz.nl"), person(role = "ctb", family = "Lenglet", given = "Annick", email = "annick.lenglet@amsterdam.msf.org"), person(role = "ctb", @@ -57,3 +59,4 @@ License: GPL-2 | file LICENSE Encoding: UTF-8 LazyData: true RoxygenNote: 6.1.1 +StagedInstall: false diff --git a/NAMESPACE b/NAMESPACE index 5d8cef10..f2181bc6 100755 --- a/NAMESPACE +++ b/NAMESPACE @@ -58,6 +58,7 @@ S3method(type_sum,mic) S3method(type_sum,mo) S3method(type_sum,rsi) export("%like%") +export("%like_case%") export(ab_atc) export(ab_atc_group1) export(ab_atc_group2) @@ -85,6 +86,7 @@ export(availability) export(brmo) export(bug_drug_combinations) export(catalogue_of_life_version) +export(clear_mo_history) export(count_I) export(count_IR) export(count_R) diff --git a/NEWS.md b/NEWS.md index 84de5238..9b7331d8 100755 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,5 @@ -# AMR 0.7.1.9072 -Last updated: 12-Sep-2019 +# AMR 0.7.1.9073 +Last updated: 15-Sep-2019 ### Breaking * Determination of first isolates now **excludes** all 'unknown' microorganisms at default, i.e. microbial code `"UNKNOWN"`. They can be included with the new parameter `include_unknown`: @@ -72,6 +72,14 @@ ``` ### Changed +* Many algorithm improvements for `as.mo()` (of which some led to additions to the `microorganisms` data set): + * Self-learning algorithm - the function now gains experience from previously determined microorganism IDs and learns from it (yielding 80-95% speed improvement for any guess after the first try) + * Big improvement for misspelled input + * These new trivial names known to the field are now understood: meningococcus, gonococcus, pneumococcus + * Updated to the latest taxonomic data (updated to August 2019, from the International Journal of Systematic and Evolutionary Microbiology + * Added support for Viridans Group Streptococci (VGS) and Milleri Group Streptococci (MGS) + * Added support for 5,000 new fungi + * Added support for unknown yeasts and fungi * Renamed data set `septic_patients` to `example_isolates` * Function `eucast_rules()`: * Fixed a bug for *Yersinia pseudotuberculosis* @@ -83,13 +91,6 @@ * Removed class `atc` - using `as.atc()` is now deprecated in favour of `ab_atc()` and this will return a character, not the `atc` class anymore * Removed deprecated functions `abname()`, `ab_official()`, `atc_name()`, `atc_official()`, `atc_property()`, `atc_tradenames()`, `atc_trivial_nl()` * Fix and speed improvement for `mo_shortname()` -* Algorithm improvements for `as.mo()` (by which some additions were made to the `microorganisms` data set: - * Big improvement for misspelled input - * These new trivial names known to the field are now understood: meningococcus, gonococcus, pneumococcus - * Updated to the latest taxonomic data (updated to August 2019, from the International Journal of Systematic and Evolutionary Microbiology - * Added support for Viridans Group Streptococci (VGS) and Milleri Group Streptococci (MGS) - * Added support for 5,000 new fungi - * Added support for unknown yeasts and fungi * Fix for using `mo_*` functions where the coercion uncertainties and failures would not be available through `mo_uncertainties()` and `mo_failures()` anymore * Deprecated the `country` parameter of `mdro()` in favour of the already existing `guideline` parameter to support multiple guidelines within one country * The `name` of `RIF` is now Rifampicin instead of Rifampin diff --git a/R/like.R b/R/like.R index 6819e44c..eb4836c7 100755 --- a/R/like.R +++ b/R/like.R @@ -21,7 +21,7 @@ #' Pattern Matching #' -#' Convenient wrapper around \code{\link[base]{grep}} to match a pattern: \code{a \%like\% b}. It always returns a \code{logical} vector and is always case-insensitive. Also, \code{pattern} (\code{b}) can be as long as \code{x} (\code{a}) to compare items of each index in both vectors. +#' Convenient wrapper around \code{\link[base]{grep}} to match a pattern: \code{a \%like\% b}. It always returns a \code{logical} vector and is always case-insensitive (use \code{a \%like_case\% b} for case-sensitive matching). Also, \code{pattern} (\code{b}) can be as long as \code{x} (\code{a}) to compare items of each index in both vectors, or can both have the same length to iterate over all cases. #' @inheritParams base::grepl #' @return A \code{logical} vector #' @name like @@ -53,14 +53,14 @@ #' left_join_microorganisms() %>% #' filter(genus %like% '^ent') %>% #' freq(genus, species) -like <- function(x, pattern) { +like <- function(x, pattern, ignore.case = TRUE) { if (length(pattern) > 1) { if (length(x) != length(pattern)) { if (length(x) == 1) { x <- rep(x, length(pattern)) } # return TRUE for every 'x' that matches any 'pattern', FALSE otherwise - res <- sapply(pattern, function(pttrn) x %like% pttrn) + res <- sapply(pattern, function(pttrn) base::grepl(pttrn, x, ignore.case = ignore.case)) res2 <- as.logical(rowSums(res)) # get only first item of every hit in pattern res2[duplicated(res)] <- FALSE @@ -71,9 +71,9 @@ like <- function(x, pattern) { res <- vector(length = length(pattern)) for (i in 1:length(res)) { if (is.factor(x[i])) { - res[i] <- as.integer(x[i]) %in% base::grep(pattern[i], levels(x[i]), ignore.case = TRUE) + res[i] <- as.integer(x[i]) %in% base::grep(pattern[i], levels(x[i]), ignore.case = ignore.case) } else { - res[i] <- base::grepl(pattern[i], x[i], ignore.case = TRUE) + res[i] <- base::grepl(pattern[i], x[i], ignore.case = ignore.case) } } return(res) @@ -82,16 +82,24 @@ like <- function(x, pattern) { # the regular way how grepl works; just one pattern against one or more x if (is.factor(x)) { - as.integer(x) %in% base::grep(pattern, levels(x), ignore.case = TRUE) + as.integer(x) %in% base::grep(pattern, levels(x), ignore.case = ignore.case) } else { - tryCatch(base::grepl(pattern, x, ignore.case = TRUE), + tryCatch(base::grepl(pattern, x, ignore.case = ignore.case), error = function(e) ifelse(test = grepl("Invalid regexp", e$message), # try with perl = TRUE: - yes = return(base::grepl(pattern, x, ignore.case = TRUE, perl = TRUE)), + yes = return(base::grepl(pattern, x, ignore.case = ignore.case, perl = TRUE)), no = stop(e$message))) } } #' @rdname like #' @export -"%like%" <- like +"%like%" <- function(x, pattern) { + like(x, pattern, ignore.case = TRUE) +} + +#' @rdname like +#' @export +"%like_case%" <- function(x, pattern) { + like(x, pattern, ignore.case = FALSE) +} diff --git a/R/misc.R b/R/misc.R index ffe9ee5b..214521ec 100755 --- a/R/misc.R +++ b/R/misc.R @@ -41,8 +41,8 @@ percent <- function(x, round = 1, force_zero = FALSE, decimal.mark = getOption(" big.mark <- " " } } - x <- percent_clean(x = x, round = round, force_zero = force_zero, - decimal.mark = decimal.mark, big.mark = big.mark, ...) + percent_clean(x = x, round = round, force_zero = force_zero, + decimal.mark = decimal.mark, big.mark = big.mark, ...) } #' @importFrom crayon blue bold red diff --git a/R/mo.R b/R/mo.R index 520fc225..c22412a8 100755 --- a/R/mo.R +++ b/R/mo.R @@ -37,7 +37,7 @@ #' @keywords mo Becker becker Lancefield lancefield guess #' @details #' \strong{General info} \cr -#' A microbial ID from this package (class: \code{mo}) typically looks like these examples:\cr +#' A microorganism ID from this package (class: \code{mo}) typically looks like these examples:\cr #' \preformatted{ #' Code Full name #' --------------- -------------------------------------- @@ -57,16 +57,15 @@ #' #' Use the \code{\link{mo_property}_*} functions to get properties based on the returned code, see Examples. #' -#' The algorithm uses data from the Catalogue of Life (see below) and from one other source (see \code{?microorganisms}). +#' The algorithm uses data from the Catalogue of Life (see below) and from one other source (see \code{\link{microorganisms}}). +#' +#' \strong{Self-learning algoritm} \cr +#' The \code{as.mo()} function gains experience from previously determined microorganism IDs and learns from it. This drastically improves both speed and reliability. Use \code{clear_mo_history()} to reset the algorithms. Only experience from your current \code{AMR} package version is used. This is done because in the future the taxonomic tree (which is included in this package) may change for any organism and it consequently has to rebuild its knowledge. +#' +#' Usually, any guess after the first try runs 80-95\% faster than the first try. +#' +# \emph{For now, learning only works per session. If R is closed or terminated, the algorithms reset. This might be resolved in a future version.} #' -# /// THIS PART WAS DELETED FROM THE MAN PAGE -# \strong{Self-learning algoritm} \cr -# The \code{as.mo()} function gains experience from previously determined microbial IDs and learns from it. This drastically improves both speed and reliability. Use \code{clean_mo_history()} to reset the algorithms. Only experience from your current \code{AMR} package version is used. This is done because in the future the taxonomic tree (which is included in this package) may change for any organism and it consequently has to rebuild its knowledge. -# -# Usually, any guess after the first try runs 80-95\% faster than the first try. -# -# For now, learning only works per session. If R is closed or terminated, the algorithms reset. This will probably be resolved in a next version. -# //// #' \strong{Intelligent rules} \cr #' This function uses intelligent rules to help getting fast and logical results. It tries to find matches in this order: #' \itemize{ @@ -105,7 +104,7 @@ #' #' Use \code{mo_uncertainties()} to get a data.frame with all values that were coerced to a valid value, but with uncertainty. #' -#' Use \code{mo_renamed()} to get a vector with all values that could be coerced based on an old, previously accepted taxonomic name. +#' Use \code{mo_renamed()} to get a data.frame with all values that could be coerced based on an old, previously accepted taxonomic name. #' #' \strong{Microbial prevalence of pathogens in humans} \cr #' The intelligent rules take into account microbial prevalence of pathogens in humans. It uses three groups and all (sub)species are in only one group. These groups are: @@ -117,7 +116,7 @@ #' #' Group 1 contains all common Gram positives and Gram negatives, like all Enterobacteriaceae and e.g. \emph{Pseudomonas} and \emph{Legionella}. #' -#' Group 2 probably contains less microbial pathogens; all other members of phyla that were found in humans in the Northern Netherlands between 2001 and 2018. +#' Group 2 contains probably less pathogenic microorganisms; all other members of phyla that were found in humans in the Northern Netherlands between 2001 and 2018. #' @inheritSection catalogue_of_life Catalogue of Life # (source as a section here, so it can be inherited by other man pages:) #' @section Source: @@ -199,7 +198,10 @@ as.mo <- function(x, Becker = FALSE, Lancefield = FALSE, allow_uncertain = TRUE, x[tolower(as.character(paste0(x, ""))) %in% c("", "xxx", "na", "nan")] <- NA_character_ uncertainty_level <- translate_allow_uncertain(allow_uncertain) - # mo_hist <- get_mo_history(x, uncertainty_level, force = isTRUE(list(...)$force_mo_history)) + mo_hist <- get_mo_history(x, + uncertainty_level, + force = isTRUE(list(...)$force_mo_history), + disable = isTRUE(list(...)$disable_mo_history)) if (mo_source_isvalid(reference_df) & isFALSE(Becker) @@ -227,35 +229,27 @@ as.mo <- function(x, Becker = FALSE, Lancefield = FALSE, allow_uncertain = TRUE, pull("mo") ) - } else if (all(x %in% AMR::microorganisms$mo) + } else if (all(x %in% microorganismsDT$mo) & isFALSE(Becker) & isFALSE(Lancefield)) { y <- x - # } else if (!any(is.na(mo_hist)) - # & isFALSE(Becker) - # & isFALSE(Lancefield)) { - # # check previously found results - # y <- mo_hist + } else if (!any(is.na(mo_hist)) + & isFALSE(Becker) + & isFALSE(Lancefield)) { + # check previously found results + y <- mo_hist } else if (all(tolower(x) %in% microorganismsDT$fullname_lower) & isFALSE(Becker) & isFALSE(Lancefield)) { # we need special treatment for very prevalent full names, they are likely! (case insensitive) # e.g. as.mo("Staphylococcus aureus") - y <- microorganismsDT[prevalence == 1][data.table(fullname_lower = tolower(x)), - on = "fullname_lower", - "mo"][[1]] - if (any(is.na(y))) { - y[is.na(y)] <- microorganismsDT[prevalence == 2][data.table(fullname_lower = tolower(x[is.na(y)])), - on = "fullname_lower", - "mo"][[1]] - } - if (any(is.na(y))) { - y[is.na(y)] <- microorganismsDT[prevalence == 3][data.table(fullname_lower = tolower(x[is.na(y)])), - on = "fullname_lower", - "mo"][[1]] - } + y <- data.frame(fullname_lower = tolower(x), + stringsAsFactors = FALSE) %>% + left_join(microorganismsDT, by = "fullname_lower") %>% + pull(mo) + # save them to history set_mo_history(x, y, 0, force = isTRUE(list(...)$force_mo_history)) @@ -289,7 +283,9 @@ is.mo <- function(x) { # param initial_search logical - is FALSE when coming from uncertain tries, which uses exec_as.mo internally too # param dyslexia_mode logical - also check for characters that resemble others # param force_mo_history logical - whether found result must be saved with set_mo_history (default FALSE on non-interactive sessions) +# param disable_mo_history logical - whether set_mo_history and get_mo_history should be ignored # param debug logical - show different lookup texts while searching +# param uncertain_check_prevalence integer - the prevalence to check for when running for uncertain results, follows microorganisms$prevalence exec_as.mo <- function(x, Becker = FALSE, Lancefield = FALSE, @@ -299,7 +295,9 @@ exec_as.mo <- function(x, initial_search = TRUE, dyslexia_mode = FALSE, force_mo_history = FALSE, - debug = FALSE) { + disable_mo_history = FALSE, + debug = FALSE, + reference_data_to_use = microorganismsDT) { if (!"AMR" %in% base::.packages()) { require("AMR") @@ -336,7 +334,6 @@ exec_as.mo <- function(x, } } - notes <- character(0) uncertainties <- data.frame(uncertainty = integer(0), input = character(0), fullname = character(0), @@ -359,7 +356,7 @@ exec_as.mo <- function(x, & !identical(x, "xxx")] # conversion of old MO codes from v0.5.0 (ITIS) to later versions (Catalogue of Life) - if (any(x %like% "^[BFP]_[A-Z]{3,7}") & !all(x %in% microorganisms$mo)) { + if (any(x %like_case% "^[BFP]_[A-Z]{3,7}") & !all(x %in% microorganisms$mo)) { leftpart <- gsub("^([BFP]_[A-Z]{3,7}).*", "\\1", x) if (any(leftpart %in% names(mo_codes_v0.5.0))) { rightpart <- gsub("^[BFP]_[A-Z]{3,7}(.*)", "\\1", x) @@ -417,40 +414,45 @@ exec_as.mo <- function(x, pull(property) ) - } else if (all(x %in% AMR::microorganisms$mo)) { + } else if (all(x %in% reference_data_to_use$mo)) { # existing mo codes when not looking for property "mo", like mo_genus("B_ESCHR_COL") - y <- microorganismsDT[prevalence == 1][data.table(mo = x), on = "mo", ..property][[1]] + y <- reference_data_to_use[prevalence == 1][data.table(mo = x), on = "mo", ..property][[1]] if (any(is.na(y))) { - y[is.na(y)] <- microorganismsDT[prevalence == 2][data.table(mo = x[is.na(y)]), + y[is.na(y)] <- reference_data_to_use[prevalence == 2][data.table(mo = x[is.na(y)]), on = "mo", ..property][[1]] } if (any(is.na(y))) { - y[is.na(y)] <- microorganismsDT[prevalence == 3][data.table(mo = x[is.na(y)]), + y[is.na(y)] <- reference_data_to_use[prevalence == 3][data.table(mo = x[is.na(y)]), on = "mo", ..property][[1]] } x <- y - # } else if (all(x %in% read_mo_history(uncertainty_level, - # force = force_mo_history)$x)) { - # # previously found code - # x <- microorganismsDT[data.table(mo = get_mo_history(x, - # uncertainty_level, - # force = force_mo_history)), - # on = "mo", ..property][[1]] + } else if (all(toupper(x) %in% read_mo_history(uncertainty_level, + force = force_mo_history, + disable = disable_mo_history)$x)) { - } else if (all(tolower(x) %in% microorganismsDT$fullname_lower)) { + # previously found code + x <- data.frame(mo = get_mo_history(x, + uncertainty_level, + force = force_mo_history, + disable = disable_mo_history), + stringsAsFactors = FALSE) %>% + left_join(AMR::microorganisms, by = "mo") %>% + pull(property) + + } else if (all(tolower(x) %in% reference_data_to_use$fullname_lower)) { # we need special treatment for very prevalent full names, they are likely! # e.g. as.mo("Staphylococcus aureus") - y <- microorganismsDT[prevalence == 1][data.table(fullname_lower = tolower(x)), on = "fullname_lower", ..property][[1]] + y <- reference_data_to_use[prevalence == 1][data.table(fullname_lower = tolower(x)), on = "fullname_lower", ..property][[1]] if (any(is.na(y))) { - y[is.na(y)] <- microorganismsDT[prevalence == 2][data.table(fullname_lower = tolower(x[is.na(y)])), + y[is.na(y)] <- reference_data_to_use[prevalence == 2][data.table(fullname_lower = tolower(x[is.na(y)])), on = "fullname_lower", ..property][[1]] } if (any(is.na(y))) { - y[is.na(y)] <- microorganismsDT[prevalence == 3][data.table(fullname_lower = tolower(x[is.na(y)])), + y[is.na(y)] <- reference_data_to_use[prevalence == 3][data.table(fullname_lower = tolower(x[is.na(y)])), on = "fullname_lower", ..property][[1]] } @@ -460,45 +462,59 @@ exec_as.mo <- function(x, # commonly used MO codes y <- as.data.table(AMR::microorganisms.codes)[data.table(code = toupper(x)), on = "code", ] # save them to history - set_mo_history(x, y$mo, 0, force = force_mo_history) + set_mo_history(x, y$mo, 0, force = force_mo_history, disable = disable_mo_history) - x <- microorganismsDT[data.table(mo = y[["mo"]]), on = "mo", ..property][[1]] + x <- reference_data_to_use[data.table(mo = y[["mo"]]), on = "mo", ..property][[1]] } else if (!all(x %in% AMR::microorganisms[, property])) { - strip_whitespace <- function(x) { + strip_whitespace <- function(x, dyslexia_mode) { # all whitespaces (tab, new lines, etc.) should be one space # and spaces before and after should be omitted - trimws(gsub("[\\s]+", " ", x, perl = TRUE), which = "both") + trimmed <- trimws(gsub("[\\s]+", " ", x, perl = TRUE), which = "both") + # also, make sure the trailing and leading characters are a-z or 0-9 + # in case of non-regex + if (dyslexia_mode == FALSE) { + trimmed <- gsub("^[^a-zA-Z0-9)(]+", "", trimmed) + trimmed <- gsub("[^a-zA-Z0-9)(]+$", "", trimmed) + } + trimmed } - x <- strip_whitespace(x) + x <- strip_whitespace(x, dyslexia_mode) x_backup <- x + # from here on case-insensitive + x <- tolower(x) + # remove spp and species - x <- gsub(" +(spp.?|ssp.?|sp.? |ss ?.?|subsp.?|subspecies|biovar |serovar |species)", " ", x_backup, ignore.case = TRUE) - x <- strip_whitespace(x) + x <- gsub(" +(spp.?|ssp.?|sp.? |ss ?.?|subsp.?|subspecies|biovar |serovar |species)", " ", x, ignore.case = TRUE) + x <- gsub("(spp.?|ssp.?|subsp.?|subspecies|biovar|serovar|species)", "", x, ignore.case = TRUE) + x <- strip_whitespace(x, dyslexia_mode) x_backup_without_spp <- x x_species <- paste(x, "species") # translate to English for supported languages of mo_property - x <- gsub("(gruppe|groep|grupo|gruppo|groupe)", "group", x, ignore.case = TRUE) - x <- gsub("(vergroen)[a-z]*", "viridans", x, ignore.case = TRUE) - x <- gsub("(hefe|gist|gisten|levadura|lievito|fermento|levure)[a-z]*", "yeast", x, ignore.case = TRUE) - x <- gsub("(schimmels?|mofo|molde|stampo|moisissure|fungi)[a-z]*", "fungus", x, ignore.case = TRUE) - x <- gsub("Fungus[ph|f]rya", "Fungiphrya", x, ignore.case = TRUE) + x <- gsub("(gruppe|groep|grupo|gruppo|groupe)", "group", x) + # no groups and complexes as ending + x <- gsub("(complex|group)$", "", x) + x <- gsub("((an)?aero+b)[a-z]*", "", x) + x <- gsub("(vergroen)[a-z]*", "viridans", x) + x <- gsub("(hefe|gist|gisten|levadura|lievito|fermento|levure)[a-z]*", "yeast", x) + x <- gsub("(schimmels?|mofo|molde|stampo|moisissure|fungi)[a-z]*", "fungus", x) + x <- gsub("fungus[ph|f]rya", "fungiphrya", x) # remove non-text in case of "E. coli" except dots and spaces x <- gsub("[^.a-zA-Z0-9/ \\-]+", "", x) # replace minus by a space x <- gsub("-+", " ", x) # replace hemolytic by haemolytic - x <- gsub("ha?emoly", "haemoly", x, ignore.case = TRUE) + x <- gsub("ha?emoly", "haemoly", x) # place minus back in streptococci - x <- gsub("(alpha|beta|gamma).?ha?emoly", "\\1-haemoly", x, ignore.case = TRUE) + x <- gsub("(alpha|beta|gamma).?ha?emoly", "\\1-haemoly", x) # remove genus as first word - x <- gsub("^genus ", "", x, ignore.case = TRUE) + x <- gsub("^genus ", "", x) # remove 'uncertain' like texts - x <- trimws(gsub("(uncertain|susp[ie]c[a-z]+|verdacht)", "", x, ignore.case = TRUE)) + x <- trimws(gsub("(uncertain|susp[ie]c[a-z]+|verdacht)", "", x)) # allow characters that resemble others = dyslexia_mode ---- if (dyslexia_mode == TRUE) { x <- tolower(x) @@ -510,27 +526,27 @@ exec_as.mo <- function(x, x <- gsub("u+", "u+", x) # allow any ending of -um, -us, -ium, -icum, -ius, -icus, -ica and -a (needs perl for the negative backward lookup): x <- gsub("(u\\+\\(c\\|k\\|q\\|qu\\+\\|s\\|z\\|x\\|ks\\)\\+)(?![a-z])", - "(u[s|m]|[iy][ck]?u[ms]|[iy]?[ck]?a)", x, ignore.case = TRUE, perl = TRUE) + "(u[s|m]|[iy][ck]?u[ms]|[iy]?[ck]?a)", x, perl = TRUE) x <- gsub("(\\[iy\\]\\+\\(c\\|k\\|q\\|qu\\+\\|s\\|z\\|x\\|ks\\)\\+a\\+)(?![a-z])", - "(u[s|m]|[iy][ck]?u[ms]|[iy]?[ck]?a)", x, ignore.case = TRUE, perl = TRUE) + "(u[s|m]|[iy][ck]?u[ms]|[iy]?[ck]?a)", x, perl = TRUE) x <- gsub("(\\[iy\\]\\+u\\+m)(?![a-z])", - "(u[s|m]|[iy][ck]?u[ms]|[iy]?[ck]?a)", x, ignore.case = TRUE, perl = TRUE) - x <- gsub("e+", "e+", x, ignore.case = TRUE) - x <- gsub("o+", "o+", x, ignore.case = TRUE) + "(u[s|m]|[iy][ck]?u[ms]|[iy]?[ck]?a)", x, perl = TRUE) + x <- gsub("e+", "e+", x) + x <- gsub("o+", "o+", x) x <- gsub("(.)\\1+", "\\1+", x) # allow ending in -en or -us - x <- gsub("e\\+n(?![a-z[])", "(e+n|u+(c|k|q|qu|s|z|x|ks)+)", x, ignore.case = TRUE, perl = TRUE) + x <- gsub("e\\+n(?![a-z[])", "(e+n|u+(c|k|q|qu|s|z|x|ks)+)", x, perl = TRUE) # if the input is longer than 10 characters, allow any constant between all characters, as some might have forgotten a character # this will allow "Pasteurella damatis" to be correctly read as "Pasteurella dagmatis". constants <- paste(letters[!letters %in% c("a", "e", "i", "o", "u")], collapse = "") - #x[nchar(x_backup_without_spp) > 10] <- gsub("([a-z])([a-z])", paste0("\\1[", constants, "]?\\2"), x[nchar(x_backup_without_spp) > 10], ignore.case = TRUE) + #x[nchar(x_backup_without_spp) > 10] <- gsub("([a-z])([a-z])", paste0("\\1[", constants, "]?\\2"), x[nchar(x_backup_without_spp) > 10]) x[nchar(x_backup_without_spp) > 10] <- gsub("[+]", paste0("+[", constants, "]?"), x[nchar(x_backup_without_spp) > 10]) } - x <- strip_whitespace(x) + x <- strip_whitespace(x, dyslexia_mode) x_trimmed <- x x_trimmed_species <- paste(x_trimmed, "species") - x_trimmed_without_group <- gsub(" gro.u.p$", "", x_trimmed, ignore.case = TRUE) + x_trimmed_without_group <- gsub(" gro.u.p$", "", x_trimmed) # remove last part from "-" or "/" x_trimmed_without_group <- gsub("(.*)[-/].*", "\\1", x_trimmed_without_group) # replace space and dot by regex sign @@ -538,6 +554,7 @@ exec_as.mo <- function(x, x <- gsub("[ .]+", ".*", x) # add start en stop regex x <- paste0('^', x, '$') + x_withspaces_start_only <- paste0('^', x_withspaces) x_withspaces_end_only <- paste0(x_withspaces, '$') x_withspaces_start_end <- paste0('^', x_withspaces, '$') @@ -561,41 +578,42 @@ exec_as.mo <- function(x, progress$tick()$print() - # if (initial_search == TRUE) { - # found <- microorganismsDT[mo == get_mo_history(x_backup[i], - # uncertainty_level, - # force = force_mo_history), - # ..property][[1]] - # # previously found result - # if (length(found) > 0) { - # x[i] <- found[1L] - # next - # } - # } + mo_hist <- get_mo_history(x, uncertainty_level, force = force_mo_history, disable = disable_mo_history) + if (initial_search == TRUE & !any(is.na(mo_hist))) { + # previously found code + found <- data.frame(mo = mo_hist, + stringsAsFactors = FALSE) %>% + left_join(reference_data_to_use, by = "mo") %>% + pull(property) + if (length(found) > 0) { + x[i] <- found[1L] + next + } + } - found <- microorganismsDT[mo == toupper(x_backup[i]), ..property][[1]] + found <- reference_data_to_use[mo == toupper(x_backup[i]), ..property][[1]] # is a valid MO code if (length(found) > 0) { x[i] <- found[1L] next } - found <- microorganismsDT[fullname_lower %in% tolower(c(x_backup[i], x_backup_without_spp[i])), ..property][[1]] + found <- reference_data_to_use[fullname_lower %in% tolower(c(x_backup[i], x_backup_without_spp[i])), ..property][[1]] # most probable: is exact match in fullname if (length(found) > 0) { x[i] <- found[1L] if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) + set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history, disable = disable_mo_history) } next } - found <- microorganismsDT[col_id == x_backup[i], ..property][[1]] + found <- reference_data_to_use[col_id == x_backup[i], ..property][[1]] # is a valid Catalogue of Life ID if (NROW(found) > 0) { x[i] <- found[1L] if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) + set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history, disable = disable_mo_history) } next } @@ -611,14 +629,14 @@ exec_as.mo <- function(x, # empty and nonsense values, ignore without warning x[i] <- microorganismsDT[mo == "UNKNOWN", ..property][[1]] if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) + set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history, disable = disable_mo_history) } next } # check for very small input, but ignore the O antigens of E. coli if (nchar(gsub("[^a-zA-Z]", "", x_trimmed[i])) < 3 - & !x_backup_without_spp[i] %like% "O?(26|103|104|104|111|121|145|157)") { + & !x_backup_without_spp[i] %like_case% "[Oo]?(26|103|104|104|111|121|145|157)") { # check if search term was like "A. species", then return first genus found with ^A # if (x_backup[i] %like% "[a-z]+ species" | x_backup[i] %like% "[a-z] spp[.]?") { # # get mo code of first hit @@ -630,7 +648,7 @@ exec_as.mo <- function(x, # if (length(found) > 0) { # x[i] <- found[1L] # if (initial_search == TRUE) { - # set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) + # set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history, disable = disable_mo_history) # } # next # } @@ -640,17 +658,17 @@ exec_as.mo <- function(x, x[i] <- microorganismsDT[mo == "UNKNOWN", ..property][[1]] if (initial_search == TRUE) { failures <- c(failures, x_backup[i]) - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) + set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history, disable = disable_mo_history) } next } - if (x_backup_without_spp[i] %like% "virus") { + if (x_backup_without_spp[i] %like_case% "virus") { # there is no fullname like virus, so don't try to coerce it x[i] <- microorganismsDT[mo == "UNKNOWN", ..property][[1]] if (initial_search == TRUE) { failures <- c(failures, x_backup[i]) - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) + set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history, disable = disable_mo_history) } next } @@ -660,22 +678,22 @@ exec_as.mo <- function(x, if (toupper(x_backup_without_spp[i]) %in% c('MRSA', 'MSSA', 'VISA', 'VRSA')) { x[i] <- microorganismsDT[mo == 'B_STPHY_AUR', ..property][[1]][1L] if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) + set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history, disable = disable_mo_history) } next } if (toupper(x_backup_without_spp[i]) %in% c('MRSE', 'MSSE')) { x[i] <- microorganismsDT[mo == 'B_STPHY_EPI', ..property][[1]][1L] if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) + set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history, disable = disable_mo_history) } next } if (toupper(x_backup_without_spp[i]) == "VRE" - | x_backup_without_spp[i] %like% '(enterococci|enterokok|enterococo)[a-z]*?$') { + | x_backup_without_spp[i] %like_case% '(enterococci|enterokok|enterococo)[a-z]*?$') { x[i] <- microorganismsDT[mo == 'B_ENTRC', ..property][[1]][1L] if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) + set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history, disable = disable_mo_history) } next } @@ -693,10 +711,10 @@ exec_as.mo <- function(x, # - UPEC (Uropathogenic E. coli) if (toupper(x_backup_without_spp[i]) %in% c("AIEC", "ATEC", "DAEC", "EAEC", "EHEC", "EIEC", "EPEC", "ETEC", "NMEC", "STEC", "UPEC") # also support O-antigens of E. coli: O26, O103, O104, O111, O121, O145, O157 - | x_backup_without_spp[i] %like% "O?(26|103|104|111|121|145|157)") { + | x_backup_without_spp[i] %like_case% "o?(26|103|104|111|121|145|157)") { x[i] <- microorganismsDT[mo == 'B_ESCHR_COL', ..property][[1]][1L] if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) + set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history, disable = disable_mo_history) } next } @@ -704,7 +722,7 @@ exec_as.mo <- function(x, # multi resistant P. aeruginosa x[i] <- microorganismsDT[mo == 'B_PSDMN_AER', ..property][[1]][1L] if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) + set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history, disable = disable_mo_history) } next } @@ -713,7 +731,7 @@ exec_as.mo <- function(x, # co-trim resistant S. maltophilia x[i] <- microorganismsDT[mo == 'B_STNTR_MAL', ..property][[1]][1L] if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) + set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history, disable = disable_mo_history) } next } @@ -721,117 +739,117 @@ exec_as.mo <- function(x, # peni I, peni R, vanco I, vanco R: S. pneumoniae x[i] <- microorganismsDT[mo == 'B_STRPT_PNE', ..property][[1]][1L] if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) + set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history, disable = disable_mo_history) } next } - if (x_backup_without_spp[i] %like% '^G[ABCDFGHK]S$') { + if (x_backup_without_spp[i] %like_case% '^g[abcdfghk]s$') { # Streptococci, like GBS = Group B Streptococci (B_STRPT_GRB) - x[i] <- microorganismsDT[mo == gsub("G([ABCDFGHK])S", "B_STRPT_GR\\1", x_backup_without_spp[i], ignore.case = TRUE), ..property][[1]][1L] + x[i] <- microorganismsDT[mo == toupper(gsub("g([abcdfghk])s", "B_STRPT_GR\\1", x_backup_without_spp[i])), ..property][[1]][1L] if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) + set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history, disable = disable_mo_history) } next } - if (x_backup_without_spp[i] %like% '(streptococ|streptokok).* [ABCDFGHK]$') { + if (x_backup_without_spp[i] %like_case% '(streptococ|streptokok).* [abcdfghk]$') { # Streptococci in different languages, like "estreptococos grupo B" - x[i] <- microorganismsDT[mo == gsub(".*(streptococ|streptokok|estreptococ).* ([ABCDFGHK])$", "B_STRPT_GR\\2", x_backup_without_spp[i], ignore.case = TRUE), ..property][[1]][1L] + x[i] <- microorganismsDT[mo == toupper(gsub(".*(streptococ|streptokok|estreptococ).* ([abcdfghk])$", "B_STRPT_GR\\2", x_backup_without_spp[i])), ..property][[1]][1L] if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) + set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history, disable = disable_mo_history) } next } - if (x_backup_without_spp[i] %like% 'group [ABCDFGHK] (streptococ|streptokok|estreptococ)') { + if (x_backup_without_spp[i] %like_case% 'group [abcdfghk] (streptococ|streptokok|estreptococ)') { # Streptococci in different languages, like "Group A Streptococci" - x[i] <- microorganismsDT[mo == gsub(".*group ([ABCDFGHK]) (streptococ|streptokok|estreptococ).*", "B_STRPT_GR\\1", x_backup_without_spp[i], ignore.case = TRUE), ..property][[1]][1L] + x[i] <- microorganismsDT[mo == toupper(gsub(".*group ([abcdfghk]) (streptococ|streptokok|estreptococ).*", "B_STRPT_GR\\1", x_backup_without_spp[i])), ..property][[1]][1L] if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) + set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history, disable = disable_mo_history) } next } - if (x_backup_without_spp[i] %like% 'haemoly.*strept') { + if (x_backup_without_spp[i] %like_case% 'haemoly.*strept') { # Haemolytic streptococci in different languages x[i] <- microorganismsDT[mo == 'B_STRPT_HAE', ..property][[1]][1L] if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) + set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history, disable = disable_mo_history) } next } # CoNS/CoPS in different languages (support for German, Dutch, Spanish, Portuguese) ---- - if (x_backup_without_spp[i] %like% '[ck]oagulas[ea] negatie?[vf]' - | x_trimmed[i] %like% '[ck]oagulas[ea] negatie?[vf]' - | x_backup_without_spp[i] %like% '[ck]o?ns[^a-z]?$') { + if (x_backup_without_spp[i] %like_case% '[ck]oagulas[ea] negatie?[vf]' + | x_trimmed[i] %like_case% '[ck]oagulas[ea] negatie?[vf]' + | x_backup_without_spp[i] %like_case% '[ck]o?ns[^a-z]?$') { # coerce S. coagulase negative x[i] <- microorganismsDT[mo == 'B_STPHY_CNS', ..property][[1]][1L] if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) + set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history, disable = disable_mo_history) } next } - if (x_backup_without_spp[i] %like% '[ck]oagulas[ea] positie?[vf]' - | x_trimmed[i] %like% '[ck]oagulas[ea] positie?[vf]' - | x_backup_without_spp[i] %like% '[ck]o?ps[^a-z]?$') { + if (x_backup_without_spp[i] %like_case% '[ck]oagulas[ea] positie?[vf]' + | x_trimmed[i] %like_case% '[ck]oagulas[ea] positie?[vf]' + | x_backup_without_spp[i] %like_case% '[ck]o?ps[^a-z]?$') { # coerce S. coagulase positive x[i] <- microorganismsDT[mo == 'B_STPHY_CPS', ..property][[1]][1L] if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) + set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history, disable = disable_mo_history) } next } # streptococcal groups: milleri and viridans - if (x_trimmed[i] %like% 'strepto.* milleri' - | x_backup_without_spp[i] %like% 'strepto.* milleri' - | x_backup_without_spp[i] %like% 'mgs[^a-z]?$') { + if (x_trimmed[i] %like_case% 'strepto.* milleri' + | x_backup_without_spp[i] %like_case% 'strepto.* milleri' + | x_backup_without_spp[i] %like_case% 'mgs[^a-z]?$') { # Milleri Group Streptococcus (MGS) x[i] <- microorganismsDT[mo == 'B_STRPT_MIL', ..property][[1]][1L] if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) + set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history, disable = disable_mo_history) } next } - if (x_trimmed[i] %like% 'strepto.* viridans' - | x_backup_without_spp[i] %like% 'strepto.* viridans' - | x_backup_without_spp[i] %like% 'vgs[^a-z]?$') { + if (x_trimmed[i] %like_case% 'strepto.* viridans' + | x_backup_without_spp[i] %like_case% 'strepto.* viridans' + | x_backup_without_spp[i] %like_case% 'vgs[^a-z]?$') { # Viridans Group Streptococcus (VGS) x[i] <- microorganismsDT[mo == 'B_STRPT_VIR', ..property][[1]][1L] if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) + set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history, disable = disable_mo_history) } next } - if (x_backup_without_spp[i] %like% 'gram[ -]?neg.*' - | x_backup_without_spp[i] %like% 'negatie?[vf]' - | x_trimmed[i] %like% 'gram[ -]?neg.*') { + if (x_backup_without_spp[i] %like_case% 'gram[ -]?neg.*' + | x_backup_without_spp[i] %like_case% 'negatie?[vf]' + | x_trimmed[i] %like_case% 'gram[ -]?neg.*') { # coerce Gram negatives x[i] <- microorganismsDT[mo == 'B_GRAMN', ..property][[1]][1L] if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) + set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history, disable = disable_mo_history) } next } - if (x_backup_without_spp[i] %like% 'gram[ -]?pos.*' - | x_backup_without_spp[i] %like% 'positie?[vf]' - | x_trimmed[i] %like% 'gram[ -]?pos.*') { + if (x_backup_without_spp[i] %like_case% 'gram[ -]?pos.*' + | x_backup_without_spp[i] %like_case% 'positie?[vf]' + | x_trimmed[i] %like_case% 'gram[ -]?pos.*') { # coerce Gram positives x[i] <- microorganismsDT[mo == 'B_GRAMP', ..property][[1]][1L] if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) + set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history, disable = disable_mo_history) } next } - if (x_backup_without_spp[i] %like% "salmonella [a-z]+ ?.*") { - if (x_backup_without_spp[i] %like% "Salmonella group") { + if (x_backup_without_spp[i] %like_case% "salmonella [a-z]+ ?.*") { + if (x_backup_without_spp[i] %like_case% "salmonella group") { # Salmonella Group A to Z, just return S. species for now x[i] <- microorganismsDT[mo == 'B_SLMNL', ..property][[1]][1L] if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) + set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history, disable = disable_mo_history) } next - } else if (grepl("[sS]almonella [A-Z][a-z]+ ?.*", x_backup_without_spp[i], ignore.case = FALSE)) { + } else if (grepl("[sS]almonella [A-Z][a-z]+ ?.*", x_backup[i], ignore.case = FALSE)) { # Salmonella with capital letter species like "Salmonella Goettingen" - they're all S. enterica x[i] <- microorganismsDT[mo == 'B_SLMNL_ENT', ..property][[1]][1L] if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) + set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history, disable = disable_mo_history) } uncertainties <- rbind(uncertainties, format_uncertainty_as_df(uncertainty_level = 1, @@ -842,91 +860,33 @@ exec_as.mo <- function(x, } # trivial names known to the field: - if ("meningococcus" %like% x_trimmed[i]) { + if ("meningococcus" %like_case% x_trimmed[i]) { # coerce S. coagulase positive x[i] <- microorganismsDT[mo == 'B_NESSR_MEN', ..property][[1]][1L] if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) + set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history, disable = disable_mo_history) } next } - if ("gonococcus" %like% x_trimmed[i]) { + if ("gonococcus" %like_case% x_trimmed[i]) { # coerce S. coagulase positive x[i] <- microorganismsDT[mo == 'B_NESSR_GON', ..property][[1]][1L] if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) + set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history, disable = disable_mo_history) } next } - if ("pneumococcus" %like% x_trimmed[i]) { + if ("pneumococcus" %like_case% x_trimmed[i]) { # coerce S. coagulase positive x[i] <- microorganismsDT[mo == 'B_STRPT_PNE', ..property][[1]][1L] if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) + set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history, disable = disable_mo_history) } next } } - # FIRST TRY FULLNAMES AND CODES ---- - # if only genus is available, return only genus - if (all(!c(x[i], x_trimmed[i]) %like% " ")) { - found <- microorganismsDT[fullname_lower %in% tolower(c(x_species[i], x_trimmed_species[i])), ..property][[1]] - if (length(found) > 0) { - x[i] <- found[1L] - if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) - } - next - } - if (nchar(x_backup_without_spp[i]) >= 6) { - found <- microorganismsDT[fullname_lower %like% paste0("^", unregex(x_backup_without_spp[i]), "[a-z]+"), ..property][[1]] - if (length(found) > 0) { - x[i] <- found[1L] - if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) - } - next - } - } - # rest of genus only is in allow_uncertain part. - } - - # TRY OTHER SOURCES ---- - # WHONET and other common LIS codes - if (toupper(x_backup[i]) %in% AMR::microorganisms.codes[, 1]) { - mo_found <- AMR::microorganisms.codes[toupper(x_backup[i]) == AMR::microorganisms.codes[, 1], "mo"][1L] - if (length(mo_found) > 0) { - x[i] <- microorganismsDT[mo == mo_found, ..property][[1]][1L] - if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) - } - next - } - } - if (!is.null(reference_df)) { - # self-defined reference - if (x_backup[i] %in% reference_df[, 1]) { - ref_mo <- reference_df[reference_df[, 1] == x_backup[i], "mo"] - if (ref_mo %in% microorganismsDT[, mo]) { - x[i] <- microorganismsDT[mo == ref_mo, ..property][[1]][1L] - next - } else { - warning("Value '", x_backup[i], "' was found in reference_df, but '", ref_mo, "' is not a valid MO code.", call. = FALSE) - } - } - } - - # allow no codes less than 4 characters long, was already checked for WHONET above - if (nchar(x_backup_without_spp[i]) < 4) { - x[i] <- microorganismsDT[mo == "UNKNOWN", ..property][[1]] - if (initial_search == TRUE) { - failures <- c(failures, x_backup[i]) - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) - } - next - } - + # NOW RUN THROUGH DIFFERENT PREVALENCE LEVELS check_per_prevalence <- function(data_to_check, a.x_backup, b.x_trimmed, @@ -934,7 +894,69 @@ exec_as.mo <- function(x, d.x_withspaces_start_end, e.x_withspaces_start_only, f.x_withspaces_end_only, - g.x_backup_without_spp) { + g.x_backup_without_spp, + h.x_species, + i.x_trimmed_species) { + + # FIRST TRY FULLNAMES AND CODES ---- + # if only genus is available, return only genus + + if (all(!c(x[i], b.x_trimmed) %like_case% " ")) { + found <- data_to_check[fullname_lower %in% c(h.x_species, i.x_trimmed_species), ..property][[1]] + if (length(found) > 0) { + x[i] <- found[1L] + if (initial_search == TRUE) { + set_mo_history(a.x_backup, get_mo_code(x[i], property), 0, force = force_mo_history, disable = disable_mo_history) + } + return(x[i]) + } + if (nchar(g.x_backup_without_spp) >= 6) { + found <- data_to_check[fullname_lower %like_case% paste0("^", unregex(g.x_backup_without_spp), "[a-z]+"), ..property][[1]] + if (length(found) > 0) { + x[i] <- found[1L] + if (initial_search == TRUE) { + set_mo_history(a.x_backup, get_mo_code(x[i], property), 0, force = force_mo_history, disable = disable_mo_history) + } + return(x[i]) + } + } + # rest of genus only is in allow_uncertain part. + } + + # TRY OTHER SOURCES ---- + # WHONET and other common LIS codes + if (toupper(a.x_backup) %in% AMR::microorganisms.codes[, 1]) { + mo_found <- AMR::microorganisms.codes[toupper(a.x_backup) == AMR::microorganisms.codes[, 1], "mo"][1L] + if (length(mo_found) > 0) { + x[i] <- microorganismsDT[mo == mo_found, ..property][[1]][1L] + if (initial_search == TRUE) { + set_mo_history(a.x_backup, get_mo_code(x[i], property), 0, force = force_mo_history, disable = disable_mo_history) + } + return(x[i]) + } + } + if (!is.null(reference_df)) { + # self-defined reference + if (a.x_backup %in% reference_df[, 1]) { + ref_mo <- reference_df[reference_df[, 1] == a.x_backup, "mo"] + if (ref_mo %in% data_to_check[, mo]) { + x[i] <- data_to_check[mo == ref_mo, ..property][[1]][1L] + return(x[i]) + } else { + warning("Value '", a.x_backup, "' was found in reference_df, but '", ref_mo, "' is not a valid MO code.", call. = FALSE) + } + } + } + + # allow no codes less than 4 characters long, was already checked for WHONET above + if (nchar(g.x_backup_without_spp) < 4) { + x[i] <- microorganismsDT[mo == "UNKNOWN", ..property][[1]] + if (initial_search == TRUE) { + failures <- c(failures, a.x_backup) + set_mo_history(a.x_backup, get_mo_code(x[i], property), 0, force = force_mo_history, disable = disable_mo_history) + } + return(x[i]) + } # try probable: trimmed version of fullname ---- found <- data_to_check[fullname_lower %in% tolower(g.x_backup_without_spp), ..property][[1]] @@ -943,30 +965,30 @@ exec_as.mo <- function(x, } # try any match keeping spaces ---- - found <- data_to_check[fullname %like% d.x_withspaces_start_end, ..property][[1]] + found <- data_to_check[fullname_lower %like_case% d.x_withspaces_start_end, ..property][[1]] if (length(found) > 0 & nchar(g.x_backup_without_spp) >= 6) { return(found[1L]) } # try any match keeping spaces, not ending with $ ---- - found <- data_to_check[fullname %like% paste0(trimws(e.x_withspaces_start_only), " "), ..property][[1]] + found <- data_to_check[fullname_lower %like_case% paste0(trimws(e.x_withspaces_start_only), " "), ..property][[1]] if (length(found) > 0) { return(found[1L]) } - found <- data_to_check[fullname %like% e.x_withspaces_start_only, ..property][[1]] + found <- data_to_check[fullname_lower %like_case% e.x_withspaces_start_only, ..property][[1]] if (length(found) > 0 & nchar(g.x_backup_without_spp) >= 6) { return(found[1L]) } # try any match keeping spaces, not start with ^ ---- - found <- data_to_check[fullname %like% paste0(" ", trimws(f.x_withspaces_end_only)), ..property][[1]] + found <- data_to_check[fullname_lower %like_case% paste0(" ", trimws(f.x_withspaces_end_only)), ..property][[1]] if (length(found) > 0) { return(found[1L]) } # try a trimmed version - found <- data_to_check[fullname_lower %like% b.x_trimmed - | fullname_lower %like% c.x_trimmed_without_group, ..property][[1]] + found <- data_to_check[fullname_lower %like_case% b.x_trimmed + | fullname_lower %like_case% c.x_trimmed_without_group, ..property][[1]] if (length(found) > 0 & nchar(g.x_backup_without_spp) >= 6) { return(found[1L]) } @@ -981,7 +1003,7 @@ exec_as.mo <- function(x, g.x_backup_without_spp %>% substr(1, x_length / 2), '.* ', g.x_backup_without_spp %>% substr((x_length / 2) + 1, x_length)) - found <- data_to_check[fullname %like% x_split, ..property][[1]] + found <- data_to_check[fullname_lower %like_case% x_split, ..property][[1]] if (length(found) > 0) { return(found[1L]) } @@ -989,495 +1011,523 @@ exec_as.mo <- function(x, # try fullname without start and without nchar limit of >= 6 ---- # like "K. pneu rhino" >> "Klebsiella pneumoniae (rhinoscleromatis)" = KLEPNERH - found <- data_to_check[fullname %like% e.x_withspaces_start_only, ..property][[1]] + found <- data_to_check[fullname_lower %like_case% e.x_withspaces_start_only, ..property][[1]] if (length(found) > 0) { return(found[1L]) } + # MISCELLANEOUS ---- + + # look for old taxonomic names ---- + found <- microorganisms.oldDT[fullname_lower == tolower(a.x_backup) + | fullname_lower %like_case% d.x_withspaces_start_end,] + if (NROW(found) > 0) { + col_id_new <- found[1, col_id_new] + # when property is "ref" (which is the case in mo_ref, mo_authors and mo_year), return the old value, so: + # mo_ref("Chlamydia psittaci") = "Page, 1968" (with warning) + # mo_ref("Chlamydophila psittaci") = "Everett et al., 1999" + if (property == "ref") { + x[i] <- found[1, ref] + } else { + x[i] <- microorganismsDT[col_id == found[1, col_id_new], ..property][[1]] + } + options(mo_renamed_last_run = found[1, fullname]) + was_renamed(name_old = found[1, fullname], + name_new = microorganismsDT[col_id == found[1, col_id_new], fullname], + ref_old = found[1, ref], + ref_new = microorganismsDT[col_id == found[1, col_id_new], ref], + mo = microorganismsDT[col_id == found[1, col_id_new], mo]) + if (initial_search == TRUE) { + set_mo_history(a.x_backup, get_mo_code(x[i], property), 0, force = force_mo_history, disable = disable_mo_history) + } + return(x[i]) + } + + # check for uncertain results ---- + uncertain_fn <- function(a.x_backup, + b.x_trimmed, + d.x_withspaces_start_end, + e.x_withspaces_start_only, + f.x_withspaces_end_only, + g.x_backup_without_spp, + uncertain.reference_data_to_use) { + + if (uncertainty_level == 0) { + # do not allow uncertainties + return(NA_character_) + } + + # UNCERTAINTY LEVEL 1 ---- + if (uncertainty_level >= 1) { + now_checks_for_uncertainty_level <- 1 + + # (1) look again for old taxonomic names, now for G. species ---- + if (isTRUE(debug)) { + cat("\n[ UNCERTAINTY LEVEL", now_checks_for_uncertainty_level, "] (1) look again for old taxonomic names, now for G. species\n") + } + if (isTRUE(debug)) { + message("Running '", d.x_withspaces_start_end, "' and '", e.x_withspaces_start_only, "'") + } + found <- microorganisms.oldDT[fullname_lower %like_case% d.x_withspaces_start_end + | fullname_lower %like_case% e.x_withspaces_start_only] + if (NROW(found) > 0 & nchar(g.x_backup_without_spp) >= 6) { + if (property == "ref") { + # when property is "ref" (which is the case in mo_ref, mo_authors and mo_year), return the old value, so: + # mo_ref("Chlamydia psittaci) = "Page, 1968" (with warning) + # mo_ref("Chlamydophila psittaci) = "Everett et al., 1999" + x <- found[1, ref] + } else { + x <- microorganismsDT[col_id == found[1, col_id_new], ..property][[1]] + } + was_renamed(name_old = found[1, fullname], + name_new = microorganismsDT[col_id == found[1, col_id_new], fullname], + ref_old = found[1, ref], + ref_new = microorganismsDT[col_id == found[1, col_id_new], ref], + mo = microorganismsDT[col_id == found[1, col_id_new], mo]) + options(mo_renamed_last_run = found[1, fullname]) + uncertainties <<- rbind(uncertainties, + format_uncertainty_as_df(uncertainty_level = now_checks_for_uncertainty_level, + input = a.x_backup, + result_mo = microorganismsDT[col_id == found[1, col_id_new], mo])) + if (initial_search == TRUE) { + set_mo_history(a.x_backup, get_mo_code(x, property), 1, force = force_mo_history, disable = disable_mo_history) + } + return(x) + } + + # (2) Try with misspelled input ---- + # just rerun with dyslexia_mode = TRUE will used the extensive regex part above + if (isTRUE(debug)) { + cat("\n[ UNCERTAINTY LEVEL", now_checks_for_uncertainty_level, "] (2) Try with misspelled input\n") + } + if (isTRUE(debug)) { + message("Running '", a.x_backup, "'") + } + # first try without dyslexia mode + found <- suppressMessages(suppressWarnings(exec_as.mo(a.x_backup, initial_search = FALSE, dyslexia_mode = FALSE, allow_uncertain = FALSE, debug = debug, reference_data_to_use = uncertain.reference_data_to_use))) + if (empty_result(found)) { + # then with dyslexia mode + found <- suppressMessages(suppressWarnings(exec_as.mo(a.x_backup, initial_search = FALSE, dyslexia_mode = TRUE, allow_uncertain = FALSE, debug = debug, reference_data_to_use = uncertain.reference_data_to_use))) + } + if (!empty_result(found)) { + found_result <- found + found <- reference_data_to_use[mo == found, ..property][[1]] + uncertainties <<- rbind(uncertainties, + format_uncertainty_as_df(uncertainty_level = now_checks_for_uncertainty_level, + input = a.x_backup, + result_mo = found_result[1L])) + if (initial_search == TRUE) { + set_mo_history(a.x_backup, get_mo_code(found[1L], property), 1, force = force_mo_history, disable = disable_mo_history) + } + return(found[1L]) + } + } + + # UNCERTAINTY LEVEL 2 ---- + if (uncertainty_level >= 2) { + now_checks_for_uncertainty_level <- 2 + + # (3) look for genus only, part of name ---- + if (isTRUE(debug)) { + cat("\n[ UNCERTAINTY LEVEL", now_checks_for_uncertainty_level, "] (3) look for genus only, part of name\n") + } + if (nchar(g.x_backup_without_spp) > 4 & !b.x_trimmed %like_case% " ") { + if (!grepl("^[A-Z][a-z]+", b.x_trimmed, ignore.case = FALSE)) { + if (isTRUE(debug)) { + message("Running '", paste(b.x_trimmed, "species"), "'") + } + # not when input is like Genustext, because then Neospora would lead to Actinokineospora + found <- uncertain.reference_data_to_use[fullname_lower %like_case% paste(b.x_trimmed, "species"), ..property][[1]] + if (length(found) > 0) { + x[i] <- found[1L] + uncertainties <<- rbind(uncertainties, + format_uncertainty_as_df(uncertainty_level = now_checks_for_uncertainty_level, + input = a.x_backup, + result_mo = found_result[1L])) + if (initial_search == TRUE) { + set_mo_history(a.x_backup, get_mo_code(x, property), 2, force = force_mo_history, disable = disable_mo_history) + } + return(x) + } + } + } + + # (4) strip values between brackets ---- + if (isTRUE(debug)) { + cat("\n[ UNCERTAINTY LEVEL", now_checks_for_uncertainty_level, "] (4) strip values between brackets\n") + } + a.x_backup_stripped <- gsub("( *[(].*[)] *)", " ", a.x_backup) + a.x_backup_stripped <- trimws(gsub(" +", " ", a.x_backup_stripped)) + if (isTRUE(debug)) { + message("Running '", a.x_backup_stripped, "'") + } + # first try without dyslexia mode + found <- suppressMessages(suppressWarnings(exec_as.mo(a.x_backup_stripped, initial_search = FALSE, dyslexia_mode = FALSE, allow_uncertain = FALSE, debug = debug, reference_data_to_use = uncertain.reference_data_to_use))) + if (empty_result(found)) { + # then with dyslexia mode + found <- suppressMessages(suppressWarnings(exec_as.mo(a.x_backup_stripped, initial_search = FALSE, dyslexia_mode = TRUE, allow_uncertain = FALSE, debug = debug, reference_data_to_use = uncertain.reference_data_to_use))) + } + if (!empty_result(found) & nchar(g.x_backup_without_spp) >= 6) { + found_result <- found + found <- reference_data_to_use[mo == found, ..property][[1]] + uncertainties <<- rbind(uncertainties, + format_uncertainty_as_df(uncertainty_level = now_checks_for_uncertainty_level, + input = a.x_backup, + result_mo = found_result[1L])) + if (initial_search == TRUE) { + set_mo_history(a.x_backup, get_mo_code(found[1L], property), 2, force = force_mo_history, disable = disable_mo_history) + } + return(found[1L]) + } + + # (5) inverse input ---- + if (isTRUE(debug)) { + cat("\n[ UNCERTAINTY LEVEL", now_checks_for_uncertainty_level, "] (5) inverse input\n") + } + a.x_backup_inversed <- paste(rev(unlist(strsplit(a.x_backup, split = " "))), collapse = " ") + if (isTRUE(debug)) { + message("Running '", a.x_backup_inversed, "'") + } + # first try without dyslexia mode + found <- suppressMessages(suppressWarnings(exec_as.mo(a.x_backup_inversed, initial_search = FALSE, dyslexia_mode = FALSE, allow_uncertain = FALSE, debug = debug, reference_data_to_use = uncertain.reference_data_to_use))) + if (empty_result(found)) { + # then with dyslexia mode + found <- suppressMessages(suppressWarnings(exec_as.mo(a.x_backup_inversed, initial_search = FALSE, dyslexia_mode = TRUE, allow_uncertain = FALSE, debug = debug, reference_data_to_use = uncertain.reference_data_to_use))) + } + if (!empty_result(found) & nchar(g.x_backup_without_spp) >= 6) { + found_result <- found + found <- reference_data_to_use[mo == found, ..property][[1]] + uncertainties <<- rbind(uncertainties, + format_uncertainty_as_df(uncertainty_level = now_checks_for_uncertainty_level, + input = a.x_backup, + result_mo = found_result[1L])) + if (initial_search == TRUE) { + set_mo_history(a.x_backup, get_mo_code(found[1L], property), 2, force = force_mo_history, disable = disable_mo_history) + } + return(found[1L]) + } + + # (6) try to strip off half an element from end and check the remains ---- + if (isTRUE(debug)) { + cat("\n[ UNCERTAINTY LEVEL", now_checks_for_uncertainty_level, "] (6) try to strip off half an element from end and check the remains\n") + } + x_strip <- a.x_backup %>% strsplit(" ") %>% unlist() + if (length(x_strip) > 1) { + for (i in 1:(length(x_strip) - 1)) { + lastword <- x_strip[length(x_strip) - i + 1] + lastword_half <- substr(lastword, 1, as.integer(nchar(lastword) / 2)) + # remove last half of the second term + x_strip_collapsed <- paste(c(x_strip[1:(length(x_strip) - i)], lastword_half), collapse = " ") + if (nchar(x_strip_collapsed) >= 4 & nchar(lastword_half) > 2) { + if (isTRUE(debug)) { + message("Running '", x_strip_collapsed, "'") + } + # first try without dyslexia mode + found <- suppressMessages(suppressWarnings(exec_as.mo(x_strip_collapsed, initial_search = FALSE, dyslexia_mode = FALSE, allow_uncertain = FALSE, debug = debug, reference_data_to_use = uncertain.reference_data_to_use))) + if (empty_result(found)) { + # then with dyslexia mode + found <- suppressMessages(suppressWarnings(exec_as.mo(x_strip_collapsed, initial_search = FALSE, dyslexia_mode = TRUE, allow_uncertain = FALSE, debug = debug, reference_data_to_use = uncertain.reference_data_to_use))) + } + if (!empty_result(found)) { + found_result <- found + found <- reference_data_to_use[mo == found, ..property][[1]] + uncertainties <<- rbind(uncertainties, + format_uncertainty_as_df(uncertainty_level = now_checks_for_uncertainty_level, + input = a.x_backup, + result_mo = found_result[1L])) + if (initial_search == TRUE) { + set_mo_history(a.x_backup, get_mo_code(found[1L], property), 2, force = force_mo_history, disable = disable_mo_history) + } + return(found[1L]) + } + } + } + } + # (7) try to strip off one element from end and check the remains ---- + if (isTRUE(debug)) { + cat("\n[ UNCERTAINTY LEVEL", now_checks_for_uncertainty_level, "] (7) try to strip off one element from end and check the remains\n") + } + if (length(x_strip) > 1) { + for (i in 1:(length(x_strip) - 1)) { + x_strip_collapsed <- paste(x_strip[1:(length(x_strip) - i)], collapse = " ") + if (nchar(x_strip_collapsed) >= 6) { + if (isTRUE(debug)) { + message("Running '", x_strip_collapsed, "'") + } + # first try without dyslexia mode + found <- suppressMessages(suppressWarnings(exec_as.mo(x_strip_collapsed, initial_search = FALSE, dyslexia_mode = FALSE, allow_uncertain = FALSE, debug = debug, reference_data_to_use = uncertain.reference_data_to_use))) + if (empty_result(found)) { + # then with dyslexia mode + found <- suppressMessages(suppressWarnings(exec_as.mo(x_strip_collapsed, initial_search = FALSE, dyslexia_mode = TRUE, allow_uncertain = FALSE, debug = debug, reference_data_to_use = uncertain.reference_data_to_use))) + } + if (!empty_result(found)) { + found_result <- found + found <- reference_data_to_use[mo == found, ..property][[1]] + uncertainties <<- rbind(uncertainties, + format_uncertainty_as_df(uncertainty_level = now_checks_for_uncertainty_level, + input = a.x_backup, + result_mo = found_result[1L])) + if (initial_search == TRUE) { + set_mo_history(a.x_backup, get_mo_code(found[1L], property), 2, force = force_mo_history, disable = disable_mo_history) + } + return(found[1L]) + } + } + } + } + # (8) check for unknown yeasts/fungi ---- + if (isTRUE(debug)) { + cat("\n[ UNCERTAINTY LEVEL", now_checks_for_uncertainty_level, "] (8) check for unknown yeasts/fungi\n") + } + if (b.x_trimmed %like_case% "yeast") { + found <- "F_YEAST" + found_result <- found + found <- microorganismsDT[mo == found, ..property][[1]] + uncertainties <<- rbind(uncertainties, + format_uncertainty_as_df(uncertainty_level = now_checks_for_uncertainty_level, + input = a.x_backup, + result_mo = found_result[1L])) + if (initial_search == TRUE) { + set_mo_history(a.x_backup, get_mo_code(found[1L], property), 2, force = force_mo_history, disable = disable_mo_history) + } + return(found[1L]) + } + if (b.x_trimmed %like_case% "(fungus|fungi)" & !b.x_trimmed %like_case% "fungiphrya") { + found <- "F_FUNGUS" + found_result <- found + found <- microorganismsDT[mo == found, ..property][[1]] + uncertainties <<- rbind(uncertainties, + format_uncertainty_as_df(uncertainty_level = now_checks_for_uncertainty_level, + input = a.x_backup, + result_mo = found_result[1L])) + if (initial_search == TRUE) { + set_mo_history(a.x_backup, get_mo_code(found[1L], property), 2, force = force_mo_history, disable = disable_mo_history) + } + return(found[1L]) + } + # (9) try to strip off one element from start and check the remains (only allow >= 2-part name outcome) ---- + if (isTRUE(debug)) { + cat("\n[ UNCERTAINTY LEVEL", now_checks_for_uncertainty_level, "] (9) try to strip off one element from start and check the remains (only allow >= 2-part name outcome)\n") + } + x_strip <- a.x_backup %>% strsplit(" ") %>% unlist() + if (length(x_strip) > 1 & nchar(g.x_backup_without_spp) >= 6) { + for (i in 2:(length(x_strip))) { + x_strip_collapsed <- paste(x_strip[i:length(x_strip)], collapse = " ") + if (isTRUE(debug)) { + message("Running '", x_strip_collapsed, "'") + } + # first try without dyslexia mode + found <- suppressMessages(suppressWarnings(exec_as.mo(x_strip_collapsed, initial_search = FALSE, dyslexia_mode = FALSE, allow_uncertain = FALSE, debug = debug, reference_data_to_use = uncertain.reference_data_to_use))) + if (empty_result(found)) { + # then with dyslexia mode + found <- suppressMessages(suppressWarnings(exec_as.mo(x_strip_collapsed, initial_search = FALSE, dyslexia_mode = TRUE, allow_uncertain = FALSE, debug = debug, reference_data_to_use = uncertain.reference_data_to_use))) + } + if (!empty_result(found)) { + found_result <- found + found <- reference_data_to_use[mo == found_result[1L], ..property][[1]] + # uncertainty level 2 only if searched part contains a space (otherwise it will be found with lvl 3) + if (x_strip_collapsed %like_case% " ") { + uncertainties <<- rbind(uncertainties, + format_uncertainty_as_df(uncertainty_level = now_checks_for_uncertainty_level, + input = a.x_backup, + result_mo = found_result[1L])) + if (initial_search == TRUE) { + set_mo_history(a.x_backup, get_mo_code(found[1L], property), 2, force = force_mo_history, disable = disable_mo_history) + } + return(found[1L]) + } + } + } + } + } + + # UNCERTAINTY LEVEL 3 ---- + if (uncertainty_level >= 3) { + now_checks_for_uncertainty_level <- 3 + + # (10) try to strip off one element from start and check the remains (any text size) ---- + if (isTRUE(debug)) { + cat("\n[ UNCERTAINTY LEVEL", now_checks_for_uncertainty_level, "] (10) try to strip off one element from start and check the remains (any text size)\n") + } + x_strip <- a.x_backup %>% strsplit(" ") %>% unlist() + if (length(x_strip) > 1 & nchar(g.x_backup_without_spp) >= 6) { + for (i in 2:(length(x_strip))) { + x_strip_collapsed <- paste(x_strip[i:length(x_strip)], collapse = " ") + if (isTRUE(debug)) { + message("Running '", x_strip_collapsed, "'") + } + # first try without dyslexia mode + found <- suppressMessages(suppressWarnings(exec_as.mo(x_strip_collapsed, initial_search = FALSE, dyslexia_mode = FALSE, allow_uncertain = FALSE, debug = debug, reference_data_to_use = uncertain.reference_data_to_use))) + if (empty_result(found)) { + # then with dyslexia mode + found <- suppressMessages(suppressWarnings(exec_as.mo(x_strip_collapsed, initial_search = FALSE, dyslexia_mode = TRUE, allow_uncertain = FALSE, debug = debug, reference_data_to_use = uncertain.reference_data_to_use))) + } + if (!empty_result(found)) { + found_result <- found + found <- reference_data_to_use[mo == found, ..property][[1]] + uncertainties <<- rbind(uncertainties, + format_uncertainty_as_df(uncertainty_level = now_checks_for_uncertainty_level, + input = a.x_backup, + result_mo = found_result[1L])) + if (initial_search == TRUE) { + set_mo_history(a.x_backup, get_mo_code(found[1L], property), 3, force = force_mo_history, disable = disable_mo_history) + } + return(found[1L]) + } + } + } + # (11) try to strip off one element from end and check the remains (any text size) ---- + # (this is in fact 7 but without nchar limit of >=6) + if (isTRUE(debug)) { + cat("\n[ UNCERTAINTY LEVEL", now_checks_for_uncertainty_level, "] (11) try to strip off one element from end and check the remains (any text size)\n") + } + if (length(x_strip) > 1) { + for (i in 1:(length(x_strip) - 1)) { + x_strip_collapsed <- paste(x_strip[1:(length(x_strip) - i)], collapse = " ") + if (isTRUE(debug)) { + message("Running '", x_strip_collapsed, "'") + } + # first try without dyslexia mode + found <- suppressMessages(suppressWarnings(exec_as.mo(x_strip_collapsed, initial_search = FALSE, dyslexia_mode = FALSE, allow_uncertain = FALSE, debug = debug, reference_data_to_use = uncertain.reference_data_to_use))) + if (empty_result(found)) { + # then with dyslexia mode + found <- suppressMessages(suppressWarnings(exec_as.mo(x_strip_collapsed, initial_search = FALSE, dyslexia_mode = TRUE, allow_uncertain = FALSE, debug = debug, reference_data_to_use = uncertain.reference_data_to_use))) + } + if (!empty_result(found)) { + found_result <- found + found <- reference_data_to_use[mo == found, ..property][[1]] + uncertainties <<- rbind(uncertainties, + format_uncertainty_as_df(uncertainty_level = now_checks_for_uncertainty_level, + input = a.x_backup, + result_mo = found_result[1L])) + if (initial_search == TRUE) { + set_mo_history(a.x_backup, get_mo_code(found[1L], property), 2, force = force_mo_history, disable = disable_mo_history) + } + return(found[1L]) + } + } + } + + # (12) part of a name (very unlikely match) ---- + if (isTRUE(debug)) { + cat("\n[ UNCERTAINTY LEVEL", now_checks_for_uncertainty_level, "] (12) part of a name (very unlikely match)\n") + } + if (isTRUE(debug)) { + message("Running '", f.x_withspaces_end_only, "'") + } + found <- reference_data_to_use[fullname_lower %like_case% f.x_withspaces_end_only] + if (nrow(found) > 0) { + found_result <- found[["mo"]] + if (!empty_result(found_result) & nchar(g.x_backup_without_spp) >= 6) { + found <- reference_data_to_use[mo == found_result[1L], ..property][[1]] + uncertainties <<- rbind(uncertainties, + format_uncertainty_as_df(uncertainty_level = now_checks_for_uncertainty_level, + input = a.x_backup, + result_mo = found_result[1L])) + if (initial_search == TRUE) { + set_mo_history(a.x_backup, get_mo_code(found[1L], property), 3, force = force_mo_history, disable = disable_mo_history) + } + return(found[1L]) + } + } + } + + # didn't found in uncertain results too + return(NA_character_) + } + + # uncertain results + # wait until prevalence == 2 to run the uncertain results on both prevalence == 1 and prevalence == 2 + if (nrow(data_to_check) == nrow(microorganismsDT[prevalence == 2])) { + x[i] <- uncertain_fn(a.x_backup = a.x_backup, + b.x_trimmed = b.x_trimmed, + d.x_withspaces_start_end = d.x_withspaces_start_end, + e.x_withspaces_start_only = e.x_withspaces_start_only, + f.x_withspaces_end_only = f.x_withspaces_end_only, + g.x_backup_without_spp = g.x_backup_without_spp, + uncertain.reference_data_to_use = microorganismsDT[prevalence %in% c(1, 2)]) + if (!empty_result(x[i])) { + # no set_mo_history here - it is already set in uncertain_fn() + return(x[i]) + } + } else if (nrow(data_to_check) == nrow(microorganismsDT[prevalence == 3])) { + x[i] <- uncertain_fn(a.x_backup = a.x_backup, + b.x_trimmed = b.x_trimmed, + d.x_withspaces_start_end = d.x_withspaces_start_end, + e.x_withspaces_start_only = e.x_withspaces_start_only, + f.x_withspaces_end_only = f.x_withspaces_end_only, + g.x_backup_without_spp = g.x_backup_without_spp, + uncertain.reference_data_to_use = microorganismsDT[prevalence == 3]) + if (!empty_result(x[i])) { + # no set_mo_history here - it is already set in uncertain_fn() + return(x[i]) + } + } + # didn't found any return(NA_character_) } # FIRST TRY VERY PREVALENT IN HUMAN INFECTIONS ---- - x[i] <- check_per_prevalence(data_to_check = microorganismsDT[prevalence == 1], + x[i] <- check_per_prevalence(data_to_check = reference_data_to_use[prevalence == 1], a.x_backup = x_backup[i], b.x_trimmed = x_trimmed[i], c.x_trimmed_without_group = x_trimmed_without_group[i], d.x_withspaces_start_end = x_withspaces_start_end[i], e.x_withspaces_start_only = x_withspaces_start_only[i], f.x_withspaces_end_only = x_withspaces_end_only[i], - g.x_backup_without_spp = x_backup_without_spp[i]) + g.x_backup_without_spp = x_backup_without_spp[i], + h.x_species = x_species[i], + i.x_trimmed_species = x_trimmed_species[i]) if (!empty_result(x[i])) { if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) + set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history, disable = disable_mo_history) } next } + # THEN TRY PREVALENT IN HUMAN INFECTIONS ---- - x[i] <- check_per_prevalence(data_to_check = microorganismsDT[prevalence == 2], + x[i] <- check_per_prevalence(data_to_check = reference_data_to_use[prevalence == 2], a.x_backup = x_backup[i], b.x_trimmed = x_trimmed[i], c.x_trimmed_without_group = x_trimmed_without_group[i], d.x_withspaces_start_end = x_withspaces_start_end[i], e.x_withspaces_start_only = x_withspaces_start_only[i], f.x_withspaces_end_only = x_withspaces_end_only[i], - g.x_backup_without_spp = x_backup_without_spp[i]) + g.x_backup_without_spp = x_backup_without_spp[i], + h.x_species = x_species[i], + i.x_trimmed_species = x_trimmed_species[i]) if (!empty_result(x[i])) { if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) + set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history, disable = disable_mo_history) } next } + # THEN UNPREVALENT IN HUMAN INFECTIONS ---- - x[i] <- check_per_prevalence(data_to_check = microorganismsDT[prevalence == 3], + x[i] <- check_per_prevalence(data_to_check = reference_data_to_use[prevalence == 3], a.x_backup = x_backup[i], b.x_trimmed = x_trimmed[i], c.x_trimmed_without_group = x_trimmed_without_group[i], d.x_withspaces_start_end = x_withspaces_start_end[i], e.x_withspaces_start_only = x_withspaces_start_only[i], f.x_withspaces_end_only = x_withspaces_end_only[i], - g.x_backup_without_spp = x_backup_without_spp[i]) + g.x_backup_without_spp = x_backup_without_spp[i], + h.x_species = x_species[i], + i.x_trimmed_species = x_trimmed_species[i]) if (!empty_result(x[i])) { if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) + set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history, disable = disable_mo_history) } next } - # MISCELLANEOUS ---- - - # look for old taxonomic names ---- - found <- microorganisms.oldDT[fullname_lower == tolower(x_backup[i]) - | fullname %like% x_withspaces_start_end[i],] - if (NROW(found) > 0) { - col_id_new <- found[1, col_id_new] - # when property is "ref" (which is the case in mo_ref, mo_authors and mo_year), return the old value, so: - # mo_ref("Chlamydia psittaci") = "Page, 1968" (with warning) - # mo_ref("Chlamydophila psittaci") = "Everett et al., 1999" - if (property == "ref") { - x[i] <- found[1, ref] - } else { - x[i] <- microorganismsDT[col_id == found[1, col_id_new], ..property][[1]] - } - options(mo_renamed_last_run = found[1, fullname]) - was_renamed(name_old = found[1, fullname], - name_new = microorganismsDT[col_id == found[1, col_id_new], fullname], - ref_old = found[1, ref], - ref_new = microorganismsDT[col_id == found[1, col_id_new], ref], - mo = microorganismsDT[col_id == found[1, col_id_new], mo]) - if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) - } - next - } - - # check for uncertain results ---- - uncertain_fn <- function(a.x_backup, - b.x_trimmed, - c.x_withspaces_start_end, - d.x_withspaces_start_only, - f.x_withspaces_end_only, - g.x_backup_without_spp) { - - if (uncertainty_level == 0) { - # do not allow uncertainties - return(NA_character_) - } - - # UNCERTAINTY LEVEL 1 ---- - if (uncertainty_level >= 1) { - now_checks_for_uncertainty_level <- 1 - - # (1) look again for old taxonomic names, now for G. species ---- - if (isTRUE(debug)) { - cat("\n[ UNCERTAINTY LEVEL", now_checks_for_uncertainty_level, "] (1) look again for old taxonomic names, now for G. species\n") - } - if (isTRUE(debug)) { - message("Running '", c.x_withspaces_start_end, "' and '", d.x_withspaces_start_only, "'") - } - found <- microorganisms.oldDT[fullname %like% c.x_withspaces_start_end - | fullname %like% d.x_withspaces_start_only] - if (NROW(found) > 0 & nchar(g.x_backup_without_spp) >= 6) { - if (property == "ref") { - # when property is "ref" (which is the case in mo_ref, mo_authors and mo_year), return the old value, so: - # mo_ref("Chlamydia psittaci) = "Page, 1968" (with warning) - # mo_ref("Chlamydophila psittaci) = "Everett et al., 1999" - x <- found[1, ref] - } else { - x <- microorganismsDT[col_id == found[1, col_id_new], ..property][[1]] - } - was_renamed(name_old = found[1, fullname], - name_new = microorganismsDT[col_id == found[1, col_id_new], fullname], - ref_old = found[1, ref], - ref_new = microorganismsDT[col_id == found[1, col_id_new], ref], - mo = microorganismsDT[col_id == found[1, col_id_new], mo]) - options(mo_renamed_last_run = found[1, fullname]) - uncertainties <<- rbind(uncertainties, - format_uncertainty_as_df(uncertainty_level = now_checks_for_uncertainty_level, - input = a.x_backup, - result_mo = microorganismsDT[col_id == found[1, col_id_new], mo])) - if (initial_search == TRUE) { - set_mo_history(a.x_backup, get_mo_code(x, property), 1, force = force_mo_history) - } - return(x) - } - - # (2) Try with misspelled input ---- - # just rerun with dyslexia_mode = TRUE will used the extensive regex part above - if (isTRUE(debug)) { - cat("\n[ UNCERTAINTY LEVEL", now_checks_for_uncertainty_level, "] (2) Try with misspelled input\n") - } - if (isTRUE(debug)) { - message("Running '", a.x_backup, "'") - } - # first try without dyslexia mode - found <- suppressMessages(suppressWarnings(exec_as.mo(a.x_backup, initial_search = FALSE, dyslexia_mode = FALSE, allow_uncertain = FALSE, debug = debug))) - if (empty_result(found)) { - # then with dyslexia mode - found <- suppressMessages(suppressWarnings(exec_as.mo(a.x_backup, initial_search = FALSE, dyslexia_mode = TRUE, allow_uncertain = FALSE, debug = debug))) - } - if (!empty_result(found)) { - found_result <- found - found <- microorganismsDT[mo == found, ..property][[1]] - uncertainties <<- rbind(uncertainties, - format_uncertainty_as_df(uncertainty_level = now_checks_for_uncertainty_level, - input = a.x_backup, - result_mo = found_result[1L])) - if (initial_search == TRUE) { - set_mo_history(a.x_backup, get_mo_code(found[1L], property), 1, force = force_mo_history) - } - return(found[1L]) - } - } - - # UNCERTAINTY LEVEL 2 ---- - if (uncertainty_level >= 2) { - now_checks_for_uncertainty_level <- 2 - - # (3) look for genus only, part of name ---- - if (isTRUE(debug)) { - cat("\n[ UNCERTAINTY LEVEL", now_checks_for_uncertainty_level, "] (3) look for genus only, part of name\n") - } - if (nchar(g.x_backup_without_spp) > 4 & !b.x_trimmed %like% " ") { - if (!grepl("^[A-Z][a-z]+", b.x_trimmed, ignore.case = FALSE)) { - if (isTRUE(debug)) { - message("Running '", paste(b.x_trimmed, "species"), "'") - } - # not when input is like Genustext, because then Neospora would lead to Actinokineospora - found <- microorganismsDT[fullname_lower %like% paste(b.x_trimmed, "species"), ..property][[1]] - if (length(found) > 0) { - x[i] <- found[1L] - uncertainties <<- rbind(uncertainties, - format_uncertainty_as_df(uncertainty_level = now_checks_for_uncertainty_level, - input = a.x_backup, - result_mo = found_result[1L])) - if (initial_search == TRUE) { - set_mo_history(a.x_backup, get_mo_code(x, property), 2, force = force_mo_history) - } - return(x) - } - } - } - - # (4) strip values between brackets ---- - if (isTRUE(debug)) { - cat("\n[ UNCERTAINTY LEVEL", now_checks_for_uncertainty_level, "] (4) strip values between brackets\n") - } - a.x_backup_stripped <- gsub("( *[(].*[)] *)", " ", a.x_backup) - a.x_backup_stripped <- trimws(gsub(" +", " ", a.x_backup_stripped)) - if (isTRUE(debug)) { - message("Running '", a.x_backup_stripped, "'") - } - # first try without dyslexia mode - found <- suppressMessages(suppressWarnings(exec_as.mo(a.x_backup_stripped, initial_search = FALSE, dyslexia_mode = FALSE, allow_uncertain = FALSE, debug = debug))) - if (empty_result(found)) { - # then with dyslexia mode - found <- suppressMessages(suppressWarnings(exec_as.mo(a.x_backup_stripped, initial_search = FALSE, dyslexia_mode = TRUE, allow_uncertain = FALSE, debug = debug))) - } - if (!empty_result(found) & nchar(g.x_backup_without_spp) >= 6) { - found_result <- found - found <- microorganismsDT[mo == found, ..property][[1]] - uncertainties <<- rbind(uncertainties, - format_uncertainty_as_df(uncertainty_level = now_checks_for_uncertainty_level, - input = a.x_backup, - result_mo = found_result[1L])) - if (initial_search == TRUE) { - set_mo_history(a.x_backup, get_mo_code(found[1L], property), 2, force = force_mo_history) - } - return(found[1L]) - } - - # (5) inverse input ---- - if (isTRUE(debug)) { - cat("\n[ UNCERTAINTY LEVEL", now_checks_for_uncertainty_level, "] (5) inverse input\n") - } - a.x_backup_inversed <- paste(rev(unlist(strsplit(a.x_backup, split = " "))), collapse = " ") - if (isTRUE(debug)) { - message("Running '", a.x_backup_inversed, "'") - } - # first try without dyslexia mode - found <- suppressMessages(suppressWarnings(exec_as.mo(a.x_backup_inversed, initial_search = FALSE, dyslexia_mode = FALSE, allow_uncertain = FALSE, debug = debug))) - if (empty_result(found)) { - # then with dyslexia mode - found <- suppressMessages(suppressWarnings(exec_as.mo(a.x_backup_inversed, initial_search = FALSE, dyslexia_mode = TRUE, allow_uncertain = FALSE, debug = debug))) - } - if (!empty_result(found) & nchar(g.x_backup_without_spp) >= 6) { - found_result <- found - found <- microorganismsDT[mo == found, ..property][[1]] - uncertainties <<- rbind(uncertainties, - format_uncertainty_as_df(uncertainty_level = now_checks_for_uncertainty_level, - input = a.x_backup, - result_mo = found_result[1L])) - if (initial_search == TRUE) { - set_mo_history(a.x_backup, get_mo_code(found[1L], property), 2, force = force_mo_history) - } - return(found[1L]) - } - - # (6) try to strip off half an element from end and check the remains ---- - if (isTRUE(debug)) { - cat("\n[ UNCERTAINTY LEVEL", now_checks_for_uncertainty_level, "] (6) try to strip off half an element from end and check the remains\n") - } - x_strip <- a.x_backup %>% strsplit(" ") %>% unlist() - if (length(x_strip) > 1) { - for (i in 1:(length(x_strip) - 1)) { - lastword <- x_strip[length(x_strip) - i + 1] - lastword_half <- substr(lastword, 1, as.integer(nchar(lastword) / 2)) - # remove last half of the second term - x_strip_collapsed <- paste(c(x_strip[1:(length(x_strip) - i)], lastword_half), collapse = " ") - if (nchar(x_strip_collapsed) >= 4 & nchar(lastword_half) > 2) { - if (isTRUE(debug)) { - message("Running '", x_strip_collapsed, "'") - } - # first try without dyslexia mode - found <- suppressMessages(suppressWarnings(exec_as.mo(x_strip_collapsed, initial_search = FALSE, dyslexia_mode = FALSE, allow_uncertain = FALSE, debug = debug))) - if (empty_result(found)) { - # then with dyslexia mode - found <- suppressMessages(suppressWarnings(exec_as.mo(x_strip_collapsed, initial_search = FALSE, dyslexia_mode = TRUE, allow_uncertain = FALSE, debug = debug))) - } - if (!empty_result(found)) { - found_result <- found - found <- microorganismsDT[mo == found, ..property][[1]] - uncertainties <<- rbind(uncertainties, - format_uncertainty_as_df(uncertainty_level = now_checks_for_uncertainty_level, - input = a.x_backup, - result_mo = found_result[1L])) - if (initial_search == TRUE) { - set_mo_history(a.x_backup, get_mo_code(found[1L], property), 2, force = force_mo_history) - } - return(found[1L]) - } - } - } - } - # (7) try to strip off one element from end and check the remains ---- - if (isTRUE(debug)) { - cat("\n[ UNCERTAINTY LEVEL", now_checks_for_uncertainty_level, "] (7) try to strip off one element from end and check the remains\n") - } - if (length(x_strip) > 1) { - for (i in 1:(length(x_strip) - 1)) { - x_strip_collapsed <- paste(x_strip[1:(length(x_strip) - i)], collapse = " ") - if (nchar(x_strip_collapsed) >= 6) { - if (isTRUE(debug)) { - message("Running '", x_strip_collapsed, "'") - } - # first try without dyslexia mode - found <- suppressMessages(suppressWarnings(exec_as.mo(x_strip_collapsed, initial_search = FALSE, dyslexia_mode = FALSE, allow_uncertain = FALSE, debug = debug))) - if (empty_result(found)) { - # then with dyslexia mode - found <- suppressMessages(suppressWarnings(exec_as.mo(x_strip_collapsed, initial_search = FALSE, dyslexia_mode = TRUE, allow_uncertain = FALSE, debug = debug))) - } - if (!empty_result(found)) { - found_result <- found - found <- microorganismsDT[mo == found, ..property][[1]] - uncertainties <<- rbind(uncertainties, - format_uncertainty_as_df(uncertainty_level = now_checks_for_uncertainty_level, - input = a.x_backup, - result_mo = found_result[1L])) - if (initial_search == TRUE) { - set_mo_history(a.x_backup, get_mo_code(found[1L], property), 2, force = force_mo_history) - } - return(found[1L]) - } - } - } - } - # (8) check for unknown yeasts/fungi ---- - if (isTRUE(debug)) { - cat("\n[ UNCERTAINTY LEVEL", now_checks_for_uncertainty_level, "] (8) check for unknown yeasts/fungi\n") - } - if (b.x_trimmed %like% "yeast") { - found <- "F_YEAST" - found_result <- found - found <- microorganismsDT[mo == found, ..property][[1]] - uncertainties <<- rbind(uncertainties, - format_uncertainty_as_df(uncertainty_level = now_checks_for_uncertainty_level, - input = a.x_backup, - result_mo = found_result[1L])) - if (initial_search == TRUE) { - set_mo_history(a.x_backup, get_mo_code(found[1L], property), 2, force = force_mo_history) - } - return(found[1L]) - } - if (b.x_trimmed %like% "(fungus|fungi)" & !b.x_trimmed %like% "Fungiphrya") { - found <- "F_FUNGUS" - found_result <- found - found <- microorganismsDT[mo == found, ..property][[1]] - uncertainties <<- rbind(uncertainties, - format_uncertainty_as_df(uncertainty_level = now_checks_for_uncertainty_level, - input = a.x_backup, - result_mo = found_result[1L])) - if (initial_search == TRUE) { - set_mo_history(a.x_backup, get_mo_code(found[1L], property), 2, force = force_mo_history) - } - return(found[1L]) - } - # (9) try to strip off one element from start and check the remains (only allow >= 2-part name outcome) ---- - if (isTRUE(debug)) { - cat("\n[ UNCERTAINTY LEVEL", now_checks_for_uncertainty_level, "] (9) try to strip off one element from start and check the remains (only allow >= 2-part name outcome)\n") - } - x_strip <- a.x_backup %>% strsplit(" ") %>% unlist() - if (length(x_strip) > 1 & nchar(g.x_backup_without_spp) >= 6) { - for (i in 2:(length(x_strip))) { - x_strip_collapsed <- paste(x_strip[i:length(x_strip)], collapse = " ") - if (isTRUE(debug)) { - message("Running '", x_strip_collapsed, "'") - } - # first try without dyslexia mode - found <- suppressMessages(suppressWarnings(exec_as.mo(x_strip_collapsed, initial_search = FALSE, dyslexia_mode = FALSE, allow_uncertain = FALSE, debug = debug))) - if (empty_result(found)) { - # then with dyslexia mode - found <- suppressMessages(suppressWarnings(exec_as.mo(x_strip_collapsed, initial_search = FALSE, dyslexia_mode = TRUE, allow_uncertain = FALSE, debug = debug))) - } - if (!empty_result(found)) { - found_result <- found - found <- microorganismsDT[mo == found_result[1L], ..property][[1]] - # uncertainty level 2 only if searched part contains a space (otherwise it will be found with lvl 3) - if (x_strip_collapsed %like% " ") { - uncertainties <<- rbind(uncertainties, - format_uncertainty_as_df(uncertainty_level = now_checks_for_uncertainty_level, - input = a.x_backup, - result_mo = found_result[1L])) - if (initial_search == TRUE) { - set_mo_history(a.x_backup, get_mo_code(found[1L], property), 2, force = force_mo_history) - } - return(found[1L]) - } - } - } - } - } - - # UNCERTAINTY LEVEL 3 ---- - if (uncertainty_level >= 3) { - now_checks_for_uncertainty_level <- 3 - - # (10) try to strip off one element from start and check the remains (any text size) ---- - if (isTRUE(debug)) { - cat("\n[ UNCERTAINTY LEVEL", now_checks_for_uncertainty_level, "] (10) try to strip off one element from start and check the remains (any text size)\n") - } - x_strip <- a.x_backup %>% strsplit(" ") %>% unlist() - if (length(x_strip) > 1 & nchar(g.x_backup_without_spp) >= 6) { - for (i in 2:(length(x_strip))) { - x_strip_collapsed <- paste(x_strip[i:length(x_strip)], collapse = " ") - if (isTRUE(debug)) { - message("Running '", x_strip_collapsed, "'") - } - # first try without dyslexia mode - found <- suppressMessages(suppressWarnings(exec_as.mo(x_strip_collapsed, initial_search = FALSE, dyslexia_mode = FALSE, allow_uncertain = FALSE, debug = debug))) - if (empty_result(found)) { - # then with dyslexia mode - found <- suppressMessages(suppressWarnings(exec_as.mo(x_strip_collapsed, initial_search = FALSE, dyslexia_mode = TRUE, allow_uncertain = FALSE, debug = debug))) - } - if (!empty_result(found)) { - found_result <- found - found <- microorganismsDT[mo == found, ..property][[1]] - uncertainties <<- rbind(uncertainties, - format_uncertainty_as_df(uncertainty_level = now_checks_for_uncertainty_level, - input = a.x_backup, - result_mo = found_result[1L])) - if (initial_search == TRUE) { - set_mo_history(a.x_backup, get_mo_code(found[1L], property), 3, force = force_mo_history) - } - return(found[1L]) - } - } - } - # (11) try to strip off one element from end and check the remains (any text size) ---- - # (this is in fact 7 but without nchar limit of >=6) - if (isTRUE(debug)) { - cat("\n[ UNCERTAINTY LEVEL", now_checks_for_uncertainty_level, "] (11) try to strip off one element from end and check the remains (any text size)\n") - } - if (length(x_strip) > 1) { - for (i in 1:(length(x_strip) - 1)) { - x_strip_collapsed <- paste(x_strip[1:(length(x_strip) - i)], collapse = " ") - if (isTRUE(debug)) { - message("Running '", x_strip_collapsed, "'") - } - # first try without dyslexia mode - found <- suppressMessages(suppressWarnings(exec_as.mo(x_strip_collapsed, initial_search = FALSE, dyslexia_mode = FALSE, allow_uncertain = FALSE, debug = debug))) - if (empty_result(found)) { - # then with dyslexia mode - found <- suppressMessages(suppressWarnings(exec_as.mo(x_strip_collapsed, initial_search = FALSE, dyslexia_mode = TRUE, allow_uncertain = FALSE, debug = debug))) - } - if (!empty_result(found)) { - found_result <- found - found <- microorganismsDT[mo == found, ..property][[1]] - uncertainties <<- rbind(uncertainties, - format_uncertainty_as_df(uncertainty_level = now_checks_for_uncertainty_level, - input = a.x_backup, - result_mo = found_result[1L])) - if (initial_search == TRUE) { - set_mo_history(a.x_backup, get_mo_code(found[1L], property), 2, force = force_mo_history) - } - return(found[1L]) - } - } - } - - # (12) part of a name (very unlikely match) ---- - if (isTRUE(debug)) { - cat("\n[ UNCERTAINTY LEVEL", now_checks_for_uncertainty_level, "] (12) part of a name (very unlikely match)\n") - } - if (isTRUE(debug)) { - message("Running '", f.x_withspaces_end_only, "'") - } - found <- microorganismsDT[fullname %like% f.x_withspaces_end_only] - if (nrow(found) > 0) { - found_result <- found[["mo"]] - if (!empty_result(found_result) & nchar(g.x_backup_without_spp) >= 6) { - found <- microorganismsDT[mo == found_result[1L], ..property][[1]] - uncertainties <<- rbind(uncertainties, - format_uncertainty_as_df(uncertainty_level = now_checks_for_uncertainty_level, - input = a.x_backup, - result_mo = found_result[1L])) - if (initial_search == TRUE) { - set_mo_history(a.x_backup, get_mo_code(found[1L], property), 3, force = force_mo_history) - } - return(found[1L]) - } - } - } - - # didn't found in uncertain results too - return(NA_character_) - } - x[i] <- uncertain_fn(x_backup[i], - x_trimmed[i], - x_withspaces_start_end[i], - x_withspaces_start_only[i], - x_withspaces_end_only[i], - x_backup_without_spp[i]) - if (!empty_result(x[i])) { - # no set_mo_history here - it is already set in uncertain_fn() - next - } # no results found: make them UNKNOWN ---- x[i] <- microorganismsDT[mo == "UNKNOWN", ..property][[1]] if (initial_search == TRUE) { failures <- c(failures, x_backup[i]) - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) + set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history, disable = disable_mo_history) } } } @@ -1559,7 +1609,7 @@ exec_as.mo <- function(x, x[x %in% CoNS] <- microorganismsDT[mo == 'B_STPHY_CNS', ..property][[1]][1L] x[x %in% CoPS] <- microorganismsDT[mo == 'B_STPHY_CPS', ..property][[1]][1L] if (Becker == "all") { - x[x %in% microorganismsDT[mo %like% '^B_STPHY_AUR', ..property][[1]]] <- microorganismsDT[mo == 'B_STPHY_CPS', ..property][[1]][1L] + x[x %in% microorganismsDT[mo %like_case% '^B_STPHY_AUR', ..property][[1]]] <- microorganismsDT[mo == 'B_STPHY_CPS', ..property][[1]][1L] } } @@ -1626,29 +1676,17 @@ empty_result <- function(x) { #' @importFrom crayon italic was_renamed <- function(name_old, name_new, ref_old = "", ref_new = "", mo = "") { - if (!is.na(ref_old)) { - ref_old <- paste0(" (", ref_old, ")") + newly_set <- data.frame(old_name = name_old, + new_name = name_new, + new_ref = ref_new, + mo = mo, + stringsAsFactors = FALSE) + already_set <- getOption("mo_renamed") + if (!is.null(already_set)) { + options(mo_renamed = rbind(already_set, newly_set)) } else { - ref_old <- "" + options(mo_renamed = newly_set) } - if (!is.na(ref_new)) { - ref_new <- paste0(" (", ref_new, ")") - } else { - ref_new <- "" - } - if (!is.na(mo)) { - mo <- paste0(" (", mo, ")") - } else { - mo <- "" - } - old_values <- paste0(italic(name_old), ref_old) - old_values <- gsub("et al.", italic("et al."), old_values) - new_values <- paste0(italic(name_new), ref_new, mo) - new_values <- gsub("et al.", italic("et al."), new_values) - - names(new_values) <- old_values - total <- c(getOption("mo_renamed"), new_values) - options(mo_renamed = total[order(names(total))]) } format_uncertainty_as_df <- function(uncertainty_level, @@ -1832,30 +1870,33 @@ print.mo_uncertainties <- function(x, ...) { } #' @rdname as.mo -#' @importFrom crayon strip_style +#' @importFrom dplyr distinct #' @export mo_renamed <- function() { items <- getOption("mo_renamed") if (is.null(items)) { - return(NULL) + items <- data.frame() + } else { + items <- distinct(items, old_name, .keep_all = TRUE) } - - items <- strip_style(items) - names(items) <- strip_style(names(items)) structure(.Data = items, - class = c("mo_renamed", "character")) + class = c("mo_renamed", "data.frame")) } #' @exportMethod print.mo_renamed -#' @importFrom crayon blue +#' @importFrom crayon blue italic #' @export #' @noRd print.mo_renamed <- function(x, ...) { - items <- x #getOption("mo_renamed") - old <- names(x) - new <- x - - cat(blue(paste("NOTE:", italic(names(items)), "was renamed", italic(items), collapse = "\n"), collapse = "\n")) + if (NROW(x) == 0) { + return(invisible()) + } + for (i in 1:nrow(x)) { + message(blue(paste0("NOTE: ", + italic(x$old_name[i]), " was renamed ", italic(x$new_name[i]), + " (", gsub("et al.", italic("et al."), x$new_ref[i]), ")", + " (", x$mo[i], ")"))) + } } nr2char <- function(x) { @@ -1874,12 +1915,14 @@ unregex <- function(x) { get_mo_code <- function(x, property) { # don't use right now - return(NULL) + # return(NULL) if (property == "mo") { unique(x) } else { - AMR::microorganisms[base::which(AMR::microorganisms[, property] %in% x),]$mo + microorganismsDT[get(property) == x, "mo"][[1]] + # which is ~2.5 times faster than: + # AMR::microorganisms[base::which(AMR::microorganisms[, property] %in% x),]$mo } } diff --git a/R/mo2.R b/R/mo2.R deleted file mode 100644 index 8ed1c821..00000000 --- a/R/mo2.R +++ /dev/null @@ -1,1489 +0,0 @@ -# ==================================================================== # -# TITLE # -# Antimicrobial Resistance (AMR) Analysis # -# # -# SOURCE # -# https://gitlab.com/msberends/AMR # -# # -# LICENCE # -# (c) 2019 Berends MS (m.s.berends@umcg.nl), Luz CF (c.f.luz@umcg.nl) # -# # -# 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. # -# # -# This R package was created for academic research and was publicly # -# released in the hope that it will be useful, but it comes WITHOUT # -# ANY WARRANTY OR LIABILITY. # -# Visit our website for more info: https://msberends.gitlab.io/AMR. # -# ==================================================================== # - -# THIS IS A TEST FUNCTION -as.mo2 <- function(x, - Becker = FALSE, - Lancefield = FALSE, - allow_uncertain = TRUE, - reference_df = get_mo_source(), - property = "mo", - initial_search = TRUE, - dyslexia_mode = FALSE, - force_mo_history = FALSE, - debug = FALSE) { - - if (!"AMR" %in% base::.packages()) { - require("AMR") - # check onLoad() in R/zzz.R: data tables are created there. - } - - # WHONET: xxx = no growth - x[tolower(as.character(paste0(x, ""))) %in% c("", "xxx", "na", "nan")] <- NA_character_ - - if (initial_search == TRUE) { - options(mo_failures = NULL) - options(mo_uncertainties = NULL) - options(mo_renamed = NULL) - } - options(mo_renamed_last_run = NULL) - - if (NCOL(x) == 2) { - # support tidyverse selection like: df %>% select(colA, colB) - # paste these columns together - x_vector <- vector("character", NROW(x)) - for (i in 1:NROW(x)) { - x_vector[i] <- paste(pull(x[i,], 1), pull(x[i,], 2), sep = " ") - } - x <- x_vector - } else { - if (NCOL(x) > 2) { - stop('`x` can be 2 columns at most', call. = FALSE) - } - x[is.null(x)] <- NA - - # support tidyverse selection like: df %>% select(colA) - if (!is.vector(x) & !is.null(dim(x))) { - x <- pull(x, 1) - } - } - - notes <- character(0) - uncertainties <- data.frame(uncertainty = integer(0), - input = character(0), - fullname = character(0), - renamed_to = character(0), - mo = character(0), - stringsAsFactors = FALSE) - failures <- character(0) - uncertainty_level <- translate_allow_uncertain(allow_uncertain) - - - # x_input <- x - # already strip leading and trailing spaces - #x <- trimws(x, which = "both") - # only check the uniques, which is way faster - #x <- unique(x) - # remove empty values (to later fill them in again with NAs) - # ("xxx" is WHONET code for 'no growth') - # x <- x[!is.na(x) - # & !is.null(x) - # & !identical(x, "") - # & !identical(x, "xxx")] - - # conversion of old MO codes from v0.5.0 (ITIS) to later versions (Catalogue of Life) - if (any(x %like% "^[BFP]_[A-Z]{3,7}") & !all(x %in% microorganisms$mo)) { - leftpart <- gsub("^([BFP]_[A-Z]{3,7}).*", "\\1", x) - if (any(leftpart %in% names(mo_codes_v0.5.0))) { - rightpart <- gsub("^[BFP]_[A-Z]{3,7}(.*)", "\\1", x) - leftpart <- mo_codes_v0.5.0[leftpart] - x[!is.na(leftpart)] <- paste0(leftpart[!is.na(leftpart)], rightpart[!is.na(leftpart)]) - } - # now check if some are still old - still_old <- x[x %in% names(mo_codes_v0.5.0)] - if (length(still_old) > 0) { - x[x %in% names(mo_codes_v0.5.0)] <- data.frame(old = still_old, stringsAsFactors = FALSE) %>% - left_join(data.frame(old = names(mo_codes_v0.5.0), - new = mo_codes_v0.5.0, - stringsAsFactors = FALSE), by = "old") %>% - # if they couldn't be found, replace them with the old ones again, - # so they will throw a warning in the end - mutate(new = ifelse(is.na(new), old, new)) %>% - pull(new) - } - } - - # # defined df to check for - # if (!is.null(reference_df)) { - # if (!mo_source_isvalid(reference_df)) { - # stop("`reference_df` must contain a column `mo` with values from the 'microorganisms' data set.", call. = FALSE) - # } - # reference_df <- reference_df %>% filter(!is.na(mo)) - # # keep only first two columns, second must be mo - # if (colnames(reference_df)[1] == "mo") { - # reference_df <- reference_df[, c(2, 1)] - # } else { - # reference_df <- reference_df[, c(1, 2)] - # } - # colnames(reference_df)[1] <- "x" - # # remove factors, just keep characters - # suppressWarnings( - # reference_df[] <- lapply(reference_df, as.character) - # ) - # } - # - # # all empty - # if (all(identical(trimws(x_input), "") | is.na(x_input) | length(x) == 0)) { - # if (property == "mo") { - # return(to_class_mo(rep(NA_character_, length(x_input)))) - # } else { - # return(rep(NA_character_, length(x_input))) - # } - # - # } else if (all(x %in% reference_df[, 1][[1]])) { - # # all in reference df - # colnames(reference_df)[1] <- "x" - # suppressWarnings( - # x <- data.frame(x = x, stringsAsFactors = FALSE) %>% - # left_join(reference_df, by = "x") %>% - # left_join(AMR::microorganisms, by = "mo") %>% - # pull(property) - # ) - # - # } else if (all(x %in% AMR::microorganisms$mo)) { - # # existing mo codes when not looking for property "mo", like mo_genus("B_ESCHR_COL") - # y <- microorganismsDT[prevalence == 1][data.table(mo = x), on = "mo", ..property][[1]] - # if (any(is.na(y))) { - # y[is.na(y)] <- microorganismsDT[prevalence == 2][data.table(mo = x[is.na(y)]), - # on = "mo", - # ..property][[1]] - # } - # if (any(is.na(y))) { - # y[is.na(y)] <- microorganismsDT[prevalence == 3][data.table(mo = x[is.na(y)]), - # on = "mo", - # ..property][[1]] - # } - # x <- y - # - # # } else if (all(x %in% read_mo_history(uncertainty_level, - # # force = force_mo_history)$x)) { - # # # previously found code - # # x <- microorganismsDT[data.table(mo = get_mo_history(x, - # # uncertainty_level, - # # force = force_mo_history)), - # # on = "mo", ..property][[1]] - # - # } else if (all(tolower(x) %in% microorganismsDT$fullname_lower)) { - # # we need special treatment for very prevalent full names, they are likely! - # # e.g. as.mo("Staphylococcus aureus") - # y <- microorganismsDT[prevalence == 1][data.table(fullname_lower = tolower(x)), on = "fullname_lower", ..property][[1]] - # if (any(is.na(y))) { - # y[is.na(y)] <- microorganismsDT[prevalence == 2][data.table(fullname_lower = tolower(x[is.na(y)])), - # on = "fullname_lower", - # ..property][[1]] - # } - # if (any(is.na(y))) { - # y[is.na(y)] <- microorganismsDT[prevalence == 3][data.table(fullname_lower = tolower(x[is.na(y)])), - # on = "fullname_lower", - # ..property][[1]] - # } - # x <- y - # - # } else if (all(toupper(x) %in% AMR::microorganisms.codes$code)) { - # # commonly used MO codes - # y <- as.data.table(AMR::microorganisms.codes)[data.table(code = toupper(x)), on = "code", ] - # # save them to history - # set_mo_history(x, y$mo, 0, force = force_mo_history) - # - # x <- microorganismsDT[data.table(mo = y[["mo"]]), on = "mo", ..property][[1]] - # - # } else if (!all(x %in% AMR::microorganisms[, property])) { - # - if (1 == 1) { - strip_whitespace <- function(x) { - # all whitespaces (tab, new lines, etc.) should be one space - # and spaces before and after should be omitted - trimws(gsub("[\\s]+", " ", x, perl = TRUE), which = "both") - } - - - x_new <- rep(NA_character_, length(x)) - - # keep only dots, letters, numbers, slashes, spaces and dashes - x <- gsub("[^.a-zA-Z0-9/ \\-]+", "", x) - # remove spp and species - x <- gsub(" +(spp.?|ssp.?|sp.? |ss ?.?|subsp.?|subspecies|biovar |serovar |species)", " ", x, ignore.case = TRUE) - # remove 'genus' as first word - x <- gsub("^genus ", "", x, ignore.case = TRUE) - # remove 'uncertain'-like texts - x <- trimws(gsub("(uncertain|susp[ie]c[a-z]+|verdacht)", "", x, ignore.case = TRUE)) - x <- strip_whitespace(x) - x_backup <- x - - # remove spp and species - #x <- gsub(" +(spp.?|ssp.?|sp.? |ss ?.?|subsp.?|subspecies|biovar |serovar |species)", " ", x_backup, ignore.case = TRUE) - #x <- strip_whitespace(x) - - x_backup_without_spp <- x - x_species <- paste(x, "species") - # translate to English for supported languages of mo_property - x <- gsub("(gruppe|groep|grupo|gruppo|groupe)", "group", x, ignore.case = TRUE) - x <- gsub("(vergroen)[a-z]*", "viridans", x, ignore.case = TRUE) - x <- gsub("(hefe|gist|gisten|levadura|lievito|fermento|levure)[a-z]*", "yeast", x, ignore.case = TRUE) - x <- gsub("(schimmels?|mofo|molde|stampo|moisissure|fungi)[a-z]*", "fungus", x, ignore.case = TRUE) - x <- gsub("Fungus[ph|f]rya", "Fungiphrya", x, ignore.case = TRUE) - # remove non-text in case of "E. coli" except dots and spaces - # x <- gsub("[^.a-zA-Z0-9/ \\-]+", "", x) - # replace minus by a space - x <- gsub("-+", " ", x) - # replace hemolytic by haemolytic - x <- gsub("ha?emoly", "haemoly", x, ignore.case = TRUE) - # place minus back in streptococci - x <- gsub("(alpha|beta|gamma).?ha?emoly", "\\1-haemoly", x, ignore.case = TRUE) - # remove genus as first word - # x <- gsub("^genus ", "", x, ignore.case = TRUE) - # remove 'uncertain' like texts - # x <- trimws(gsub("(uncertain|susp[ie]c[a-z]+|verdacht)", "", x, ignore.case = TRUE)) - # allow characters that resemble others = dyslexia_mode ---- - if (dyslexia_mode == TRUE) { - x <- tolower(x) - x <- gsub("[iy]+", "[iy]+", x) - x <- gsub("(c|k|q|qu|s|z|x|ks)+", "(c|k|q|qu|s|z|x|ks)+", x) - x <- gsub("(ph|hp|f|v)+", "(ph|hp|f|v)+", x) - x <- gsub("(th|ht|t)+", "(th|ht|t)+", x) - x <- gsub("a+", "a+", x) - x <- gsub("u+", "u+", x) - # allow any ending of -um, -us, -ium, -icum, -ius, -icus, -ica and -a (needs perl for the negative backward lookup): - x <- gsub("(u\\+\\(c\\|k\\|q\\|qu\\+\\|s\\|z\\|x\\|ks\\)\\+)(?![a-z])", - "(u[s|m]|[iy][ck]?u[ms]|[iy]?[ck]?a)", x, ignore.case = TRUE, perl = TRUE) - x <- gsub("(\\[iy\\]\\+\\(c\\|k\\|q\\|qu\\+\\|s\\|z\\|x\\|ks\\)\\+a\\+)(?![a-z])", - "(u[s|m]|[iy][ck]?u[ms]|[iy]?[ck]?a)", x, ignore.case = TRUE, perl = TRUE) - x <- gsub("(\\[iy\\]\\+u\\+m)(?![a-z])", - "(u[s|m]|[iy][ck]?u[ms]|[iy]?[ck]?a)", x, ignore.case = TRUE, perl = TRUE) - x <- gsub("e+", "e+", x, ignore.case = TRUE) - x <- gsub("o+", "o+", x, ignore.case = TRUE) - x <- gsub("(.)\\1+", "\\1+", x) - # allow ending in -en or -us - x <- gsub("e\\+n(?![a-z[])", "(e+n|u+(c|k|q|qu|s|z|x|ks)+)", x, ignore.case = TRUE, perl = TRUE) - # if the input is longer than 10 characters, allow any constant between all characters, as some might have forgotten a character - # this will allow "Pasteurella damatis" to be correctly read as "Pasteurella dagmatis". - constants <- paste(letters[!letters %in% c("a", "e", "i", "o", "u")], collapse = "") - #x[nchar(x_backup_without_spp) > 10] <- gsub("([a-z])([a-z])", paste0("\\1[", constants, "]?\\2"), x[nchar(x_backup_without_spp) > 10], ignore.case = TRUE) - x[nchar(x_backup_without_spp) > 10] <- gsub("[+]", paste0("+[", constants, "]?"), x[nchar(x_backup_without_spp) > 10]) - } - x <- strip_whitespace(x) - - x_trimmed <- x - x_trimmed_species <- paste(x_trimmed, "species") - x_trimmed_without_group <- gsub(" gro.u.p$", "", x_trimmed, ignore.case = TRUE) - # remove last part from "-" or "/" - x_trimmed_without_group <- gsub("(.*)[-/].*", "\\1", x_trimmed_without_group) - # replace space and dot by regex sign - x_withspaces <- gsub("[ .]+", ".* ", x) - x <- gsub("[ .]+", ".*", x) - # add start en stop regex - x <- paste0('^', x, '$') - x_withspaces_start_only <- paste0('^', x_withspaces) - x_withspaces_end_only <- paste0(x_withspaces, '$') - x_withspaces_start_end <- paste0('^', x_withspaces, '$') - - if (isTRUE(debug)) { - print(data.frame( - x_backup, - x, - x_species, - x_withspaces_start_only, - x_withspaces_end_only, - x_withspaces_start_end, - x_backup_without_spp, - x_trimmed, - x_trimmed_species, - x_trimmed_without_group), right = FALSE) - # cat(paste0('x "', x, '"\n')) - # cat(paste0('x_species "', x_species, '"\n')) - # cat(paste0('x_withspaces_start_only "', x_withspaces_start_only, '"\n')) - # cat(paste0('x_withspaces_end_only "', x_withspaces_end_only, '"\n')) - # cat(paste0('x_withspaces_start_end "', x_withspaces_start_end, '"\n')) - # cat(paste0('x_backup "', x_backup, '"\n')) - # cat(paste0('x_backup_without_spp "', x_backup_without_spp, '"\n')) - # cat(paste0('x_trimmed "', x_trimmed, '"\n')) - # cat(paste0('x_trimmed_species "', x_trimmed_species, '"\n')) - # cat(paste0('x_trimmed_without_group "', x_trimmed_without_group, '"\n')) - } - - #progress <- progress_estimated(n = length(x), min_time = 3) - - # THE NEW WAY ---- - nothing_more_to_do <- function() !any(is.na(x_new) & !is.na(x_backup)) - - lookup_regexes <- function(data, property, regex) { - prop <- regex %>% - sapply(function(pattern) pull(data, property) %like% pattern) %>% - as.data.frame() %>% - lapply(function(c) suppressWarnings(min(pull(data, property)[c]))) %>% - unlist() - if (is.null(prop)) { - return(rep(NA, length(regex))) - } - DT <- data.table(prop) - colnames(DT) <- property - microorganismsDT[DT, on = property, "mo"][[1]] - } - - # LATER: only unique if more than 500 values, of which max 85% distinct? - - x_backup_upper <- toupper(x_backup) - x_backup_lower <- tolower(x_backup) - - # exclude all viruses (there is no fullname containing 'virus' in the data set) - x_new[x_backup %like% "virus"] <- "UNKNOWN" - - # try available fields in the microorganisms data set - x_new[x_backup_upper %in% microorganisms$mo] <- microorganismsDT[data.table(mo = x_backup_upper[x_backup_upper %in% microorganisms$mo]), on = "mo", "mo"][[1]] - x_new[x_backup_lower %in% microorganismsDT$fullname_lower] <- microorganismsDT[data.table(fullname_lower = x_backup_lower[x_backup_lower %in% microorganismsDT$fullname_lower]), on = "fullname_lower", "mo"][[1]] - # x_new[x_backup %in% microorganisms$col_id] <- microorganismsDT[data.table(col_id = as.integer(x_backup[x_backup %in% microorganisms$col_id])), on = "col_id", ..property][[1]] - - # old names - old_names <- x_backup[x_backup_lower %in% microorganisms.oldDT$fullname_lower] - x_new[x_backup_lower %in% microorganisms.oldDT$fullname_lower] <- microorganismsDT[microorganisms.oldDT[data.table(fullname_lower = x_backup_lower[x_backup_lower %in% microorganisms.oldDT$fullname_lower]), on = "fullname_lower", "col_id_new"], on = c("col_id" = "col_id_new"), "mo"][[1]] - - if (nothing_more_to_do()) { - if (property != "mo") { - return(microorganismsDT[data.table(mo = x_new), on = "mo", ..property][[1]]) - } else { - return(to_class_mo(x_new)) - } - } - - # codes from the microorganisms.codes data set - x_new[x_backup_upper %in% microorganisms.codes$code] <- as.data.table(microorganisms.codes)[data.table(code = x_backup_upper[x_backup_upper %in% microorganisms.codes$code]), on = "code", "mo"][[1]] - if (!is.null(reference_df)) { - colnames(reference_df)[1] <- "code" - x_new[x_backup_upper %in% reference_df$code] <- as.data.table(reference_df)[data.table(code = x_backup_upper[x_backup_upper %in% reference_df$code]), on = "code", mo][[1]] - if (!all(x_new %in% microorganisms$mo, na.rm = TRUE)) { - warning("Values ", paste(x_new[!x_new %in% c(NA, microorganisms$mo)], collapse = ", "), " found in reference_df, but these are not valid MO codes.", call. = FALSE) - x_new[!x_new %in% c(NA, microorganisms$mo)] <- "UNKNOWN" - } - } - - x_new[x_backup_upper %in% c("MRSA", "MSSA", "VISA", "VRSA")] <- "B_STPHY_AUR" - x_new[x_backup_upper %in% c("MRSE", "MSSE")] <- "B_STPHY_EPI" - x_new[x_backup_upper %in% c("AIEC", "ATEC", "DAEC", "EAEC", "EHEC", "EIEC", "EPEC", "ETEC", "NMEC", "STEC", "UPEC") - | x_backup_upper %like% "O?(26|103|104|111|121|145|157)"] <- "B_ESCHR_COL" - x_new[x_backup_upper %in% c("MRPA")] <- "B_PSDMN_AER" - x_new[x_backup_upper %in% c("CRSM")] <- "B_STNTR_MAL" - x_new[x_backup_upper %in% c("PISP", "PRSP", "VISP", "VRSP")] <- "B_STRPT_PNE" - x_new[x_backup_upper %in% c("VRE") - | x_backup %like% "(enterococci|enterokok|enterococo)[a-z]*?$"] <- "B_ENTRC" - - # start showing progress bar here - progress <- progress_estimated(n = 3, min_time = 0) - # most prevalent (1) - x_new[!is.na(x_backup) & is.na(x_new) & nchar(x_backup) >= 6] <- microorganismsDT[prevalence == 1] %>% lookup_regexes("fullname", x_withspaces_start_end[!is.na(x_backup) & is.na(x_new) & nchar(x_backup) >= 6]) - x_new[!is.na(x_backup) & is.na(x_new)] <- microorganismsDT[prevalence == 1] %>% lookup_regexes("fullname", paste0(trimws(x_withspaces_start_only), " ")[!is.na(x_backup) & is.na(x_new)]) - x_new[!is.na(x_backup) & is.na(x_new) & nchar(x_backup) >= 6] <- microorganismsDT[prevalence == 1] %>% lookup_regexes("fullname", x_withspaces_start_only[!is.na(x_backup) & is.na(x_new) & nchar(x_backup) >= 6]) - x_new[!is.na(x_backup) & is.na(x_new)] <- microorganismsDT[prevalence == 1] %>% lookup_regexes("fullname", paste0(" ", trimws(x_withspaces_end_only))[!is.na(x_backup) & is.na(x_new)]) - x_new[!is.na(x_backup) & is.na(x_new) & nchar(x_backup) >= 6] <- microorganismsDT[prevalence == 1] %>% lookup_regexes("fullname", x_trimmed[!is.na(x_backup) & is.na(x_new) & nchar(x_backup) >= 6]) - x_new[!is.na(x_backup) & is.na(x_new) & nchar(x_backup) >= 6] <- microorganismsDT[prevalence == 1] %>% lookup_regexes("fullname", x_trimmed_without_group[!is.na(x_backup) & is.na(x_new) & nchar(x_backup) >= 6]) - x_new[!is.na(x_backup) & is.na(x_new)] <- microorganismsDT[prevalence == 1] %>% lookup_regexes("fullname", x_withspaces_start_only[!is.na(x_backup) & is.na(x_new)]) - if (nothing_more_to_do()) { - if (property != "mo") { - return(microorganismsDT[data.table(mo = x_new), on = "mo", ..property][[1]]) - } else { - return(to_class_mo(x_new)) - } - } - progress$tick()$print() - # less prevalent (2) - x_new[!is.na(x_backup) & is.na(x_new) & nchar(x_backup) >= 6] <- microorganismsDT[prevalence == 2] %>% lookup_regexes("fullname", x_withspaces_start_end[!is.na(x_backup) & is.na(x_new) & nchar(x_backup) >= 6]) - x_new[!is.na(x_backup) & is.na(x_new)] <- microorganismsDT[prevalence == 2] %>% lookup_regexes("fullname", paste0(trimws(x_withspaces_start_only), " ")[!is.na(x_backup) & is.na(x_new)]) - x_new[!is.na(x_backup) & is.na(x_new) & nchar(x_backup) >= 6] <- microorganismsDT[prevalence == 2] %>% lookup_regexes("fullname", x_withspaces_start_only[!is.na(x_backup) & is.na(x_new) & nchar(x_backup) >= 6]) - x_new[!is.na(x_backup) & is.na(x_new)] <- microorganismsDT[prevalence == 2] %>% lookup_regexes("fullname", paste0(" ", trimws(x_withspaces_end_only))[!is.na(x_backup) & is.na(x_new)]) - x_new[!is.na(x_backup) & is.na(x_new) & nchar(x_backup) >= 6] <- microorganismsDT[prevalence == 2] %>% lookup_regexes("fullname", x_trimmed[!is.na(x_backup) & is.na(x_new) & nchar(x_backup) >= 6]) - x_new[!is.na(x_backup) & is.na(x_new) & nchar(x_backup) >= 6] <- microorganismsDT[prevalence == 2] %>% lookup_regexes("fullname", x_trimmed_without_group[!is.na(x_backup) & is.na(x_new) & nchar(x_backup) >= 6]) - x_new[!is.na(x_backup) & is.na(x_new)] <- microorganismsDT[prevalence == 2] %>% lookup_regexes("fullname", x_withspaces_start_only[!is.na(x_backup) & is.na(x_new)]) - if (nothing_more_to_do()) { - if (property != "mo") { - return(microorganismsDT[data.table(mo = x_new), on = "mo", ..property][[1]]) - } else { - return(to_class_mo(x_new)) - } - } - progress$tick()$print() - # least prevalent (3) - x_new[!is.na(x_backup) & is.na(x_new) & nchar(x_backup) >= 6] <- microorganismsDT[prevalence == 3] %>% lookup_regexes("fullname", x_withspaces_start_end[!is.na(x_backup) & is.na(x_new) & nchar(x_backup) >= 6]) - x_new[!is.na(x_backup) & is.na(x_new)] <- microorganismsDT[prevalence == 3] %>% lookup_regexes("fullname", paste0(trimws(x_withspaces_start_only), " ")[!is.na(x_backup) & is.na(x_new)]) - x_new[!is.na(x_backup) & is.na(x_new) & nchar(x_backup) >= 6] <- microorganismsDT[prevalence == 3] %>% lookup_regexes("fullname", x_withspaces_start_only[!is.na(x_backup) & is.na(x_new) & nchar(x_backup) >= 6]) - x_new[!is.na(x_backup) & is.na(x_new)] <- microorganismsDT[prevalence == 3] %>% lookup_regexes("fullname", paste0(" ", trimws(x_withspaces_end_only))[!is.na(x_backup) & is.na(x_new)]) - x_new[!is.na(x_backup) & is.na(x_new) & nchar(x_backup) >= 6] <- microorganismsDT[prevalence == 3] %>% lookup_regexes("fullname", x_trimmed[!is.na(x_backup) & is.na(x_new) & nchar(x_backup) >= 6]) - x_new[!is.na(x_backup) & is.na(x_new) & nchar(x_backup) >= 6] <- microorganismsDT[prevalence == 3] %>% lookup_regexes("fullname", x_trimmed_without_group[!is.na(x_backup) & is.na(x_new) & nchar(x_backup) >= 6]) - x_new[!is.na(x_backup) & is.na(x_new)] <- microorganismsDT[prevalence == 3] %>% lookup_regexes("fullname", x_withspaces_start_only[!is.na(x_backup) & is.na(x_new)]) - - # all others are UNKNOWN - x_new[!is.na(x_backup) & is.na(x_new)] <- "UNKNOWN" - progress$tick()$print() - - return(to_class_mo(x_new)) - #for (i in 1:length(x)) { - for (i in character(0)) { - - x[i] <- "UNKNOWN" - next - - # progress$tick()$print() - - # if (initial_search == TRUE) { - # found <- microorganismsDT[mo == get_mo_history(x_backup[i], - # uncertainty_level, - # force = force_mo_history), - # ..property][[1]] - # # previously found result - # if (length(found) > 0) { - # x[i] <- found[1L] - # next - # } - # } - - found <- microorganismsDT[mo == toupper(x_backup[i]), ..property][[1]] - # is a valid MO code - if (length(found) > 0) { - x[i] <- found[1L] - next - } - - found <- microorganismsDT[fullname_lower %in% tolower(c(x_backup[i], x_backup_without_spp[i])), ..property][[1]] - # most probable: is exact match in fullname - if (length(found) > 0) { - x[i] <- found[1L] - if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) - } - next - } - - found <- microorganismsDT[col_id == x_backup[i], ..property][[1]] - # is a valid Catalogue of Life ID - if (NROW(found) > 0) { - x[i] <- found[1L] - if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) - } - next - } - - - # WHONET: xxx = no growth - if (tolower(as.character(paste0(x_backup_without_spp[i], ""))) %in% c("", "xxx", "na", "nan")) { - x[i] <- NA_character_ - next - } - - if (tolower(x_backup_without_spp[i]) %in% c("other", "none", "unknown")) { - # empty and nonsense values, ignore without warning - x[i] <- microorganismsDT[mo == "UNKNOWN", ..property][[1]] - if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) - } - next - } - - # check for very small input, but ignore the O antigens of E. coli - if (nchar(gsub("[^a-zA-Z]", "", x_trimmed[i])) < 3 - & !x_backup_without_spp[i] %like% "O?(26|103|104|104|111|121|145|157)") { - # check if search term was like "A. species", then return first genus found with ^A - # if (x_backup[i] %like% "[a-z]+ species" | x_backup[i] %like% "[a-z] spp[.]?") { - # # get mo code of first hit - # found <- microorganismsDT[fullname %like% x_withspaces_start_only[i], mo] - # if (length(found) > 0) { - # mo_code <- found[1L] %>% strsplit("_") %>% unlist() %>% .[1:2] %>% paste(collapse = "_") - # found <- microorganismsDT[mo == mo_code, ..property][[1]] - # # return first genus that begins with x_trimmed, e.g. when "E. spp." - # if (length(found) > 0) { - # x[i] <- found[1L] - # if (initial_search == TRUE) { - # set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) - # } - # next - # } - # } - # } - # fewer than 3 chars and not looked for species, add as failure - x[i] <- microorganismsDT[mo == "UNKNOWN", ..property][[1]] - if (initial_search == TRUE) { - failures <- c(failures, x_backup[i]) - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) - } - next - } - - if (x_backup_without_spp[i] %like% "virus") { - # there is no fullname like virus, so don't try to coerce it - x[i] <- microorganismsDT[mo == "UNKNOWN", ..property][[1]] - if (initial_search == TRUE) { - failures <- c(failures, x_backup[i]) - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) - } - next - } - - # translate known trivial abbreviations to genus + species ---- - if (!is.na(x_trimmed[i])) { - if (toupper(x_backup_without_spp[i]) %in% c('MRSA', 'MSSA', 'VISA', 'VRSA')) { - x[i] <- microorganismsDT[mo == 'B_STPHY_AUR', ..property][[1]][1L] - if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) - } - next - } - if (toupper(x_backup_without_spp[i]) %in% c('MRSE', 'MSSE')) { - x[i] <- microorganismsDT[mo == 'B_STPHY_EPI', ..property][[1]][1L] - if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) - } - next - } - if (toupper(x_backup_without_spp[i]) == "VRE" - | x_backup_without_spp[i] %like% '(enterococci|enterokok|enterococo)[a-z]*?$') { - x[i] <- microorganismsDT[mo == 'B_ENTRC', ..property][[1]][1L] - if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) - } - next - } - # support for: - # - AIEC (Adherent-Invasive E. coli) - # - ATEC (Atypical Entero-pathogenic E. coli) - # - DAEC (Diffusely Adhering E. coli) - # - EAEC (Entero-Aggresive E. coli) - # - EHEC (Entero-Haemorrhagic E. coli) - # - EIEC (Entero-Invasive E. coli) - # - EPEC (Entero-Pathogenic E. coli) - # - ETEC (Entero-Toxigenic E. coli) - # - NMEC (Neonatal Meningitis‐causing E. coli) - # - STEC (Shiga-toxin producing E. coli) - # - UPEC (Uropathogenic E. coli) - if (toupper(x_backup_without_spp[i]) %in% c("AIEC", "ATEC", "DAEC", "EAEC", "EHEC", "EIEC", "EPEC", "ETEC", "NMEC", "STEC", "UPEC") - # also support O-antigens of E. coli: O26, O103, O104, O111, O121, O145, O157 - | x_backup_without_spp[i] %like% "O?(26|103|104|111|121|145|157)") { - x[i] <- microorganismsDT[mo == 'B_ESCHR_COL', ..property][[1]][1L] - if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) - } - next - } - if (toupper(x_backup_without_spp[i]) == 'MRPA') { - # multi resistant P. aeruginosa - x[i] <- microorganismsDT[mo == 'B_PSDMN_AER', ..property][[1]][1L] - if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) - } - next - } - if (toupper(x_backup_without_spp[i]) == 'CRS' - | toupper(x_backup_without_spp[i]) == 'CRSM') { - # co-trim resistant S. maltophilia - x[i] <- microorganismsDT[mo == 'B_STNTR_MAL', ..property][[1]][1L] - if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) - } - next - } - if (toupper(x_backup_without_spp[i]) %in% c('PISP', 'PRSP', 'VISP', 'VRSP')) { - # peni I, peni R, vanco I, vanco R: S. pneumoniae - x[i] <- microorganismsDT[mo == 'B_STRPT_PNE', ..property][[1]][1L] - if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) - } - next - } - if (x_backup_without_spp[i] %like% '^G[ABCDFGHK]S$') { - # Streptococci, like GBS = Group B Streptococci (B_STRPT_GRB) - x[i] <- microorganismsDT[mo == gsub("G([ABCDFGHK])S", "B_STRPT_GR\\1", x_backup_without_spp[i], ignore.case = TRUE), ..property][[1]][1L] - if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) - } - next - } - if (x_backup_without_spp[i] %like% '(streptococ|streptokok).* [ABCDFGHK]$') { - # Streptococci in different languages, like "estreptococos grupo B" - x[i] <- microorganismsDT[mo == gsub(".*(streptococ|streptokok|estreptococ).* ([ABCDFGHK])$", "B_STRPT_GR\\2", x_backup_without_spp[i], ignore.case = TRUE), ..property][[1]][1L] - if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) - } - next - } - if (x_backup_without_spp[i] %like% 'group [ABCDFGHK] (streptococ|streptokok|estreptococ)') { - # Streptococci in different languages, like "Group A Streptococci" - x[i] <- microorganismsDT[mo == gsub(".*group ([ABCDFGHK]) (streptococ|streptokok|estreptococ).*", "B_STRPT_GR\\1", x_backup_without_spp[i], ignore.case = TRUE), ..property][[1]][1L] - if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) - } - next - } - if (x_backup_without_spp[i] %like% 'haemoly.*strept') { - # Haemolytic streptococci in different languages - x[i] <- microorganismsDT[mo == 'B_STRPT_HAE', ..property][[1]][1L] - if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) - } - next - } - # CoNS/CoPS in different languages (support for German, Dutch, Spanish, Portuguese) ---- - if (x_backup_without_spp[i] %like% '[ck]oagulas[ea] negatie?[vf]' - | x_trimmed[i] %like% '[ck]oagulas[ea] negatie?[vf]' - | x_backup_without_spp[i] %like% '[ck]o?ns[^a-z]?$') { - # coerce S. coagulase negative - x[i] <- microorganismsDT[mo == 'B_STPHY_CNS', ..property][[1]][1L] - if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) - } - next - } - if (x_backup_without_spp[i] %like% '[ck]oagulas[ea] positie?[vf]' - | x_trimmed[i] %like% '[ck]oagulas[ea] positie?[vf]' - | x_backup_without_spp[i] %like% '[ck]o?ps[^a-z]?$') { - # coerce S. coagulase positive - x[i] <- microorganismsDT[mo == 'B_STPHY_CPS', ..property][[1]][1L] - if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) - } - next - } - # streptococcal groups: milleri and viridans - if (x_trimmed[i] %like% 'strepto.* milleri' - | x_backup_without_spp[i] %like% 'strepto.* milleri' - | x_backup_without_spp[i] %like% 'mgs[^a-z]?$') { - # Milleri Group Streptococcus (MGS) - x[i] <- microorganismsDT[mo == 'B_STRPT_MIL', ..property][[1]][1L] - if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) - } - next - } - if (x_trimmed[i] %like% 'strepto.* viridans' - | x_backup_without_spp[i] %like% 'strepto.* viridans' - | x_backup_without_spp[i] %like% 'vgs[^a-z]?$') { - # Viridans Group Streptococcus (VGS) - x[i] <- microorganismsDT[mo == 'B_STRPT_VIR', ..property][[1]][1L] - if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) - } - next - } - if (x_backup_without_spp[i] %like% 'gram[ -]?neg.*' - | x_backup_without_spp[i] %like% 'negatie?[vf]' - | x_trimmed[i] %like% 'gram[ -]?neg.*') { - # coerce Gram negatives - x[i] <- microorganismsDT[mo == 'B_GRAMN', ..property][[1]][1L] - if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) - } - next - } - if (x_backup_without_spp[i] %like% 'gram[ -]?pos.*' - | x_backup_without_spp[i] %like% 'positie?[vf]' - | x_trimmed[i] %like% 'gram[ -]?pos.*') { - # coerce Gram positives - x[i] <- microorganismsDT[mo == 'B_GRAMP', ..property][[1]][1L] - if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) - } - next - } - if (x_backup_without_spp[i] %like% "salmonella [a-z]+ ?.*") { - if (x_backup_without_spp[i] %like% "Salmonella group") { - # Salmonella Group A to Z, just return S. species for now - x[i] <- microorganismsDT[mo == 'B_SLMNL', ..property][[1]][1L] - if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) - } - } else if (grepl("[sS]almonella [A-Z][a-z]+ ?.*", x_backup_without_spp[i], ignore.case = FALSE)) { - # Salmonella with capital letter species like "Salmonella Goettingen" - they're all S. enterica - x[i] <- microorganismsDT[mo == 'B_SLMNL_ENT', ..property][[1]][1L] - if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) - } - uncertainties <- rbind(uncertainties, - format_uncertainty_as_df(uncertainty_level = 1, - input = x_backup_without_spp[i], - result_mo = "B_SLMNL_ENT")) - } - next - } - - # trivial names known to the field: - if ("meningococcus" %like% x_trimmed[i]) { - # coerce S. coagulase positive - x[i] <- microorganismsDT[mo == 'B_NESSR_MEN', ..property][[1]][1L] - if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) - } - next - } - if ("gonococcus" %like% x_trimmed[i]) { - # coerce S. coagulase positive - x[i] <- microorganismsDT[mo == 'B_NESSR_GON', ..property][[1]][1L] - if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) - } - next - } - if ("pneumococcus" %like% x_trimmed[i]) { - # coerce S. coagulase positive - x[i] <- microorganismsDT[mo == 'B_STRPT_PNE', ..property][[1]][1L] - if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) - } - next - } - } - - # FIRST TRY FULLNAMES AND CODES ---- - # if only genus is available, return only genus - if (all(!c(x[i], x_trimmed[i]) %like% " ")) { - found <- microorganismsDT[fullname_lower %in% tolower(c(x_species[i], x_trimmed_species[i])), ..property][[1]] - if (length(found) > 0) { - x[i] <- found[1L] - if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) - } - next - } - if (nchar(x_backup_without_spp[i]) >= 6) { - found <- microorganismsDT[fullname_lower %like% paste0("^", unregex(x_backup_without_spp[i]), "[a-z]+"), ..property][[1]] - if (length(found) > 0) { - x[i] <- found[1L] - if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) - } - next - } - } - # rest of genus only is in allow_uncertain part. - } - - # TRY OTHER SOURCES ---- - # WHONET and other common LIS codes - if (toupper(x_backup[i]) %in% AMR::microorganisms.codes[, 1]) { - mo_found <- AMR::microorganisms.codes[toupper(x_backup[i]) == AMR::microorganisms.codes[, 1], "mo"][1L] - if (length(mo_found) > 0) { - x[i] <- microorganismsDT[mo == mo_found, ..property][[1]][1L] - if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) - } - next - } - } - if (!is.null(reference_df)) { - # self-defined reference - if (x_backup[i] %in% reference_df[, 1]) { - ref_mo <- reference_df[reference_df[, 1] == x_backup[i], "mo"] - if (ref_mo %in% microorganismsDT[, mo]) { - x[i] <- microorganismsDT[mo == ref_mo, ..property][[1]][1L] - next - } else { - warning("Value '", x_backup[i], "' was found in reference_df, but '", ref_mo, "' is not a valid MO code.", call. = FALSE) - } - } - } - - # allow no codes less than 4 characters long, was already checked for WHONET above - if (nchar(x_backup_without_spp[i]) < 4) { - x[i] <- microorganismsDT[mo == "UNKNOWN", ..property][[1]] - if (initial_search == TRUE) { - failures <- c(failures, x_backup[i]) - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) - } - next - } - - check_per_prevalence <- function(data_to_check, - a.x_backup, - b.x_trimmed, - c.x_trimmed_without_group, - d.x_withspaces_start_end, - e.x_withspaces_start_only, - f.x_withspaces_end_only, - g.x_backup_without_spp) { - - # try probable: trimmed version of fullname ---- - found <- data_to_check[fullname_lower %in% tolower(g.x_backup_without_spp), ..property][[1]] - if (length(found) > 0) { - return(found[1L]) - } - - # try any match keeping spaces ---- - found <- data_to_check[fullname %like% d.x_withspaces_start_end, ..property][[1]] - if (length(found) > 0 & nchar(g.x_backup_without_spp) >= 6) { - return(found[1L]) - } - - # try any match keeping spaces, not ending with $ ---- - found <- data_to_check[fullname %like% paste0(trimws(e.x_withspaces_start_only), " "), ..property][[1]] - if (length(found) > 0) { - return(found[1L]) - } - found <- data_to_check[fullname %like% e.x_withspaces_start_only, ..property][[1]] - if (length(found) > 0 & nchar(g.x_backup_without_spp) >= 6) { - return(found[1L]) - } - - # try any match keeping spaces, not start with ^ ---- - found <- data_to_check[fullname %like% paste0(" ", trimws(f.x_withspaces_end_only)), ..property][[1]] - if (length(found) > 0) { - return(found[1L]) - } - - # try a trimmed version - found <- data_to_check[fullname_lower %like% b.x_trimmed - | fullname_lower %like% c.x_trimmed_without_group, ..property][[1]] - if (length(found) > 0 & nchar(g.x_backup_without_spp) >= 6) { - return(found[1L]) - } - - - # try splitting of characters in the middle and then find ID ---- - # only when text length is 6 or lower - # like esco = E. coli, klpn = K. pneumoniae, stau = S. aureus, staaur = S. aureus - if (nchar(g.x_backup_without_spp) <= 6) { - x_length <- nchar(g.x_backup_without_spp) - x_split <- paste0("^", - g.x_backup_without_spp %>% substr(1, x_length / 2), - '.* ', - g.x_backup_without_spp %>% substr((x_length / 2) + 1, x_length)) - found <- data_to_check[fullname %like% x_split, ..property][[1]] - if (length(found) > 0) { - return(found[1L]) - } - } - - # try fullname without start and without nchar limit of >= 6 ---- - # like "K. pneu rhino" >> "Klebsiella pneumoniae (rhinoscleromatis)" = KLEPNERH - found <- data_to_check[fullname %like% e.x_withspaces_start_only, ..property][[1]] - if (length(found) > 0) { - return(found[1L]) - } - - # didn't found any - return(NA_character_) - } - - # FIRST TRY VERY PREVALENT IN HUMAN INFECTIONS ---- - x[i] <- check_per_prevalence(data_to_check = microorganismsDT[prevalence == 1], - a.x_backup = x_backup[i], - b.x_trimmed = x_trimmed[i], - c.x_trimmed_without_group = x_trimmed_without_group[i], - d.x_withspaces_start_end = x_withspaces_start_end[i], - e.x_withspaces_start_only = x_withspaces_start_only[i], - f.x_withspaces_end_only = x_withspaces_end_only[i], - g.x_backup_without_spp = x_backup_without_spp[i]) - if (!empty_result(x[i])) { - if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) - } - next - } - # THEN TRY PREVALENT IN HUMAN INFECTIONS ---- - x[i] <- check_per_prevalence(data_to_check = microorganismsDT[prevalence == 2], - a.x_backup = x_backup[i], - b.x_trimmed = x_trimmed[i], - c.x_trimmed_without_group = x_trimmed_without_group[i], - d.x_withspaces_start_end = x_withspaces_start_end[i], - e.x_withspaces_start_only = x_withspaces_start_only[i], - f.x_withspaces_end_only = x_withspaces_end_only[i], - g.x_backup_without_spp = x_backup_without_spp[i]) - if (!empty_result(x[i])) { - if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) - } - next - } - # THEN UNPREVALENT IN HUMAN INFECTIONS ---- - x[i] <- check_per_prevalence(data_to_check = microorganismsDT[prevalence == 3], - a.x_backup = x_backup[i], - b.x_trimmed = x_trimmed[i], - c.x_trimmed_without_group = x_trimmed_without_group[i], - d.x_withspaces_start_end = x_withspaces_start_end[i], - e.x_withspaces_start_only = x_withspaces_start_only[i], - f.x_withspaces_end_only = x_withspaces_end_only[i], - g.x_backup_without_spp = x_backup_without_spp[i]) - if (!empty_result(x[i])) { - if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) - } - next - } - - # MISCELLANEOUS ---- - - # look for old taxonomic names ---- - found <- microorganisms.oldDT[fullname_lower == tolower(x_backup[i]) - | fullname %like% x_withspaces_start_end[i],] - if (NROW(found) > 0) { - col_id_new <- found[1, col_id_new] - # when property is "ref" (which is the case in mo_ref, mo_authors and mo_year), return the old value, so: - # mo_ref("Chlamydia psittaci") = "Page, 1968" (with warning) - # mo_ref("Chlamydophila psittaci") = "Everett et al., 1999" - if (property == "ref") { - x[i] <- found[1, ref] - } else { - x[i] <- microorganismsDT[col_id == found[1, col_id_new], ..property][[1]] - } - options(mo_renamed_last_run = found[1, fullname]) - was_renamed(name_old = found[1, fullname], - name_new = microorganismsDT[col_id == found[1, col_id_new], fullname], - ref_old = found[1, ref], - ref_new = microorganismsDT[col_id == found[1, col_id_new], ref], - mo = microorganismsDT[col_id == found[1, col_id_new], mo]) - if (initial_search == TRUE) { - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) - } - next - } - - # check for uncertain results ---- - uncertain_fn <- function(a.x_backup, - b.x_trimmed, - c.x_withspaces_start_end, - d.x_withspaces_start_only, - f.x_withspaces_end_only, - g.x_backup_without_spp) { - - if (uncertainty_level == 0) { - # do not allow uncertainties - return(NA_character_) - } - - # UNCERTAINTY LEVEL 1 ---- - if (uncertainty_level >= 1) { - now_checks_for_uncertainty_level <- 1 - - # (1) look again for old taxonomic names, now for G. species ---- - if (isTRUE(debug)) { - cat("\n[ UNCERTAINTY LEVEL", now_checks_for_uncertainty_level, "] (1) look again for old taxonomic names, now for G. species\n") - } - if (isTRUE(debug)) { - message("Running '", c.x_withspaces_start_end, "' and '", d.x_withspaces_start_only, "'") - } - found <- microorganisms.oldDT[fullname %like% c.x_withspaces_start_end - | fullname %like% d.x_withspaces_start_only] - if (NROW(found) > 0 & nchar(g.x_backup_without_spp) >= 6) { - if (property == "ref") { - # when property is "ref" (which is the case in mo_ref, mo_authors and mo_year), return the old value, so: - # mo_ref("Chlamydia psittaci) = "Page, 1968" (with warning) - # mo_ref("Chlamydophila psittaci) = "Everett et al., 1999" - x <- found[1, ref] - } else { - x <- microorganismsDT[col_id == found[1, col_id_new], ..property][[1]] - } - was_renamed(name_old = found[1, fullname], - name_new = microorganismsDT[col_id == found[1, col_id_new], fullname], - ref_old = found[1, ref], - ref_new = microorganismsDT[col_id == found[1, col_id_new], ref], - mo = microorganismsDT[col_id == found[1, col_id_new], mo]) - options(mo_renamed_last_run = found[1, fullname]) - uncertainties <<- rbind(uncertainties, - format_uncertainty_as_df(uncertainty_level = now_checks_for_uncertainty_level, - input = a.x_backup, - result_mo = microorganismsDT[col_id == found[1, col_id_new], mo])) - if (initial_search == TRUE) { - set_mo_history(a.x_backup, get_mo_code(x, property), 1, force = force_mo_history) - } - return(x) - } - - # (2) Try with misspelled input ---- - # just rerun with dyslexia_mode = TRUE will used the extensive regex part above - if (isTRUE(debug)) { - cat("\n[ UNCERTAINTY LEVEL", now_checks_for_uncertainty_level, "] (2) Try with misspelled input\n") - } - if (isTRUE(debug)) { - message("Running '", a.x_backup, "'") - } - # first try without dyslexia mode - found <- suppressMessages(suppressWarnings(exec_as.mo(a.x_backup, initial_search = FALSE, dyslexia_mode = FALSE, allow_uncertain = FALSE, debug = debug))) - if (empty_result(found)) { - # then with dyslexia mode - found <- suppressMessages(suppressWarnings(exec_as.mo(a.x_backup, initial_search = FALSE, dyslexia_mode = TRUE, allow_uncertain = FALSE, debug = debug))) - } - if (!empty_result(found)) { - found_result <- found - found <- microorganismsDT[mo == found, ..property][[1]] - uncertainties <<- rbind(uncertainties, - format_uncertainty_as_df(uncertainty_level = now_checks_for_uncertainty_level, - input = a.x_backup, - result_mo = found_result[1L])) - if (initial_search == TRUE) { - set_mo_history(a.x_backup, get_mo_code(found[1L], property), 1, force = force_mo_history) - } - return(found[1L]) - } - } - - # UNCERTAINTY LEVEL 2 ---- - if (uncertainty_level >= 2) { - now_checks_for_uncertainty_level <- 2 - - # (3) look for genus only, part of name ---- - if (isTRUE(debug)) { - cat("\n[ UNCERTAINTY LEVEL", now_checks_for_uncertainty_level, "] (3) look for genus only, part of name\n") - } - if (nchar(g.x_backup_without_spp) > 4 & !b.x_trimmed %like% " ") { - if (!grepl("^[A-Z][a-z]+", b.x_trimmed, ignore.case = FALSE)) { - if (isTRUE(debug)) { - message("Running '", paste(b.x_trimmed, "species"), "'") - } - # not when input is like Genustext, because then Neospora would lead to Actinokineospora - found <- microorganismsDT[fullname_lower %like% paste(b.x_trimmed, "species"), ..property][[1]] - if (length(found) > 0) { - x[i] <- found[1L] - uncertainties <<- rbind(uncertainties, - format_uncertainty_as_df(uncertainty_level = now_checks_for_uncertainty_level, - input = a.x_backup, - result_mo = found_result[1L])) - if (initial_search == TRUE) { - set_mo_history(a.x_backup, get_mo_code(x, property), 2, force = force_mo_history) - } - return(x) - } - } - } - - # (4) strip values between brackets ---- - if (isTRUE(debug)) { - cat("\n[ UNCERTAINTY LEVEL", now_checks_for_uncertainty_level, "] (4) strip values between brackets\n") - } - a.x_backup_stripped <- gsub("( *[(].*[)] *)", " ", a.x_backup) - a.x_backup_stripped <- trimws(gsub(" +", " ", a.x_backup_stripped)) - if (isTRUE(debug)) { - message("Running '", a.x_backup_stripped, "'") - } - # first try without dyslexia mode - found <- suppressMessages(suppressWarnings(exec_as.mo(a.x_backup_stripped, initial_search = FALSE, dyslexia_mode = FALSE, allow_uncertain = FALSE, debug = debug))) - if (empty_result(found)) { - # then with dyslexia mode - found <- suppressMessages(suppressWarnings(exec_as.mo(a.x_backup_stripped, initial_search = FALSE, dyslexia_mode = TRUE, allow_uncertain = FALSE, debug = debug))) - } - if (!empty_result(found) & nchar(g.x_backup_without_spp) >= 6) { - found_result <- found - found <- microorganismsDT[mo == found, ..property][[1]] - uncertainties <<- rbind(uncertainties, - format_uncertainty_as_df(uncertainty_level = now_checks_for_uncertainty_level, - input = a.x_backup, - result_mo = found_result[1L])) - if (initial_search == TRUE) { - set_mo_history(a.x_backup, get_mo_code(found[1L], property), 2, force = force_mo_history) - } - return(found[1L]) - } - - # (5) inverse input ---- - if (isTRUE(debug)) { - cat("\n[ UNCERTAINTY LEVEL", now_checks_for_uncertainty_level, "] (5) inverse input\n") - } - a.x_backup_inversed <- paste(rev(unlist(strsplit(a.x_backup, split = " "))), collapse = " ") - if (isTRUE(debug)) { - message("Running '", a.x_backup_inversed, "'") - } - # first try without dyslexia mode - found <- suppressMessages(suppressWarnings(exec_as.mo(a.x_backup_inversed, initial_search = FALSE, dyslexia_mode = FALSE, allow_uncertain = FALSE, debug = debug))) - if (empty_result(found)) { - # then with dyslexia mode - found <- suppressMessages(suppressWarnings(exec_as.mo(a.x_backup_inversed, initial_search = FALSE, dyslexia_mode = TRUE, allow_uncertain = FALSE, debug = debug))) - } - if (!empty_result(found) & nchar(g.x_backup_without_spp) >= 6) { - found_result <- found - found <- microorganismsDT[mo == found, ..property][[1]] - uncertainties <<- rbind(uncertainties, - format_uncertainty_as_df(uncertainty_level = now_checks_for_uncertainty_level, - input = a.x_backup, - result_mo = found_result[1L])) - if (initial_search == TRUE) { - set_mo_history(a.x_backup, get_mo_code(found[1L], property), 2, force = force_mo_history) - } - return(found[1L]) - } - - # (6) try to strip off half an element from end and check the remains ---- - if (isTRUE(debug)) { - cat("\n[ UNCERTAINTY LEVEL", now_checks_for_uncertainty_level, "] (6) try to strip off half an element from end and check the remains\n") - } - x_strip <- a.x_backup %>% strsplit(" ") %>% unlist() - if (length(x_strip) > 1) { - for (i in 1:(length(x_strip) - 1)) { - lastword <- x_strip[length(x_strip) - i + 1] - lastword_half <- substr(lastword, 1, as.integer(nchar(lastword) / 2)) - # remove last half of the second term - x_strip_collapsed <- paste(c(x_strip[1:(length(x_strip) - i)], lastword_half), collapse = " ") - if (nchar(x_strip_collapsed) >= 4 & nchar(lastword_half) > 2) { - if (isTRUE(debug)) { - message("Running '", x_strip_collapsed, "'") - } - # first try without dyslexia mode - found <- suppressMessages(suppressWarnings(exec_as.mo(x_strip_collapsed, initial_search = FALSE, dyslexia_mode = FALSE, allow_uncertain = FALSE, debug = debug))) - if (empty_result(found)) { - # then with dyslexia mode - found <- suppressMessages(suppressWarnings(exec_as.mo(x_strip_collapsed, initial_search = FALSE, dyslexia_mode = TRUE, allow_uncertain = FALSE, debug = debug))) - } - if (!empty_result(found)) { - found_result <- found - found <- microorganismsDT[mo == found, ..property][[1]] - uncertainties <<- rbind(uncertainties, - format_uncertainty_as_df(uncertainty_level = now_checks_for_uncertainty_level, - input = a.x_backup, - result_mo = found_result[1L])) - if (initial_search == TRUE) { - set_mo_history(a.x_backup, get_mo_code(found[1L], property), 2, force = force_mo_history) - } - return(found[1L]) - } - } - } - } - # (7) try to strip off one element from end and check the remains ---- - if (isTRUE(debug)) { - cat("\n[ UNCERTAINTY LEVEL", now_checks_for_uncertainty_level, "] (7) try to strip off one element from end and check the remains\n") - } - if (length(x_strip) > 1) { - for (i in 1:(length(x_strip) - 1)) { - x_strip_collapsed <- paste(x_strip[1:(length(x_strip) - i)], collapse = " ") - if (nchar(x_strip_collapsed) >= 6) { - if (isTRUE(debug)) { - message("Running '", x_strip_collapsed, "'") - } - # first try without dyslexia mode - found <- suppressMessages(suppressWarnings(exec_as.mo(x_strip_collapsed, initial_search = FALSE, dyslexia_mode = FALSE, allow_uncertain = FALSE, debug = debug))) - if (empty_result(found)) { - # then with dyslexia mode - found <- suppressMessages(suppressWarnings(exec_as.mo(x_strip_collapsed, initial_search = FALSE, dyslexia_mode = TRUE, allow_uncertain = FALSE, debug = debug))) - } - if (!empty_result(found)) { - found_result <- found - found <- microorganismsDT[mo == found, ..property][[1]] - uncertainties <<- rbind(uncertainties, - format_uncertainty_as_df(uncertainty_level = now_checks_for_uncertainty_level, - input = a.x_backup, - result_mo = found_result[1L])) - if (initial_search == TRUE) { - set_mo_history(a.x_backup, get_mo_code(found[1L], property), 2, force = force_mo_history) - } - return(found[1L]) - } - } - } - } - # (8) check for unknown yeasts/fungi ---- - if (isTRUE(debug)) { - cat("\n[ UNCERTAINTY LEVEL", now_checks_for_uncertainty_level, "] (8) check for unknown yeasts/fungi\n") - } - if (b.x_trimmed %like% "yeast") { - found <- "F_YEAST" - found_result <- found - found <- microorganismsDT[mo == found, ..property][[1]] - uncertainties <<- rbind(uncertainties, - format_uncertainty_as_df(uncertainty_level = now_checks_for_uncertainty_level, - input = a.x_backup, - result_mo = found_result[1L])) - if (initial_search == TRUE) { - set_mo_history(a.x_backup, get_mo_code(found[1L], property), 2, force = force_mo_history) - } - return(found[1L]) - } - if (b.x_trimmed %like% "(fungus|fungi)" & !b.x_trimmed %like% "Fungiphrya") { - found <- "F_FUNGUS" - found_result <- found - found <- microorganismsDT[mo == found, ..property][[1]] - uncertainties <<- rbind(uncertainties, - format_uncertainty_as_df(uncertainty_level = now_checks_for_uncertainty_level, - input = a.x_backup, - result_mo = found_result[1L])) - if (initial_search == TRUE) { - set_mo_history(a.x_backup, get_mo_code(found[1L], property), 2, force = force_mo_history) - } - return(found[1L]) - } - # (9) try to strip off one element from start and check the remains (only allow >= 2-part name outcome) ---- - if (isTRUE(debug)) { - cat("\n[ UNCERTAINTY LEVEL", now_checks_for_uncertainty_level, "] (9) try to strip off one element from start and check the remains (only allow >= 2-part name outcome)\n") - } - x_strip <- a.x_backup %>% strsplit(" ") %>% unlist() - if (length(x_strip) > 1 & nchar(g.x_backup_without_spp) >= 6) { - for (i in 2:(length(x_strip))) { - x_strip_collapsed <- paste(x_strip[i:length(x_strip)], collapse = " ") - if (isTRUE(debug)) { - message("Running '", x_strip_collapsed, "'") - } - # first try without dyslexia mode - found <- suppressMessages(suppressWarnings(exec_as.mo(x_strip_collapsed, initial_search = FALSE, dyslexia_mode = FALSE, allow_uncertain = FALSE, debug = debug))) - if (empty_result(found)) { - # then with dyslexia mode - found <- suppressMessages(suppressWarnings(exec_as.mo(x_strip_collapsed, initial_search = FALSE, dyslexia_mode = TRUE, allow_uncertain = FALSE, debug = debug))) - } - if (!empty_result(found)) { - found_result <- found - found <- microorganismsDT[mo == found_result[1L], ..property][[1]] - # uncertainty level 2 only if searched part contains a space (otherwise it will be found with lvl 3) - if (x_strip_collapsed %like% " ") { - uncertainties <<- rbind(uncertainties, - format_uncertainty_as_df(uncertainty_level = now_checks_for_uncertainty_level, - input = a.x_backup, - result_mo = found_result[1L])) - if (initial_search == TRUE) { - set_mo_history(a.x_backup, get_mo_code(found[1L], property), 2, force = force_mo_history) - } - return(found[1L]) - } - } - } - } - } - - # UNCERTAINTY LEVEL 3 ---- - if (uncertainty_level >= 3) { - now_checks_for_uncertainty_level <- 3 - - # (10) try to strip off one element from start and check the remains (any text size) ---- - if (isTRUE(debug)) { - cat("\n[ UNCERTAINTY LEVEL", now_checks_for_uncertainty_level, "] (10) try to strip off one element from start and check the remains (any text size)\n") - } - x_strip <- a.x_backup %>% strsplit(" ") %>% unlist() - if (length(x_strip) > 1 & nchar(g.x_backup_without_spp) >= 6) { - for (i in 2:(length(x_strip))) { - x_strip_collapsed <- paste(x_strip[i:length(x_strip)], collapse = " ") - if (isTRUE(debug)) { - message("Running '", x_strip_collapsed, "'") - } - # first try without dyslexia mode - found <- suppressMessages(suppressWarnings(exec_as.mo(x_strip_collapsed, initial_search = FALSE, dyslexia_mode = FALSE, allow_uncertain = FALSE, debug = debug))) - if (empty_result(found)) { - # then with dyslexia mode - found <- suppressMessages(suppressWarnings(exec_as.mo(x_strip_collapsed, initial_search = FALSE, dyslexia_mode = TRUE, allow_uncertain = FALSE, debug = debug))) - } - if (!empty_result(found)) { - found_result <- found - found <- microorganismsDT[mo == found, ..property][[1]] - uncertainties <<- rbind(uncertainties, - format_uncertainty_as_df(uncertainty_level = now_checks_for_uncertainty_level, - input = a.x_backup, - result_mo = found_result[1L])) - if (initial_search == TRUE) { - set_mo_history(a.x_backup, get_mo_code(found[1L], property), 3, force = force_mo_history) - } - return(found[1L]) - } - } - } - # (11) try to strip off one element from end and check the remains (any text size) ---- - # (this is in fact 7 but without nchar limit of >=6) - if (isTRUE(debug)) { - cat("\n[ UNCERTAINTY LEVEL", now_checks_for_uncertainty_level, "] (11) try to strip off one element from end and check the remains (any text size)\n") - } - if (length(x_strip) > 1) { - for (i in 1:(length(x_strip) - 1)) { - x_strip_collapsed <- paste(x_strip[1:(length(x_strip) - i)], collapse = " ") - if (isTRUE(debug)) { - message("Running '", x_strip_collapsed, "'") - } - # first try without dyslexia mode - found <- suppressMessages(suppressWarnings(exec_as.mo(x_strip_collapsed, initial_search = FALSE, dyslexia_mode = FALSE, allow_uncertain = FALSE, debug = debug))) - if (empty_result(found)) { - # then with dyslexia mode - found <- suppressMessages(suppressWarnings(exec_as.mo(x_strip_collapsed, initial_search = FALSE, dyslexia_mode = TRUE, allow_uncertain = FALSE, debug = debug))) - } - if (!empty_result(found)) { - found_result <- found - found <- microorganismsDT[mo == found, ..property][[1]] - uncertainties <<- rbind(uncertainties, - format_uncertainty_as_df(uncertainty_level = now_checks_for_uncertainty_level, - input = a.x_backup, - result_mo = found_result[1L])) - if (initial_search == TRUE) { - set_mo_history(a.x_backup, get_mo_code(found[1L], property), 2, force = force_mo_history) - } - return(found[1L]) - } - } - } - - # (12) part of a name (very unlikely match) ---- - if (isTRUE(debug)) { - cat("\n[ UNCERTAINTY LEVEL", now_checks_for_uncertainty_level, "] (12) part of a name (very unlikely match)\n") - } - if (isTRUE(debug)) { - message("Running '", f.x_withspaces_end_only, "'") - } - found <- microorganismsDT[fullname %like% f.x_withspaces_end_only] - if (nrow(found) > 0) { - found_result <- found[["mo"]] - if (!empty_result(found_result) & nchar(g.x_backup_without_spp) >= 6) { - found <- microorganismsDT[mo == found_result[1L], ..property][[1]] - uncertainties <<- rbind(uncertainties, - format_uncertainty_as_df(uncertainty_level = now_checks_for_uncertainty_level, - input = a.x_backup, - result_mo = found_result[1L])) - if (initial_search == TRUE) { - set_mo_history(a.x_backup, get_mo_code(found[1L], property), 3, force = force_mo_history) - } - return(found[1L]) - } - } - } - - # didn't found in uncertain results too - return(NA_character_) - } - x[i] <- uncertain_fn(x_backup[i], - x_trimmed[i], - x_withspaces_start_end[i], - x_withspaces_start_only[i], - x_withspaces_end_only[i], - x_backup_without_spp[i]) - if (!empty_result(x[i])) { - # no set_mo_history here - it is already set in uncertain_fn() - next - } - - # no results found: make them UNKNOWN ---- - x[i] <- microorganismsDT[mo == "UNKNOWN", ..property][[1]] - if (initial_search == TRUE) { - failures <- c(failures, x_backup[i]) - set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) - } - } - } - - # handling failures ---- - failures <- failures[!failures %in% c(NA, NULL, NaN)] - if (length(failures) > 0 & initial_search == TRUE) { - options(mo_failures = sort(unique(failures))) - plural <- c("value", "it", "was") - if (n_distinct(failures) > 1) { - plural <- c("values", "them", "were") - } - total_failures <- length(x_input[as.character(x_input) %in% as.character(failures) & !x_input %in% c(NA, NULL, NaN)]) - total_n <- length(x_input[!x_input %in% c(NA, NULL, NaN)]) - msg <- paste0(nr2char(n_distinct(failures)), " unique ", plural[1], - " (covering ", percent(total_failures / total_n, round = 1, force_zero = TRUE), - ") could not be coerced and ", plural[3], " considered 'unknown'") - if (n_distinct(failures) <= 10) { - msg <- paste0(msg, ": ", paste('"', unique(failures), '"', sep = "", collapse = ', ')) - } - msg <- paste0(msg, ". Use mo_failures() to review ", plural[2], ". Edit the `allow_uncertain` parameter if needed (see ?as.mo).") - warning(red(msg), - call. = FALSE, - immediate. = TRUE) # thus will always be shown, even if >= warnings - } - # handling uncertainties ---- - if (NROW(uncertainties) > 0 & initial_search == TRUE) { - options(mo_uncertainties = as.list(distinct(uncertainties, input, .keep_all = TRUE))) - - plural <- c("", "it") - if (NROW(uncertainties) > 1) { - plural <- c("s", "them") - } - msg <- paste0("\nResult", plural[1], " of ", nr2char(NROW(uncertainties)), " value", plural[1], - " was guessed with uncertainty. Use mo_uncertainties() to review ", plural[2], ".") - warning(red(msg), - call. = FALSE, - immediate. = TRUE) # thus will always be shown, even if >= warnings - } - - # Becker ---- - if (Becker == TRUE | Becker == "all") { - # See Source. It's this figure: - # https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4187637/figure/F3/ - MOs_staph <- microorganismsDT[genus == "Staphylococcus"] - setkey(MOs_staph, species) - CoNS <- MOs_staph[species %in% c("arlettae", "auricularis", "capitis", - "caprae", "carnosus", "chromogenes", "cohnii", "condimenti", - "devriesei", "epidermidis", "equorum", "felis", - "fleurettii", "gallinarum", "haemolyticus", - "hominis", "jettensis", "kloosii", "lentus", - "lugdunensis", "massiliensis", "microti", - "muscae", "nepalensis", "pasteuri", "petrasii", - "pettenkoferi", "piscifermentans", "rostri", - "saccharolyticus", "saprophyticus", "sciuri", - "stepanovicii", "simulans", "succinus", - "vitulinus", "warneri", "xylosus") - | (species == "schleiferi" & subspecies %in% c("schleiferi", "")), ..property][[1]] - CoPS <- MOs_staph[species %in% c("simiae", "agnetis", - "delphini", "lutrae", - "hyicus", "intermedius", - "pseudintermedius", "pseudointermedius", - "schweitzeri", "argenteus") - | (species == "schleiferi" & subspecies == "coagulans"), ..property][[1]] - - # warn when species found that are not in Becker (2014, PMID 25278577) and Becker (2019, PMID 30872103) - post_Becker <- c("argensis", "caeli", "cornubiensis", "edaphicus") - if (any(x %in% MOs_staph[species %in% post_Becker, ..property][[1]])) { - - warning("Becker ", italic("et al."), " (2014, 2019) does not contain these species named after their publication: ", - italic(paste("S.", - sort(mo_species(unique(x[x %in% MOs_staph[species %in% post_Becker, ..property][[1]]]))), - collapse = ", ")), - ".", - call. = FALSE, - immediate. = TRUE) - } - - x[x %in% CoNS] <- microorganismsDT[mo == 'B_STPHY_CNS', ..property][[1]][1L] - x[x %in% CoPS] <- microorganismsDT[mo == 'B_STPHY_CPS', ..property][[1]][1L] - if (Becker == "all") { - x[x %in% microorganismsDT[mo %like% '^B_STPHY_AUR', ..property][[1]]] <- microorganismsDT[mo == 'B_STPHY_CPS', ..property][[1]][1L] - } - } - - # Lancefield ---- - if (Lancefield == TRUE | Lancefield == "all") { - # group A - S. pyogenes - x[x == microorganismsDT[mo == 'B_STRPT_PYO', ..property][[1]][1L]] <- microorganismsDT[mo == 'B_STRPT_GRA', ..property][[1]][1L] - # group B - S. agalactiae - x[x == microorganismsDT[mo == 'B_STRPT_AGA', ..property][[1]][1L]] <- microorganismsDT[mo == 'B_STRPT_GRB', ..property][[1]][1L] - # group C - S_groupC <- microorganismsDT %>% filter(genus == "Streptococcus", - species %in% c("equisimilis", "equi", - "zooepidemicus", "dysgalactiae")) %>% - pull(property) - x[x %in% S_groupC] <- microorganismsDT[mo == 'B_STRPT_GRC', ..property][[1]][1L] - if (Lancefield == "all") { - # all Enterococci - x[x %like% "^(Enterococcus|B_ENTRC)"] <- microorganismsDT[mo == 'B_STRPT_GRD', ..property][[1]][1L] - } - # group F - S. anginosus - x[x == microorganismsDT[mo == 'B_STRPT_ANG', ..property][[1]][1L]] <- microorganismsDT[mo == 'B_STRPT_GRF', ..property][[1]][1L] - # group H - S. sanguinis - x[x == microorganismsDT[mo == 'B_STRPT_SAN', ..property][[1]][1L]] <- microorganismsDT[mo == 'B_STRPT_GRH', ..property][[1]][1L] - # group K - S. salivarius - x[x == microorganismsDT[mo == 'B_STRPT_SAL', ..property][[1]][1L]] <- microorganismsDT[mo == 'B_STRPT_GRK', ..property][[1]][1L] - } - - # Wrap up ---------------------------------------------------------------- - - # comply to x, which is also unique and without empty values - x_input_unique_nonempty <- unique(x_input[!is.na(x_input) - & !is.null(x_input) - & !identical(x_input, "") - & !identical(x_input, "xxx")]) - - # left join the found results to the original input values (x_input) - df_found <- data.frame(input = as.character(x_input_unique_nonempty), - found = as.character(x), - stringsAsFactors = FALSE) - df_input <- data.frame(input = as.character(x_input), - stringsAsFactors = FALSE) - - suppressWarnings( - x <- df_input %>% - left_join(df_found, - by = "input") %>% - pull(found) - ) - - if (property == "mo") { - x <- to_class_mo(x) - } - - if (length(mo_renamed()) > 0) { - print(mo_renamed()) - } - - x -} diff --git a/R/mo_history.R b/R/mo_history.R index 18ac330e..6cd3c48a 100644 --- a/R/mo_history.R +++ b/R/mo_history.R @@ -19,116 +19,152 @@ # Visit our website for more info: https://msberends.gitlab.io/AMR. # # ==================================================================== # -# print successful as.mo coercions to AMR environment -#' @importFrom dplyr %>% distinct filter -set_mo_history <- function(x, mo, uncertainty_level, force = FALSE) { - # disable function for now - return(base::invisible()) +mo_history_file <- file.path(file.path(system.file(package = "AMR"), "mo_history"), "mo_history.csv") - # if (base::interactive() | force == TRUE) { - # mo_hist <- read_mo_history(uncertainty_level = uncertainty_level, force = force) - # df <- data.frame(x, mo, stringsAsFactors = FALSE) %>% - # distinct(x, .keep_all = TRUE) %>% - # filter(!is.na(x) & !is.na(mo)) - # if (nrow(df) == 0) { - # return(base::invisible()) - # } - # x <- toupper(df$x) - # mo <- df$mo - # for (i in 1:length(x)) { - # # save package version too, as both the as.mo() algorithm and the reference data set may change - # if (NROW(mo_hist[base::which(mo_hist$x == x[i] & - # mo_hist$uncertainty_level >= uncertainty_level & - # mo_hist$package_v == utils::packageVersion("AMR")),]) == 0) { - # tryCatch( - # assign(x = "mo_history", - # value = rbind(mo_hist, - # data.frame( - # x = x[i], - # mo = mo[i], - # uncertainty_level = uncertainty_level, - # package_v = base::as.character(utils::packageVersion("AMR")), - # stringsAsFactors = FALSE)), - # envir = asNamespace("AMR")), - # error = function(e) invisible()) - # } - # } - # } - # return(base::invisible()) +# print successful as.mo coercions to a options entry +#' @importFrom dplyr %>% distinct filter +set_mo_history <- function(x, mo, uncertainty_level, force = FALSE, disable = FALSE) { + if (isTRUE(disable)) { + return(base::invisible()) + } + + if (base::interactive() | force == TRUE) { + mo_hist <- read_mo_history(uncertainty_level = uncertainty_level, force = force) + df <- data.frame(x, mo, stringsAsFactors = FALSE) %>% + distinct(x, .keep_all = TRUE) %>% + filter(!is.na(x) & !is.na(mo)) + if (nrow(df) == 0) { + return(base::invisible()) + } + x <- toupper(df$x) + mo <- df$mo + for (i in 1:length(x)) { + # save package version too, as both the as.mo() algorithm and the reference data set may change + if (NROW(mo_hist[base::which(mo_hist$x == x[i] & + mo_hist$uncertainty_level >= uncertainty_level & + mo_hist$package_v == utils::packageVersion("AMR")),]) == 0) { + # # Not using the file system: + # tryCatch(options(mo_remembered_results = rbind(mo_hist, + # data.frame( + # x = x[i], + # mo = mo[i], + # uncertainty_level = uncertainty_level, + # package_v = base::as.character(utils::packageVersion("AMR")), + # stringsAsFactors = FALSE))), + # error = function(e) base::invisible()) + # # don't remember more than 1,000 different input values + # if (tryCatch(nrow(getOption("mo_remembered_results")), error = function(e) 1001) > 1000) { + # return(base::invisible()) + # } + if (is.null(mo_hist)) { + message(blue(paste0("NOTE: results are saved to ", mo_history_file, "."))) + } + tryCatch(write.csv(rbind(mo_hist, + data.frame( + x = x[i], + mo = mo[i], + uncertainty_level = uncertainty_level, + package_v = base::as.character(utils::packageVersion("AMR")), + stringsAsFactors = FALSE)), + file = mo_history_file, row.names = FALSE), + error = function(e) base::invisible()) + } + } + } + return(base::invisible()) } -get_mo_history <- function(x, uncertainty_level, force = FALSE) { - # disable function for now - return(NA) +get_mo_history <- function(x, uncertainty_level, force = FALSE, disable = FALSE) { + if (isTRUE(disable)) { + return(to_class_mo(NA)) + } - # history <- read_mo_history(uncertainty_level = uncertainty_level, force = force) - # if (base::is.null(history)) { - # NA - # } else { - # data.frame(x = toupper(x), stringsAsFactors = FALSE) %>% - # left_join(history, by = "x") %>% - # pull(mo) - # } + history <- read_mo_history(uncertainty_level = uncertainty_level, force = force) + if (base::is.null(history)) { + result <- NA + } else { + result <- data.frame(x = toupper(x), stringsAsFactors = FALSE) %>% + left_join(history, by = "x") %>% + pull(mo) + } + to_class_mo(result) } #' @importFrom dplyr %>% filter distinct -read_mo_history <- function(uncertainty_level = 2, force = FALSE, unfiltered = FALSE) { - # disable function for now - return(NULL) +read_mo_history <- function(uncertainty_level = 2, force = FALSE, unfiltered = FALSE, disable = FALSE) { + if (isTRUE(disable)) { + return(NULL) + } - # if ((!base::interactive() & force == FALSE)) { - # return(NULL) - # } - # uncertainty_level_param <- uncertainty_level - # - # history <- tryCatch(get("mo_history", envir = asNamespace("AMR")), - # error = function(e) NULL) - # if (is.null(history)) { - # return(NULL) - # } - # # Below: filter on current package version. - # # Even current fullnames may be replaced by new taxonomic names, so new versions of - # # the Catalogue of Life must not lead to data corruption. - # - # if (unfiltered == FALSE) { - # history <- history %>% - # filter(package_v == as.character(utils::packageVersion("AMR")), - # # only take unknowns if uncertainty_level_param is higher - # ((mo == "UNKNOWN" & uncertainty_level_param == uncertainty_level) | - # (mo != "UNKNOWN" & uncertainty_level_param >= uncertainty_level))) %>% - # arrange(desc(uncertainty_level)) %>% - # distinct(x, mo, .keep_all = TRUE) - # } - # - # if (nrow(history) == 0) { - # NULL - # } else { - # history - # } + if ((!base::interactive() & force == FALSE)) { + return(NULL) + } + uncertainty_level_param <- uncertainty_level + + # # Not using the file system: + # history <- tryCatch(getOption("mo_remembered_results"), + # error = function(e) NULL) + history <- tryCatch(read.csv(mo_history_file, stringsAsFactors = FALSE), + warning = function(w) invisible(), + error = function(e) NULL) + if (is.null(history)) { + return(NULL) + } + # Below: filter on current package version. + # Even current fullnames may be replaced by new taxonomic names, so new versions of + # the Catalogue of Life must not lead to data corruption. + + if (unfiltered == FALSE) { + history <- history %>% + filter(package_v == as.character(utils::packageVersion("AMR")), + # only take unknowns if uncertainty_level_param is higher + ((mo == "UNKNOWN" & uncertainty_level_param == uncertainty_level) | + (mo != "UNKNOWN" & uncertainty_level_param >= uncertainty_level))) %>% + arrange(desc(uncertainty_level)) %>% + distinct(x, mo, .keep_all = TRUE) + } + + if (nrow(history) == 0) { + NULL + } else { + history + } } -# @rdname as.mo -# @importFrom crayon red -# @importFrom utils menu -# @export -clean_mo_history <- function(...) { - # if (!is.null(read_mo_history())) { - # if (interactive() & !isTRUE(list(...)$force)) { - # q <- menu(title = paste("This will remove all", - # format(nrow(read_mo_history(999, unfiltered = TRUE)), big.mark = ","), - # "microbial IDs determined previously in this session. Are you sure?"), - # choices = c("Yes", "No"), - # graphics = FALSE) - # if (q != 1) { - # return(invisible()) - # } - # } - # tryCatch( - # assign(x = "mo_history", - # value = NULL, - # envir = asNamespace("AMR")), - # error = function(e) invisible()) - # cat(red("History removed.")) - # } +#' @rdname as.mo +#' @importFrom crayon red +#' @importFrom utils menu +#' @export +clear_mo_history <- function(...) { + if (!is.null(read_mo_history())) { + if (interactive() & !isTRUE(list(...)$force)) { + q <- menu(title = paste("This will clear all", + format(nrow(read_mo_history(999, unfiltered = TRUE)), big.mark = ","), + "previously determined microbial IDs. Are you sure?"), + choices = c("Yes", "No"), + graphics = FALSE) + if (q != 1) { + return(invisible()) + } + } + # # Not using the file system: + # success <- tryCatch(options(mo_remembered_results = NULL), + # error = function(e) FALSE) + success <- create_blank_mo_history() + if (!isFALSE(success)) { + cat(red(paste("File", mo_history_file, "cleared."))) + } + } } +create_blank_mo_history <- function() { + tryCatch( + write.csv(x = data.frame(x = character(0), + mo = character(0), + uncertainty_level = integer(0), + package_v = character(0), + stringsAsFactors = FALSE), + file = mo_history_file), + warning = function(w) invisible(), + error = function(e) TRUE) +} diff --git a/R/mo_property.R b/R/mo_property.R index ed116d9b..d8650eaa 100755 --- a/R/mo_property.R +++ b/R/mo_property.R @@ -408,7 +408,7 @@ mo_validate <- function(x, property, ...) { if (!"AMR" %in% base::.packages()) { require("AMR") - # check onLoad() in R/zzz.R: data tables are created there. + # check .onLoad() in R/zzz.R: data tables are created there. } # try to catch an error when inputting an invalid parameter diff --git a/R/zzz.R b/R/zzz.R index a6b39452..0599f71d 100755 --- a/R/zzz.R +++ b/R/zzz.R @@ -26,7 +26,8 @@ # register data microorganisms.oldDT <- as.data.table(AMR::microorganisms.old) - microorganisms.oldDT$fullname_lower <- tolower(microorganisms.oldDT$fullname) + # for fullname_lower: keep only dots, letters, numbers, slashes, spaces and dashes + microorganisms.oldDT$fullname_lower <- gsub("[^.a-z0-9/ \\-]+", "", tolower(microorganisms.oldDT$fullname)) setkey(microorganisms.oldDT, col_id, fullname) assign(x = "microorganismsDT", @@ -81,7 +82,8 @@ #' @importFrom data.table as.data.table setkey make_DT <- function() { microorganismsDT <- as.data.table(AMR::microorganisms) - microorganismsDT$fullname_lower <- tolower(microorganismsDT$fullname) + # for fullname_lower: keep only dots, letters, numbers, slashes, spaces and dashes + microorganismsDT$fullname_lower <- gsub("[^.a-z0-9/ \\-]+", "", tolower(microorganismsDT$fullname)) setkey(microorganismsDT, prevalence, kingdom, diff --git a/_pkgdown.yml b/_pkgdown.yml index a4d8ac2f..2e0b6ed2 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -118,7 +118,7 @@ reference: - "`ab_property`" - "`age`" - "`age_groups`" - - "`p.symbol`" + - "`p_symbol`" - "`join`" - "`atc_online_property`" - title: "Analysing your data" diff --git a/codecov.yml b/codecov.yml index 13bb0025..fea6aac8 100644 --- a/codecov.yml +++ b/codecov.yml @@ -19,3 +19,4 @@ ignore: - "R/atc_online.R" - "R/mo_source.R" - "R/resistance_predict.R" + - "R/aa_test.R" diff --git a/data-raw/internals.R b/data-raw/internals.R index 1be61db0..f5fc6e72 100644 --- a/data-raw/internals.R +++ b/data-raw/internals.R @@ -19,7 +19,7 @@ eucast_rules_file <- dplyr::arrange( reference.rule_group, reference.rule) -# Translations ----- +# Translations ---- translations_file <- utils::read.delim(file = "data-raw/translations.tsv", sep = "\t", stringsAsFactors = FALSE, @@ -42,3 +42,16 @@ usethis::use_data(eucast_rules_file, translations_file, # Remove from global environment ---- rm(eucast_rules_file) rm(translations_file) + +# Clean mo history ---- +mo_history_file <- file.path(file.path(system.file(package = "AMR"), "mo_history"), "mo_history.csv") +usethis::ui_done(paste0("Resetting {usethis::ui_value('", mo_history_file, "')}")) +tryCatch( + write.csv(x = data.frame(x = character(0), + mo = character(0), + uncertainty_level = integer(0), + package_v = character(0), + stringsAsFactors = FALSE), + file = mo_history_file), + warning = function(w) invisible(), + error = function(e) TRUE) diff --git a/docs/LICENSE-text.html b/docs/LICENSE-text.html index 64d7693f..615dfbb7 100644 --- a/docs/LICENSE-text.html +++ b/docs/LICENSE-text.html @@ -78,7 +78,7 @@ AMR (for R) - 0.7.1.9072 + 0.7.1.9073 diff --git a/docs/articles/benchmarks_files/figure-html/unnamed-chunk-4-1.png b/docs/articles/benchmarks_files/figure-html/unnamed-chunk-4-1.png index 8c2664144a26937c3fa981c1cd8e8f4eecfe62d0..a79adfcbdd83b2620bbd1b9d100942d9305448f7 100644 GIT binary patch literal 95360 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 VzP3;6!~OvOcL-8L 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%0ANIJN$_78ZVGEo?V9cae__pv~9;5jgGN~ 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≥HcRR2onMC~AxYOcet#I;^*Roy~ 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 z%0APG`j?pVpO+N@}gg5Y6JW&c4I8xZUdX6ouO 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 >n%Mg_G=76F*_eq;(NyOMrnd><^7^JN6v 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 pme(&`QHhT%SyOq$!|z3T}lB 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 AMR (for R) - 0.7.1.9072 + 0.7.1.9073 diff --git a/docs/authors.html b/docs/authors.html index 6bddc998..6b47c3f8 100644 --- a/docs/authors.html +++ b/docs/authors.html @@ -78,7 +78,7 @@ AMR (for R) - 0.7.1.9072 + 0.7.1.9073 @@ -253,6 +253,10 @@

Erwin E. A. Hassing. Contributor.

+
  • +

    Eric H. L. C. M. Hazenberg. Contributor. +

    +
  • Annick Lenglet. Contributor.

    diff --git a/docs/index.html b/docs/index.html index 98dc1422..46363878 100644 --- a/docs/index.html +++ b/docs/index.html @@ -42,7 +42,7 @@ AMR (for R) - 0.7.1.9072 + 0.7.1.9073 diff --git a/docs/reference/as.mo.html b/docs/reference/as.mo.html index e11b9f21..8cbbb4a4 100644 --- a/docs/reference/as.mo.html +++ b/docs/reference/as.mo.html @@ -80,7 +80,7 @@ AMR (for R) - 0.7.1.9055 + 0.7.1.9073 @@ -243,7 +243,9 @@ mo_uncertainties() -mo_renamed() +mo_renamed() + +clear_mo_history(...)

    Arguments

    @@ -283,7 +285,7 @@

    Details

    General info
    -A microbial ID from this package (class: mo) typically looks like these examples:

    +A microorganism ID from this package (class: mo) typically looks like these examples:

       Code              Full name
       ---------------   --------------------------------------
       B_KLBSL           Klebsiella
    @@ -299,8 +301,11 @@ A microbial ID from this package (class: mo) typically looks like t
     

    Values that cannot be coered will be considered 'unknown' and will get the MO code UNKNOWN.

    Use the mo_property_* functions to get properties based on the returned code, see Examples.

    -

    The algorithm uses data from the Catalogue of Life (see below) and from one other source (see ?microorganisms).

    -

    Intelligent rules
    +

    The algorithm uses data from the Catalogue of Life (see below) and from one other source (see microorganisms).

    +

    Self-learning algoritm
    +The as.mo() function gains experience from previously determined microorganism IDs and learns from it. This drastically improves both speed and reliability. Use clear_mo_history() to reset the algorithms. Only experience from your current AMR package version is used. This is done because in the future the taxonomic tree (which is included in this package) may change for any organism and it consequently has to rebuild its knowledge.

    +

    Usually, any guess after the first try runs 80-95% faster than the first try.

    +

    Intelligent rules
    This function uses intelligent rules to help getting fast and logical results. It tries to find matches in this order:

    • Valid MO codes and full names: it first searches in already valid MO code and known genus/species combinations

    • Human pathogenic prevalence: it first searches in more prevalent microorganisms, then less prevalent ones (see Microbial prevalence of pathogens in humans below)

    • @@ -326,7 +331,7 @@ The algorithm can additionally use three different levels of uncertainty to gues

    Use mo_failures() to get a vector with all values that could not be coerced to a valid value.

    Use mo_uncertainties() to get a data.frame with all values that were coerced to a valid value, but with uncertainty.

    -

    Use mo_renamed() to get a vector with all values that could be coerced based on an old, previously accepted taxonomic name.

    +

    Use mo_renamed() to get a data.frame with all values that could be coerced based on an old, previously accepted taxonomic name.

    Microbial prevalence of pathogens in humans
    The intelligent rules take into account microbial prevalence of pathogens in humans. It uses three groups and all (sub)species are in only one group. These groups are:

    • 1 (most prevalent): class is Gammaproteobacteria or genus is one of: Enterococcus, Staphylococcus, Streptococcus.

    • @@ -334,7 +339,7 @@ The intelligent rules take into account microbial prevalence of pathogens in hum
    • 3 (least prevalent): all others.

    Group 1 contains all common Gram positives and Gram negatives, like all Enterobacteriaceae and e.g. Pseudomonas and Legionella.

    -

    Group 2 probably contains less microbial pathogens; all other members of phyla that were found in humans in the Northern Netherlands between 2001 and 2018.

    +

    Group 2 contains probably less pathogenic microorganisms; all other members of phyla that were found in humans in the Northern Netherlands between 2001 and 2018.

    Source

    diff --git a/docs/reference/index.html b/docs/reference/index.html index e85c7ddc..3fa080be 100644 --- a/docs/reference/index.html +++ b/docs/reference/index.html @@ -78,7 +78,7 @@ AMR (for R) - 0.7.1.9072 + 0.7.1.9073 @@ -292,7 +292,7 @@
    @@ -384,9 +384,9 @@ - + diff --git a/docs/reference/like.html b/docs/reference/like.html index d313e9d8..743e75de 100644 --- a/docs/reference/like.html +++ b/docs/reference/like.html @@ -47,7 +47,7 @@ - + @@ -80,7 +80,7 @@ AMR (for R) - 0.7.1.9067 + 0.7.1.9073 @@ -230,13 +230,15 @@
    -

    Convenient wrapper around grep to match a pattern: a %like% b. It always returns a logical vector and is always case-insensitive. Also, pattern (b) can be as long as x (a) to compare items of each index in both vectors.

    +

    Convenient wrapper around grep to match a pattern: a %like% b. It always returns a logical vector and is always case-insensitive (use a %like_case% b for case-sensitive matching). Also, pattern (b) can be as long as x (a) to compare items of each index in both vectors, or can both have the same length to iterate over all cases.

    -
    like(x, pattern)
    +    
    like(x, pattern, ignore.case = TRUE)
     
    -x %like% pattern
    +x %like% pattern + +x %like_case% pattern

    Arguments

    -

    as.mo() is.mo() mo_failures() mo_uncertainties() mo_renamed()

    +

    as.mo() is.mo() mo_failures() mo_uncertainties() mo_renamed() clear_mo_history()

    Transform to microorganism ID

    -

    as.atc() p.symbol()

    +

    p_symbol()

    Deprecated functions

    Symbol of a p value

    @@ -528,7 +528,7 @@
    -

    like() `%like%`

    +

    like() `%like%` `%like_case%`

    Pattern Matching

    @@ -257,6 +259,11 @@ is used with a warning. Missing values are allowed except for regexpr and gregexpr.

    + + + +
    ignore.case

    if FALSE, the pattern matching is case + sensitive and if TRUE, case is ignored during matching.

    Source

    diff --git a/docs/reference/translate.html b/docs/reference/translate.html index 14176405..252a1822 100644 --- a/docs/reference/translate.html +++ b/docs/reference/translate.html @@ -80,7 +80,7 @@ AMR (for R) - 0.7.1.9072 + 0.7.1.9073 diff --git a/inst/mo_history/mo_history.csv b/inst/mo_history/mo_history.csv new file mode 100644 index 00000000..db967b2c --- /dev/null +++ b/inst/mo_history/mo_history.csv @@ -0,0 +1 @@ +"","x","mo","uncertainty_level","package_v" diff --git a/man/as.mo.Rd b/man/as.mo.Rd index f28bf0ae..62f40090 100644 --- a/man/as.mo.Rd +++ b/man/as.mo.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/mo.R +% Please edit documentation in R/mo.R, R/mo_history.R \name{as.mo} \alias{as.mo} \alias{mo} @@ -7,6 +7,7 @@ \alias{mo_failures} \alias{mo_uncertainties} \alias{mo_renamed} +\alias{clear_mo_history} \title{Transform to microorganism ID} \usage{ as.mo(x, Becker = FALSE, Lancefield = FALSE, allow_uncertain = TRUE, @@ -19,6 +20,8 @@ mo_failures() mo_uncertainties() mo_renamed() + +clear_mo_history(...) } \arguments{ \item{x}{a character vector or a \code{data.frame} with one or two columns} @@ -45,7 +48,7 @@ Use this function to determine a valid microorganism ID (\code{mo}). Determinati } \details{ \strong{General info} \cr -A microbial ID from this package (class: \code{mo}) typically looks like these examples:\cr +A microorganism ID from this package (class: \code{mo}) typically looks like these examples:\cr \preformatted{ Code Full name --------------- -------------------------------------- @@ -65,7 +68,13 @@ Values that cannot be coered will be considered 'unknown' and will get the MO co Use the \code{\link{mo_property}_*} functions to get properties based on the returned code, see Examples. -The algorithm uses data from the Catalogue of Life (see below) and from one other source (see \code{?microorganisms}). +The algorithm uses data from the Catalogue of Life (see below) and from one other source (see \code{\link{microorganisms}}). + +\strong{Self-learning algoritm} \cr +The \code{as.mo()} function gains experience from previously determined microorganism IDs and learns from it. This drastically improves both speed and reliability. Use \code{clear_mo_history()} to reset the algorithms. Only experience from your current \code{AMR} package version is used. This is done because in the future the taxonomic tree (which is included in this package) may change for any organism and it consequently has to rebuild its knowledge. + +Usually, any guess after the first try runs 80-95\% faster than the first try. + \strong{Intelligent rules} \cr This function uses intelligent rules to help getting fast and logical results. It tries to find matches in this order: @@ -105,7 +114,7 @@ Use \code{mo_failures()} to get a vector with all values that could not be coerc Use \code{mo_uncertainties()} to get a data.frame with all values that were coerced to a valid value, but with uncertainty. -Use \code{mo_renamed()} to get a vector with all values that could be coerced based on an old, previously accepted taxonomic name. +Use \code{mo_renamed()} to get a data.frame with all values that could be coerced based on an old, previously accepted taxonomic name. \strong{Microbial prevalence of pathogens in humans} \cr The intelligent rules take into account microbial prevalence of pathogens in humans. It uses three groups and all (sub)species are in only one group. These groups are: @@ -117,7 +126,7 @@ The intelligent rules take into account microbial prevalence of pathogens in hum Group 1 contains all common Gram positives and Gram negatives, like all Enterobacteriaceae and e.g. \emph{Pseudomonas} and \emph{Legionella}. -Group 2 probably contains less microbial pathogens; all other members of phyla that were found in humans in the Northern Netherlands between 2001 and 2018. +Group 2 contains probably less pathogenic microorganisms; all other members of phyla that were found in humans in the Northern Netherlands between 2001 and 2018. } \section{Source}{ diff --git a/man/like.Rd b/man/like.Rd index 88ec5ae4..4d4169ff 100755 --- a/man/like.Rd +++ b/man/like.Rd @@ -3,14 +3,17 @@ \name{like} \alias{like} \alias{\%like\%} +\alias{\%like_case\%} \title{Pattern Matching} \source{ Idea from the \href{https://github.com/Rdatatable/data.table/blob/master/R/like.R}{\code{like} function from the \code{data.table} package}, but made it case insensitive at default and let it support multiple patterns. Also, if the regex fails the first time, it tries again with \code{perl = TRUE}. } \usage{ -like(x, pattern) +like(x, pattern, ignore.case = TRUE) x \%like\% pattern + +x \%like_case\% pattern } \arguments{ \item{x}{a character vector where matches are sought, or an @@ -24,12 +27,15 @@ x \%like\% pattern character vector of length 2 or more is supplied, the first element is used with a warning. Missing values are allowed except for \code{regexpr} and \code{gregexpr}.} + +\item{ignore.case}{if \code{FALSE}, the pattern matching is \emph{case + sensitive} and if \code{TRUE}, case is ignored during matching.} } \value{ A \code{logical} vector } \description{ -Convenient wrapper around \code{\link[base]{grep}} to match a pattern: \code{a \%like\% b}. It always returns a \code{logical} vector and is always case-insensitive. Also, \code{pattern} (\code{b}) can be as long as \code{x} (\code{a}) to compare items of each index in both vectors. +Convenient wrapper around \code{\link[base]{grep}} to match a pattern: \code{a \%like\% b}. It always returns a \code{logical} vector and is always case-insensitive (use \code{a \%like_case\% b} for case-sensitive matching). Also, \code{pattern} (\code{b}) can be as long as \code{x} (\code{a}) to compare items of each index in both vectors, or can both have the same length to iterate over all cases. } \details{ Using RStudio? This function can also be inserted from the Addins menu and can have its own Keyboard Shortcut like Ctrl+Shift+L or Cmd+Shift+L (see Tools > Modify Keyboard Shortcuts...). diff --git a/tests/testthat/test-mo.R b/tests/testthat/test-mo.R index c3646ea1..9fbaa3a6 100644 --- a/tests/testthat/test-mo.R +++ b/tests/testthat/test-mo.R @@ -22,6 +22,8 @@ context("mo.R") test_that("as.mo works", { + + clear_mo_history(force = TRUE) library(dplyr) MOs <- AMR::microorganisms %>% filter(!is.na(mo), nchar(mo) > 3) diff --git a/vignettes/benchmarks.Rmd b/vignettes/benchmarks.Rmd index 8aaf8d10..a5928899 100755 --- a/vignettes/benchmarks.Rmd +++ b/vignettes/benchmarks.Rmd @@ -20,7 +20,7 @@ knitr::opts_chunk$set( comment = "#", fig.width = 7.5, fig.height = 4.5, - dpi = 150 + dpi = 75 ) ``` @@ -110,26 +110,40 @@ That takes `r round(mean(T.islandicus$time, na.rm = TRUE) / mean(S.aureus$time, In the figure below, we compare *Escherichia coli* (which is very common) with *Prevotella brevis* (which is moderately common) and with *Thermus islandicus* (which is uncommon): ```{r, echo = FALSE} -ggplot.bm( - microbenchmark(as.mo("Escherichia coli"), - as.mo("E. coli"), - times = 10), title = "Very common") +# ggplot.bm( +# microbenchmark(as.mo("Escherichia coli"), +# as.mo("E. coli"), +# times = 10), title = "Very common") +# +# ggplot.bm( +# microbenchmark(as.mo("Prevotella brevis"), +# as.mo("P. brevis"), +# times = 10), title = "Moderately common") +# +# ggplot.bm( +# microbenchmark(as.mo("Thermus islandicus"), +# as.mo("T. islandicus"), +# times = 10), title = "Uncommon") -ggplot.bm( - microbenchmark(as.mo("Prevotella brevis"), - as.mo("P. brevis"), - times = 10), title = "Moderately common") - -ggplot.bm( - microbenchmark(as.mo("Thermus islandicus"), - as.mo("T. islandicus"), - times = 10), title = "Uncommon") +par(mar = c(5, 16, 4, 2)) +boxplot(microbenchmark( + 'as.mo("Thermus islandicus")' = as.mo("Thermus islandicus"), + 'as.mo("Prevotella brevis")' = as.mo("Prevotella brevis"), + 'as.mo("Escherichia coli")' = as.mo("Escherichia coli"), + 'as.mo("T. islandicus")' = as.mo("T. islandicus"), + 'as.mo("P. brevis")' = as.mo("P. brevis"), + 'as.mo("E. coli")' = as.mo("E. coli"), + times = 10), + horizontal = TRUE, las = 1, unit = "s", log = FALSE, + xlab = "", ylab = "Time in seconds", ylim = c(0, 0.5), + main = "Benchmarks per prevalence") ``` -```{r, echo = FALSE, eval = FALSE} -# In reality, the `as.mo()` functions **learns from its own output to speed up determinations for next times**. In above figure, this effect was disabled to show the difference with the boxplot below - when you would use `as.mo()` yourself: +In reality, the `as.mo()` functions **learns from its own output to speed up determinations for next times**. In above figure, this effect was disabled to show the difference with the boxplot below - when you would use `as.mo()` yourself: -clean_mo_history() +```{r, echo = FALSE} + +clear_mo_history() par(mar = c(5, 16, 4, 2)) boxplot(microbenchmark( 'as.mo("Thermus islandicus")' = as.mo("Thermus islandicus", force_mo_history = TRUE), @@ -142,10 +156,10 @@ boxplot(microbenchmark( horizontal = TRUE, las = 1, unit = "s", log = FALSE, xlab = "", ylab = "Time in seconds", ylim = c(0, 0.5), main = "Benchmarks per prevalence") - -# The highest outliers are the first times. All next determinations were done in only thousands of seconds. For now, learning only works per session. If R is closed or terminated, the algorithms reset. This will probably be resolved in a next version. ``` +The highest outliers are the first times. All next determinations were done in only thousands of seconds. + Uncommon microorganisms take a lot more time than common microorganisms. To relieve this pitfall and further improve performance, two important calculations take almost no time at all: **repetitive results** and **already precalculated results**. ### Repetitive results