From 31e977937d2facb66789b6ab80a379ca5a1960fb Mon Sep 17 00:00:00 2001 From: "Matthijs S. Berends" Date: Fri, 30 Nov 2018 12:05:59 +0100 Subject: [PATCH] fix for as.mo and freq --- .gitlab-ci.yml | 9 ++++--- DESCRIPTION | 4 +-- R/freq.R | 2 +- R/mo.R | 40 ++++++++++++++++------------- data/microorganisms.certe.rda | Bin 13828 -> 14238 bytes tests/testthat/test-eucast_rules.R | 4 +++ tests/testthat/test-mo.R | 8 ++++++ 7 files changed, 43 insertions(+), 24 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6fa50eae..154aa80c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -13,11 +13,14 @@ R 3: - apt-get update # install dependencies for package - apt-get install --yes --no-install-recommends libxml2-dev libssl-dev libcurl4-openssl-dev zlib1g-dev - - R -e 'install.packages(c("devtools", "rlang"))' - - R -e 'devtools::install_deps(dependencies = c("Depends", "Imports", "Suggests"), repos = "https://cran.rstudio.com")' + - Rscript -e 'install.packages(c("devtools", "rlang"))' + - Rscript -e 'devtools::install_deps(dependencies = c("Depends", "Imports", "Suggests"), repos = "https://cran.rstudio.com")' # remove vignettes folder and get VignetteBuilder field out of DESCRIPTION file - rm -rf vignettes - - R -e 'd <- read.dcf("DESCRIPTION"); d[, colnames(d) == "VignetteBuilder"] <- NA; write.dcf(d, "DESCRIPTION")' + - Rscript -e 'd <- read.dcf("DESCRIPTION"); d[, colnames(d) == "VignetteBuilder"] <- NA; write.dcf(d, "DESCRIPTION")' + # set environmental variable + - Rscript -e 'Sys.setenv(NOT_CRAN = "true")' + # build package - R CMD build . --no-build-vignettes --no-manual - PKG_FILE_NAME=$(ls -1t *.tar.gz | head -n 1) - R CMD check "${PKG_FILE_NAME}" --no-build-vignettes --no-manual --as-cran diff --git a/DESCRIPTION b/DESCRIPTION index e011adeb..201a1a5b 100755 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: AMR -Version: 0.4.0.9013 -Date: 2018-11-24 +Version: 0.4.0.9014 +Date: 2018-11-30 Title: Antimicrobial Resistance Analysis Authors@R: c( person( diff --git a/R/freq.R b/R/freq.R index 31de3aa9..c7a5fa88 100755 --- a/R/freq.R +++ b/R/freq.R @@ -337,7 +337,7 @@ frequency_tbl <- function(x, header_txt <- header_txt %>% paste0(markdown_line, '\nLongest: ', x %>% base::nchar() %>% base::max(na.rm = TRUE)) } - if (NROW(x) > 0 & any(class(x) == "difftime")) { + if (NROW(x) > 0 & any(class(x) == "difftime") & !is.hms(x)) { header_txt <- header_txt %>% paste0('\n') header_txt <- header_txt %>% paste(markdown_line, '\nUnits: ', attributes(x)$units) x <- as.double(x) diff --git a/R/mo.R b/R/mo.R index 8aadaab6..b55c0478 100644 --- a/R/mo.R +++ b/R/mo.R @@ -192,7 +192,7 @@ exec_as.mo <- function(x, Becker = FALSE, Lancefield = FALSE, allow_uncertain = x_input <- x # only check the uniques, which is way faster x <- unique(x) - # remove empty values (to later fill them in again) + # remove empty values (to later fill them in again with NAs) x <- x[!is.na(x) & !is.null(x) & !identical(x, "")] # defined df to check for @@ -270,27 +270,24 @@ exec_as.mo <- function(x, Becker = FALSE, Lancefield = FALSE, allow_uncertain = # check if search term was like "A. species", then return first genus found with ^A if (x_backup[i] %like% "species" | x_backup[i] %like% "spp[.]?") { # get mo code of first hit - found <- microorganismsDT[fullname %like% x_withspaces_start[i], mo][[1]] - 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." + found <- microorganismsDT[fullname %like% x_withspaces_start[i], mo] if (length(found) > 0) { - x[i] <- found[1L] - next - } else { - # fewer than 3 chars, add as failure - x[i] <- NA_character_ - failures <- c(failures, x_backup[i]) - next + 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] + next + } } - } else { - # fewer than 3 chars, add as failure - x[i] <- NA_character_ - failures <- c(failures, x_backup[i]) - next } + # fewer than 3 chars and not looked for species, add as failure + x[i] <- NA_character_ + failures <- c(failures, x_backup[i]) + next } + # translate known trivial abbreviations to genus + species ---- if (!is.na(x_trimmed[i])) { if (toupper(x_trimmed[i]) == 'MRSA' @@ -377,9 +374,16 @@ exec_as.mo <- function(x, Becker = FALSE, Lancefield = FALSE, allow_uncertain = } # TRY OTHER SOURCES ---- + if (toupper(x_backup[i]) %in% microorganisms.certe[, 1]) { + mo_found <- microorganisms.certe[toupper(x_backup[i]) == microorganisms.certe[, 1], 2][1L] + if (length(mo_found) > 0) { + x[i] <- microorganismsDT[mo == mo_found, ..property][[1]][1L] + next + } + } if (x_backup[i] %in% microorganisms.umcg[, 1]) { mo_umcg <- microorganisms.umcg[microorganisms.umcg[, 1] == x_backup[i], 2] - mo_found <- microorganisms.certe[microorganisms.certe[, 1] == mo_umcg, 2] + mo_found <- microorganisms.certe[microorganisms.certe[, 1] == mo_umcg, 2][1L] if (length(mo_found) == 0) { # not found x[i] <- NA_character_ diff --git a/data/microorganisms.certe.rda b/data/microorganisms.certe.rda index 33bc19997d77e828b59cc9c63af330f165292e69..5791cc07a4c637cd9210d7dec73ac4c2c22c3622 100644 GIT binary patch literal 14238 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 AmH+?% literal 13828 zcmV+fHv7p!T4*^jL0KkKS#Xofh5&yT|KR`r%m4rjf8am=|M0J;oPa<80DuAk;6na9 zo001X0HmORkojp!)`W^yR<^G4Vm-djLPcqP+V$=0FSo~gUfTw}14F)VzU$W5`n6(* z%;U}JH(l}9cd+fNZ+7d`t@j@L@0-2e_iwKA<=Cvf29*u!kN^M%L7)HtM3YIWrlyT4vP2E3qfCu54KjL6 znrWbD_DTs5fdptERX-?D000>VfB+5ss(`ljm*3L%>jhCahybYl`cvkB5&$0zRX%7k z2>kF7`Cy+Meu$05eqY%}V(KUDiToqCh;9XQ_zZn{t*~<{ycxr zZ<@9)>Lb>k{G@=|ZVx%_>(eiz|HPwdC! z|CMs5`8w67F=)wYx#`rvJ~o>EXegG~Rh#h_K@iQ&_DhuB`PDyNR?!fAGOO+Q-eL5E zi%HlZgJnS{`Z`2J0nQY%vF%e3LVBP>xuM+4G|G&ajCVf2t^-?+iHVFksqy=$OhLfg z@QVq9bb|&R@}fc*&fn3vL>yv@G3h#zV8)hA!?WbdutB&1Ip6R27!AE|)${9_BU|)*EtW~s^~{&2^+8q6=p9*)%HD%2 z6_;bzdgkEXe5|+}JNErAW6m>nxsU7DuR5k(k6gZ(7p_xN2k=c zE^U19#=UZzYw459Kz!@lDULYf#vMCZoMo6A3DB9yKGR{Nv)Ub(>X3GB&AMjmZu8!+ zQ>0s`Q16{pUU4h#8@g8IF#8jpla$3$ubE<2cuIIkL;C*n#(CoN{_8b+@0ZQFP0Jk` zXf8zIUU9n7Tw2$()=zm-JA7ljQRuWYYMebMwH(lbv$u(syj9K z^Ut5``1^x#FKg?fd)Mj=LoBJp%jX6GKE=dh!>t5;au^Q)~<*|f

