mirror of
				https://github.com/msberends/AMR.git
				synced 2025-10-30 21:58:14 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			175 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			R
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			175 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			R
		
	
	
		
			Executable File
		
	
	
	
	
| # ==================================================================== #
 | |
| # TITLE                                                                #
 | |
| # Antimicrobial Resistance (AMR) Analysis                              #
 | |
| #                                                                      #
 | |
| # SOURCE                                                               #
 | |
| # https://gitlab.com/msberends/AMR                                     #
 | |
| #                                                                      #
 | |
| # LICENCE                                                              #
 | |
| # (c) 2018-2020 Berends MS, Luz CF et al.                              #
 | |
| #                                                                      #
 | |
| # This R package is free software; you can freely use and distribute   #
 | |
| # it for both personal and commercial purposes under the terms of the  #
 | |
| # GNU General Public License version 2.0 (GNU GPL-2), as published by  #
 | |
| # the Free Software Foundation.                                        #
 | |
| #                                                                      #
 | |
| # We created this package for both routine data analysis and academic  #
 | |
| # research and it was publicly released in the hope that it will be    #
 | |
| # useful, but it comes WITHOUT ANY WARRANTY OR LIABILITY.              #
 | |
| # Visit our website for more info: https://msberends.gitlab.io/AMR.    #
 | |
| # ==================================================================== #
 | |
| 
 | |
| # No export, no Rd
 | |
| addin_insert_in <- function() {
 | |
|   rstudioapi::insertText(" %in% ")
 | |
| }
 | |
| 
 | |
| # No export, no Rd
 | |
| addin_insert_like <- function() {
 | |
|   rstudioapi::insertText(" %like% ")
 | |
| }
 | |
| 
 | |
| load_AMR_package <- function() {
 | |
|   if (!"package:AMR" %in% base::search()) {
 | |
|     require(AMR)
 | |
|     # check onLoad() in R/zzz.R: data tables are created there.
 | |
|   }
 | |
|   base::invisible()
 | |
| }
 | |
| 
 | |
| #' @importFrom crayon blue bold red
 | |
| #' @importFrom dplyr %>% pull
 | |
