diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2db5a15f..5f44c02e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -11,7 +11,7 @@ R 3: # install dependencies for package - apt-get install --yes --no-install-recommends libxml2-dev libssl-dev libcurl4-openssl-dev zlib1g-dev - Rscript -e 'install.packages(c("devtools", "rlang"))' - - Rscript -e 'devtools::install_deps(dependencies = c("Depends", "Imports", "Suggests"), repos = "https://cran.rstudio.com")' + - Rscript -e 'devtools::install_dev_deps(repos = "https://cran.rstudio.com")' # remove vignettes folder and get VignetteBuilder field out of DESCRIPTION file - rm -rf vignettes - Rscript -e 'd <- read.dcf("DESCRIPTION"); d[, colnames(d) == "VignetteBuilder"] <- NA; write.dcf(d, "DESCRIPTION")' diff --git a/NEWS.md b/NEWS.md index 11a1eae4..1bca0175 100755 --- a/NEWS.md +++ b/NEWS.md @@ -12,6 +12,9 @@ * There will be looked for uncertain results at default - these results will be returned with an informative warning * Manual now contains more info about the algorithms * Progress bar will be shown when it takes more than 3 seconds to get results +* Function `first_isolate`: + * Will now use a column named like "patid" for the patient ID (parameter `col_patientid`), when this parameter was left blank + * Will now use a column named like "key(...)ab" or "key(...)antibiotics" for the key antibiotics (parameter `col_keyantibiotics`), when this parameter was left blank * Function `first_isolate` will now use a column named like "patid" for the patient ID, when this parameter was left blank * Reduce false positives for `is.rsi.eligible` * Summaries of class `mo` will now return the top 3 and the unique count, e.g. using `summary(mo)` diff --git a/R/first_isolate.R b/R/first_isolate.R index ea553c41..415b249c 100755 --- a/R/first_isolate.R +++ b/R/first_isolate.R @@ -21,12 +21,12 @@ #' Determine first (weighted) isolates of all microorganisms of every patient per episode and (if needed) per specimen type. #' @param tbl a \code{data.frame} containing isolates. #' @param col_date column name of the result date (or date that is was received on the lab), defaults to the first column of class \code{Date} -#' @param col_patient_id column name of the unique IDs of the patients, defaults to the first column that starts with 'patient' (case insensitive) +#' @param col_patient_id column name of the unique IDs of the patients, defaults to the first column that starts with 'patient' or 'patid' (case insensitive) #' @param col_mo column name of the unique IDs of the microorganisms (see \code{\link{mo}}), defaults to the first column of class \code{mo}. Values will be coerced using \code{\link{as.mo}}. #' @param col_testcode column name of the test codes. Use \code{col_testcode = NA} to \strong{not} exclude certain test codes (like test codes for screening). In that case \code{testcodes_exclude} will be ignored. Supports tidyverse-like quotation. #' @param col_specimen column name of the specimen type or group #' @param col_icu column name of the logicals (\code{TRUE}/\code{FALSE}) whether a ward or department is an Intensive Care Unit (ICU) -#' @param col_keyantibiotics column name of the key antibiotics to determine first \emph{weighted} isolates, see \code{\link{key_antibiotics}}. Supports tidyverse-like quotation. +#' @param col_keyantibiotics column name of the key antibiotics to determine first \emph{weighted} isolates, see \code{\link{key_antibiotics}}. Supports tidyverse-like quotation. Defaults to the first column that starts with 'key' followed by 'ab' or 'antibiotics' (case insensitive). Use \code{col_keyantibiotics = FALSE} to prevent this. #' @param episode_days episode in days after which a genus/species combination will be determined as 'first isolate' again #' @param testcodes_exclude character vector with test codes that should be excluded (case-insensitive) #' @param icu_exclude logical whether ICU isolates should be excluded @@ -158,20 +158,44 @@ first_isolate <- function(tbl, col_mo <- colnames(tbl)[lapply(tbl, class) == "mo"][1] message("NOTE: Using column `", col_mo, "` as input for `col_mo`.") } + # -- date - if (is.null(col_date) & "Date" %in% lapply(tbl, class)) { - col_date <- colnames(tbl)[lapply(tbl, class) == "Date"][1] - message("NOTE: Using column `", col_date, "` as input for `col_date`.") + if (is.null(col_date)) { + for (i in 1:ncol(tbl)) { + if ("Date" %in% class(tbl %>% pull(i)) | "POSIXct" %in% class(tbl %>% pull(i))) { + col_date <- colnames(tbl)[i] + message("NOTE: Using column `", col_date, "` as input for `col_date`.") + break + } + } } + if (is.null(col_date)) { + stop("`col_date` must be set.", call. = FALSE) + } + # convert to Date + tbl[, col_date] <- as.Date(tbl[, col_date]) + # -- patient id if (is.null(col_patient_id) & any(colnames(tbl) %like% "^(patient|patid)")) { col_patient_id <- colnames(tbl)[colnames(tbl) %like% "^(patient|patid)"][1] message("NOTE: Using column `", col_patient_id, "` as input for `col_patient_id`.") } + if (is.null(col_patient_id)) { + stop("`col_patient_id` must be set.", call. = FALSE) + } - # bactid OR genus+species must be available + # -- key antibiotics + if (is.null(col_keyantibiotics) & any(colnames(tbl) %like% "^key.*(ab|antibiotics)")) { + col_keyantibiotics <- colnames(tbl)[colnames(tbl) %like% "^key.*(ab|antibiotics)"][1] + message("NOTE: Using column `", col_keyantibiotics, "` as input for `col_keyantibiotics`.") + } + if (isFALSE(col_keyantibiotics)) { + col_keyantibiotics <- NULL + } + + # col_mo OR col_genus+col_species must be available if (is.null(col_mo) & (is.null(col_genus) | is.null(col_species))) { - stop('`col_mo` or both `col_genus` and `col_species` must be available.') + stop("`col_mo` or both `col_genus` and `col_species` must be set.", call. = FALSE) } diff --git a/man/first_isolate.Rd b/man/first_isolate.Rd index 05c357c4..afc0e370 100755 --- a/man/first_isolate.Rd +++ b/man/first_isolate.Rd @@ -21,7 +21,7 @@ first_isolate(tbl, col_date = NULL, col_patient_id = NULL, \item{col_date}{column name of the result date (or date that is was received on the lab), defaults to the first column of class \code{Date}} -\item{col_patient_id}{column name of the unique IDs of the patients, defaults to the first column that starts with 'patient' (case insensitive)} +\item{col_patient_id}{column name of the unique IDs of the patients, defaults to the first column that starts with 'patient' or 'patid' (case insensitive)} \item{col_mo}{column name of the unique IDs of the microorganisms (see \code{\link{mo}}), defaults to the first column of class \code{mo}. Values will be coerced using \code{\link{as.mo}}.} @@ -31,7 +31,7 @@ first_isolate(tbl, col_date = NULL, col_patient_id = NULL, \item{col_icu}{column name of the logicals (\code{TRUE}/\code{FALSE}) whether a ward or department is an Intensive Care Unit (ICU)} -\item{col_keyantibiotics}{column name of the key antibiotics to determine first \emph{weighted} isolates, see \code{\link{key_antibiotics}}. Supports tidyverse-like quotation.} +\item{col_keyantibiotics}{column name of the key antibiotics to determine first \emph{weighted} isolates, see \code{\link{key_antibiotics}}. Supports tidyverse-like quotation. Defaults to the first column that starts with 'key' followed by 'ab' or 'antibiotics' (case insensitive). Use \code{col_keyantibiotics = FALSE} to prevent this.} \item{episode_days}{episode in days after which a genus/species combination will be determined as 'first isolate' again}