7l%fpoGtWZT|Q=;E;qoatVYx8cfdgiZFRMnwI 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 Gd2qlv% mutate(norf = "S", nali = "S")))) + + # check verbose output expect_output(suppressWarnings(eucast_rules(septic_patients, verbose = TRUE))) }) diff --git a/tests/testthat/test-mo.R b/tests/testthat/test-mo.R index 5d37764f..f260d704 100644 --- a/tests/testthat/test-mo.R +++ b/tests/testthat/test-mo.R @@ -77,6 +77,9 @@ test_that("as.mo works", { # too few characters expect_warning(as.mo("ab")) + expect_equal(suppressWarnings(as.character(as.mo(c("Qq species", "", "CRS", "K. pneu rhino", "esco")))), + c(NA_character_, NA_character_, "B_STNTR_MAL", "B_KLBSL_PNE_RHI", "B_ESCHR_COL")) + # check for Becker classification expect_identical(as.character(guess_mo("S. epidermidis", Becker = FALSE)), "B_STPHY_EPI") expect_identical(as.character(guess_mo("S. epidermidis", Becker = TRUE)), "B_STPHY_CNS") @@ -202,4 +205,9 @@ test_that("as.mo works", { "E. species")), rep("Escherichia species", 3)) + # from different sources + expect_equal(as.character(as.mo( + c("PRTMIR", "bclcer", "B_ESCHR_COL"))), + c("B_PROTS_MIR", "B_BCLLS_CER", "B_ESCHR_COL")) + })