| search_type_in_df <- function(x, type) {
 | |
|   # try to find columns based on type
 | |
|   found <- NULL
 | |
| 
 | |
|   colnames(x) <- trimws(colnames(x))
 | |
|   
 | |
|   # -- mo
 | |
|   if (type == "mo") {
 | |
|     if ("mo" %in% lapply(x, class)) {
 | |
|       found <- colnames(x)[lapply(x, class) == "mo"][1]
 | |
|     } else if ("mo" %in% colnames(x) &
 | |
|                suppressWarnings(
 | |
|                  all(x$mo %in% c(NA,
 | |
|                                  microorganisms$mo,
 | |
|                                  microorganisms.translation$mo_old)))) {
 | |
|       found <- "mo"
 | |
|     } else if (any(colnames(x) %like% "^(mo|microorganism|organism|bacteria|bacterie)s?$")) {
 | |
|       found <- colnames(x)[colnames(x) %like% "^(mo|microorganism|organism|bacteria|bacterie)s?$"][1]
 | |
|     } else if (any(colnames(x) %like% "^(microorganism|organism|bacteria|bacterie)")) {
 | |
|       found <- colnames(x)[colnames(x) %like% "^(microorganism|organism|bacteria|bacterie)"][1]
 | |
|     } else if (any(colnames(x) %like% "species")) {
 | |
|       found <- colnames(x)[colnames(x) %like% "species"][1]
 | |
|     }
 | |
|     
 | |
|   }
 | |
|   # -- key antibiotics
 | |
|   if (type == "keyantibiotics") {
 | |
|     if (any(colnames(x) %like% "^key.*(ab|antibiotics)")) {
 | |
|       found <- colnames(x)[colnames(x) %like% "^key.*(ab|antibiotics)"][1]
 | |
|     }
 | |
|   }
 | |
|   # -- date
 | |
|   if (type == "date") {
 | |
|     if (any(colnames(x) %like% "^(specimen date|specimen_date|spec_date)")) {
 | |
|       # WHONET support
 | |
|       found <- colnames(x)[colnames(x) %like% "^(specimen date|specimen_date|spec_date)"][1]
 | |
|       if (!any(class(x %>% pull(found)) %in% c("Date", "POSIXct"))) {
 | |
|         stop(red(paste0("ERROR: Found column `", bold(found), "` to be used as input for `col_", type,
 | |
|                         "`, but this column contains no valid dates. Transform its values to valid dates first.")),
 | |
|              call. = FALSE)
 | |
|       }
 | |
|     } else {
 | |
|       for (i in seq_len(ncol(x))) {
 | |
|         if (any(class(x %>% pull(i)) %in% c("Date", "POSIXct"))) {
 | |
|           found <- colnames(x)[i]
 | |
|           break
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|   }
 | |
|   # -- patient id
 | |
|   if (type == "patient_id") {
 | |
|     if (any(colnames(x) %like% "^(identification |patient|patid)")) {
 | |
|       found <- colnames(x)[colnames(x) %like% "^(identification |patient|patid)"][1]
 | |
|     }
 | |
|   }
 | |
|   # -- specimen
 | |
|   if (type == "specimen") {
 | |
|     if (any(colnames(x) %like% "(specimen type|spec_type)")) {
 | |
|       found <- colnames(x)[colnames(x) %like% "(specimen type|spec_type)"][1]
 | |
|     } else if (any(colnames(x) %like% "^(specimen)")) {
 | |
|       found <- colnames(x)[colnames(x) %like% "^(specimen)"][1]
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   if (!is.null(found)) {
 | |
|     msg <- paste0("NOTE: Using column `", bold(found), "` as input for `col_", type, "`.")
 | |
|     if (type %in% c("keyantibiotics", "specimen")) {
 | |
|       msg <- paste(msg, "Use", bold(paste0("col_", type), "= FALSE"), "to prevent this.")
 | |
|     }
 | |
|     message(blue(msg))
 | |
|   }
 | |
|   found
 | |
| }
 | |
| 
 | |
| stopifnot_installed_package <- function(package) {
 | |
|   # no "utils::installed.packages()" since it requires non-staged install since R 3.6.0
 | |
|   # https://developer.r-project.org/Blog/public/2019/02/14/staged-install/index.html
 | |
|   tryCatch(get(".packageName", envir = asNamespace(package)),
 | |
|            error = function(e) stop("package '", package, "' required but not installed",
 | |
|                                     ' - try to install it with: install.packages("', package, '")',
 | |
|                                     call. = FALSE))
 | |
|   return(invisible())
 | |
| }
 | |
| 
 | |
| "%or%" <- function(x, y) {
 | |
|   if (is.null(x) | is.null(y)) {
 | |
|     if (is.null(x)) {
 | |
|       return(y)
 | |
|     } else {
 | |
|       return(x)
 | |
|     }
 | |
|   }
 | |
|   ifelse(!is.na(x),
 | |
|          x,
 | |
|          ifelse(!is.na(y), y, NA))
 | |
| }
 | |
| 
 | |
| class_integrity_check <- function(value, type, check_vector) {
 | |
|   if (!all(value[!is.na(value)] %in% check_vector)) {
 | |
|     warning(paste0("invalid ", type, ", NA generated"), call. = FALSE)
 | |
|     value[!value %in% check_vector] <- NA
 | |
|   }
 | |
|   value
 | |
| }
 | |
| 
 | |
| # transforms data set to data.frame with only ASCII values, to comply with CRAN policies
 | |
| dataset_UTF8_to_ASCII <- function(df) {
 | |
|   trans <- function(vect) {
 | |
|     iconv(vect, from = "UTF-8", to = "ASCII//TRANSLIT")
 | |
|   }
 | |
|   df <- as.data.frame(df, stringsAsFactors = FALSE)
 | |
|   for (i in seq_len(NCOL(df))) {
 | |
|     col <- df[, i]
 | |
|     if (is.list(col)) {
 | |
|       col <- lapply(col, function(j) trans(j))
 | |
|       # for (j in seq_len(length(col))) {
 | |
|       #   col[[j]] <- trans(col[[j]])
 | |
|       # }
 | |
|       df[, i] <- list(col)
 | |
|     } else {
 | |
|       if (is.factor(col)) {
 | |
|         levels(col) <- trans(levels(col))
 | |
|       } else if (is.character(col)) {
 | |
|         col <- trans(col)
 | |
|       } else {
 | |
|         col
 | |
|       }
 | |
|       df[, i] <- col
 | |
|     }
 | |
|   }
 | |
|   df
 | |
| }
 |