From e5d32cafe04bf136e5570dbb0da929fec179010f Mon Sep 17 00:00:00 2001 From: "Matthijs S. Berends" Date: Sun, 12 Aug 2018 17:44:06 +0200 Subject: [PATCH] new unit tests for ggplot, small fixes --- DESCRIPTION | 8 ++-- R/classes.R | 11 +++-- R/ggplot_rsi.R | 11 +++-- R/n_rsi.R | 2 +- R/portion.R | 52 +++++++++++------------ README.md | 68 +++++++++++++++++++------------ man/figures/rsi_example.png | Bin 12592 -> 0 bytes man/figures/rsi_example1.png | Bin 0 -> 9651 bytes man/figures/rsi_example2.png | Bin 0 -> 7874 bytes man/figures/rsi_example3.png | Bin 0 -> 7160 bytes man/ggplot_rsi.Rd | 6 +-- tests/testthat/test-ggplot_rsi.R | 35 ++++++++++++++++ tests/testthat/test-portion.R | 17 +++++++- 13 files changed, 144 insertions(+), 66 deletions(-) delete mode 100755 man/figures/rsi_example.png create mode 100644 man/figures/rsi_example1.png create mode 100644 man/figures/rsi_example2.png create mode 100644 man/figures/rsi_example3.png create mode 100644 tests/testthat/test-ggplot_rsi.R diff --git a/DESCRIPTION b/DESCRIPTION index d6d8fd22..9dbc4f8b 100755 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: AMR Version: 0.2.0.9023 -Date: 2018-08-11 +Date: 2018-08-12 Title: Antimicrobial Resistance Analysis Authors@R: c( person( @@ -57,14 +57,14 @@ Imports: Rcpp (>= 0.12.14), readr, rvest (>= 0.3.2), - tibble, - ggplot2 + tibble Suggests: testthat (>= 1.0.2), covr (>= 3.0.1), rmarkdown, rstudioapi, - tidyr + tidyr, + ggplot2 VignetteBuilder: knitr URL: https://github.com/msberends/AMR BugReports: https://github.com/msberends/AMR/issues diff --git a/R/classes.R b/R/classes.R index 4e2f7dba..0962e240 100755 --- a/R/classes.R +++ b/R/classes.R @@ -102,9 +102,14 @@ print.rsi <- function(x, ...) { #' @noRd summary.rsi <- function(object, ...) { x <- object - lst <- c('rsi', sum(is.na(x)), sum(x == "S"), sum(x %in% c("I", "R")), sum(x == "R"), sum(x == "I")) - names(lst) <- c("Mode", "", "Sum S", "Sum IR", "-Sum R", "-Sum I") - lst + c( + "Mode" = 'rsi', + "" = sum(is.na(x)), + "Sum S" = sum(x == "S", na.rm = TRUE), + "Sum IR" = sum(x %in% c("I", "R"), na.rm = TRUE), + "-Sum R" = sum(x == "R", na.rm = TRUE), + "-Sum I" = sum(x == "I", na.rm = TRUE) + ) } #' @exportMethod plot.rsi diff --git a/R/ggplot_rsi.R b/R/ggplot_rsi.R index d18d4bfd..00cf1e4d 100644 --- a/R/ggplot_rsi.R +++ b/R/ggplot_rsi.R @@ -18,7 +18,7 @@ #' AMR bar plots with \code{ggplot} #' -#' Use these functions to create bar plots for antimicrobial resistance analysis. All functions rely on internal \code{\link{ggplot}} functions. +#' Use these functions to create bar plots for antimicrobial resistance analysis. All functions rely on internal \code{\link[ggplot2]{ggplot}} functions. #' @param data a \code{data.frame} with column(s) of class \code{"rsi"} (see \code{\link{as.rsi}}) #' @param position position adjustment of bars, either \code{"stack"} (default) or \code{"dodge"} #' @param x parameter to show on x axis, either \code{"Antibiotic"} (default) or \code{"Interpretation"} @@ -28,13 +28,13 @@ #' \strong{The functions}\cr #' \code{geom_rsi} will take any variable from the data that has an \code{rsi} class (created with \code{\link{as.rsi}}) using \code{\link{portion_df}} and will plot bars with the percentage R, I and S. The default behaviour is to have the bars stacked and to have the different antibiotics on the x axis. #' -#' \code{facet_rsi} creates 2d plots (at default based on S/I/R) using \code{\link{facet_wrap}}. +#' \code{facet_rsi} creates 2d plots (at default based on S/I/R) using \code{\link[ggplot2]{facet_wrap}}. #' #' \code{scale_y_percent} transforms the y axis to a 0 to 100% range. #' #' \code{scale_rsi_colours} sets colours to the bars: green for S, yellow for I and red for R. #' -#' \code{theme_rsi} is a \code{\link{theme}} with minimal distraction. +#' \code{theme_rsi} is a \code{\link[ggplot2]{theme}} with minimal distraction. #' #' \code{ggplot_rsi} is a wrapper around all above functions that uses data as first input. This makes it possible to use this function after a pipe (\code{\%>\%}). See Examples. #' @rdname ggplot_rsi @@ -67,6 +67,11 @@ ggplot_rsi <- function(data, x = "Antibiotic", facet = NULL) { + + if (!"ggplot2" %in% rownames(installed.packages())) { + stop('this function requires the ggplot2 package.', call. = FALSE) + } + p <- ggplot2::ggplot(data = data) + geom_rsi(x = x) + scale_y_percent() + diff --git a/R/n_rsi.R b/R/n_rsi.R index 72273e34..cac652cd 100644 --- a/R/n_rsi.R +++ b/R/n_rsi.R @@ -35,7 +35,7 @@ #' combination_n = n_rsi(cipr, gent)) n_rsi <- function(ab1, ab2 = NULL) { if (NCOL(ab1) > 1) { - stop('`ab` must be a vector of antimicrobial interpretations', call. = FALSE) + stop('`ab1` must be a vector of antimicrobial interpretations', call. = FALSE) } if (!is.rsi(ab1)) { ab1 <- as.rsi(ab1) diff --git a/R/portion.R b/R/portion.R index a7e874f4..71ed9d9c 100755 --- a/R/portion.R +++ b/R/portion.R @@ -176,6 +176,32 @@ portion_S <- function(ab1, as_percent = as_percent) } +#' @rdname portion +#' @importFrom dplyr bind_cols summarise_if mutate +#' @export +portion_df <- function(data, translate = getOption("get_antibiotic_names", TRUE)) { + resS <- bind_cols(data.frame(Interpretation = "S", stringsAsFactors = FALSE), + summarise_if(.tbl = data, + .predicate = is.rsi, + .funs = portion_S)) + resI <- bind_cols(data.frame(Interpretation = "I", stringsAsFactors = FALSE), + summarise_if(.tbl = data, + .predicate = is.rsi, + .funs = portion_I)) + resR <- bind_cols(data.frame(Interpretation = "R", stringsAsFactors = FALSE), + summarise_if(.tbl = data, + .predicate = is.rsi, + .funs = portion_R)) + + res <- bind_rows(resS, resI, resR) %>% + mutate(Interpretation = factor(Interpretation, levels = c("R", "I", "S"), ordered = TRUE)) %>% + tidyr::gather(Antibiotic, Percentage, -Interpretation) + if (translate == TRUE) { + res <- res %>% mutate(Antibiotic = abname(Antibiotic, from = "guess", to = "official")) + } + res +} + rsi_calc <- function(type, ab1, ab2, @@ -244,29 +270,3 @@ rsi_calc <- function(type, found / total } } - -#' @rdname portion -#' @importFrom dplyr bind_cols summarise_if mutate -#' @export -portion_df <- function(data, translate = getOption("get_antibiotic_names", TRUE)) { - resS <- bind_cols(data.frame(Interpretation = "S", stringsAsFactors = FALSE), - summarise_if(.tbl = data, - .predicate = is.rsi, - .funs = portion_S)) - resI <- bind_cols(data.frame(Interpretation = "I", stringsAsFactors = FALSE), - summarise_if(.tbl = data, - .predicate = is.rsi, - .funs = portion_I)) - resR <- bind_cols(data.frame(Interpretation = "R", stringsAsFactors = FALSE), - summarise_if(.tbl = data, - .predicate = is.rsi, - .funs = portion_R)) - - res <- bind_rows(resS, resI, resR) %>% - mutate(Interpretation = factor(Interpretation, levels = c("R", "I", "S"), ordered = TRUE)) %>% - tidyr::gather(Antibiotic, Percentage, -Interpretation) - if (translate == TRUE) { - res <- res %>% mutate(Antibiotic = abname(Antibiotic, from = "guess", to = "official")) - } - res -} diff --git a/README.md b/README.md index a8a55fa6..3bbdcace 100755 --- a/README.md +++ b/README.md @@ -136,43 +136,61 @@ guess_bactid("VRSA") # Vancomycin Resistant S. aureus This package contains two new S3 classes: `mic` for MIC values (e.g. from Vitek or Phoenix) and `rsi` for antimicrobial drug interpretations (i.e. S, I and R). Both are actually ordered factors under the hood (an MIC of `2` being higher than `<=1` but lower than `>=32`, and for class `rsi` factors are ordered as `S < I < R`). Both classes have extensions for existing generic functions like `print`, `summary` and `plot`. -```r -# Transform values to new classes -mic_data <- as.mic(c(">=32", "1.0", "8", "<=0.128", "8", "16", "16")) -rsi_data <- as.rsi(c(rep("S", 474), rep("I", 36), rep("R", 370))) -``` These functions also try to coerce valid values. -Quick overviews with `summary`: +#### RSI +The `septic_patients` data set comes with antimicrobial results of more than 40 different drugs. For example, columns `amox` and `cipr` contain results of amoxicillin and ciprofloxacin, respectively. ```r -summary(rsi_data) -# Mode :rsi -# :0 -# Sum S :474 -# Sum IR:406 -# -Sum R:370 -# -Sum I:36 +summary(septic_patients[, c("amox", "cipr")]) +# amox cipr +# Mode :rsi Mode :rsi +# :1002 :596 +# Sum S :336 Sum S :1108 +# Sum IR:662 Sum IR:296 +# -Sum R:659 -Sum R:227 +# -Sum I:3 -Sum I:69 +``` + +You can use the `plot` function from base R: +```r +plot(septic_patients$cipr) +``` + +![example_1_rsi](man/figures/rsi_example1.png) + +Or use the `ggplot2` and `dplyr` packages to create more appealing plots: +```r +septic_patients %>% + select(amox, cipr) %>% + ggplot_rsi() +``` + +![example_2_rsi](man/figures/rsi_example2.png) + +```r +septic_patients %>% + select(amox, cipr) %>% + ggplot_rsi(x = "Interpretation", facet = "Antibiotic") +``` + +![example_3_rsi](man/figures/rsi_example3.png) + + +#### MIC + +```r +# Transform values to new class +mic_data <- as.mic(c(">=32", "1.0", "8", "<=0.128", "8", "16", "16")) summary(mic_data) # Mode:mic # :0 # Min.:<=0.128 # Max.:>=32 -``` -A plot of `rsi_data`: -```r -plot(rsi_data) -``` - -![example1](man/figures/rsi_example.png) - -A plot of `mic_data` (defaults to bar plot): -```r plot(mic_data) ``` - -![example2](man/figures/mic_example.png) +![example_mic](man/figures/mic_example.png) Other epidemiological functions: diff --git a/man/figures/rsi_example.png b/man/figures/rsi_example.png deleted file mode 100755 index b1500c2e49e268c468e2e9795e8b3faf8f0df404..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12592 zcmd6NcT`hpyYI$^ih_=Sh!h>ANEMOZ#DYqdF1;y84WWk?97P;jMrlHTr~x8Giu4kK zLlrPY2oNBUD4|y&kN~0F&CGoFyZ5a7$64#Fbe&F;{ZE7S=qY`Sh35VQRcRvGAo+mv4lbUvkw!O?R2UynpXzsyxfiSUeK|Vg$EK zH_ifpV@}yI;D+yWBLMKa~OZ1SvBeEF;M4ht619(4@vGRsqip=);+A&AS2sgJfK`u zqfv$9DfRKUS%}CA8QvpT&ki|J?C^u)vs#4crraL(eP)9dE3=d}#9|9S#7ub$dx`rr z+s@wlaBg~xBEX$sQ|EF5(g3AuCXDEC($FgxeL5&*v9fzO#H+B#RB(&5gT_aWs{%i!Nsd1)SgsOU)Q+xyxv-==;|BvLj7Bm%0xc2ttE( ze($`DTq-U1Abw&i7qNaQopinE?e3=&G!mJ_TApl&i^ktAo=GZT2f{5`R2;(13A5`h zJSXAPEQszHcG|EC+CtC9nP%zj%v8mT%BF=CmtH&HI{DG|XL#YYFrwGiinHftg+;S% z)z3=(0BFOrG_U5^s2&4T{rT*CSle%zl?$8ZM;nqD!{M+iKYenPEMFN=9JSiViWIS| ziyGC#^_Fdfe5sWjeKcoNg{;JI1nmlSfkI1jl4&PbxTz=1uk@)AduV->obx;-6@jKQ z=7t{L={eFlD6M2@&Aj(c9gVg1@tPKO71miYJm2Q6&{#^qKtfw)lrg1MOW88ntXPIx zle<&+0^7#xz#mlNNeRykZ|9w5NXb{y3ZZ+w-xt8TkozEmJyJSsG%afNaWE7EI-6bOI z?Wz!s_Oa5^ITnOAU(wa>o9c+&igHj774xoX2q-BkSnR-~`jiKa^U0$tf)7KBrzyjm z>c6#|QFcjc*Xd&;i3Edg2ON%tabp5f!}Q(mlH6n}S1;+#c1w2f2-qMi0G5pw6i~Rm9zw z@`6-77VaFO0>&u|Z8x4IW*fUO)ww9X=h7Tt;oz~$QX*&m738&qZlK6{-9#%r;}mlo5g*4pU_&PsCL1; z=zg^i8L`B1k4?^DIW1#-4u3hWioJEW!M%z5%-^9DErdID<=q?WkS)(Z#BeWt{F{RO zw~gxw1}$Mid^{-huRi@QBF8<1Yo;2z?9MtVqiP;S3hQ_XUwbjOpe6ZRcm+GiI4%_K zc*@GmBh@{~V=TcgXCZuUnr!)4ys(U|pv~9{U+r7JyVBoLGM*Jx<&Et#U`2`M(?>hI zOP`X5kKlw|&J;a*=QfB9qDJ6OC+TUFl$8He%e)O|T1OelPv$(LG~Cw>;dec&Efm+g zW7Dg_{INV$M%v!yeW9^~D>Q5i5^YG7G#81Vy3-=eEn0z?PC8CdcH z*1>Kbw>A`7y{T%AYghUyNQqIo>~k~CjBlolEh|^?*=G0D{aeYJX)$RZiv>rmMpU^z z-8tsP99CWD?GsdxKWcm2Z}Y*ud>1QyHl8;02likFF%E89e1v9_Ly?oVR@_U3n4rEe zq*m73S3Ih>`H3Qd6+yz;={)rot79WsxLjzWU1_OoZq@#pn-keiKk_^90|j(@;nH=> zlBd>n$=?@`A|DhA(;_OqzbT?-F{B23ymE^@rytFM_vTkqMf`X(qms?6jVv785M316?2`n@9mJrGZ+fH z`W+ji)gcW&5!OiNyHR|=;0xaxsWq6VY0#F<)%!p4G#~3eW|k9W336%bv>yGzzV(%2 z3!|o6IjhDUwbScWS3&;7=AmKleox3j&r0F+Wkc|zrZg)32lMN?D#uIL#WlWIa{?>+EjV9p1 z3=FtMkGgBi3cJDHWMEL%teG(gxYs=-nb!u0x~J1>@^_rv+?J93S*m+brJZ2ZX z4~@jjqu-3Cvhsvg3X5&4FL5PIvCB&u-I-Z1C3(5}cZCv4?%iikF!aB)hq zMDWm1`J#jGXxu^++f<#Rk(Ql~{bn68N&ITSYapf{k?CkY8JHcqG~+?GNf!ywNXuFZ zNn|@ZbvxEazt%GlSSKyt-h7kbUENN(g>T0%qoWk#qnRSwjrQv83sHm+m(E=BjmfHA zTk>gKQc9|7LdR#FC(#BtUS&w`*0A3qaL_12K{EXi@ZBGTwc{(M0#2wq6&i_F z5MGvblIzmzKObjj)BGH#V$D7r22?9qB9qB7J_WxJ+(#XJcwWII8yjBs?pXGpRxuya zEYIc!BCmG*aX0y+U=%N+}tm6q0k+$*b@tC*Z7dm#q85>r{rsG}KPhu6J%= z&?-<5X#{-#mV6N*%z|gU;}fmUl@enLJmWQbdTI@!;TTdw)Ql0opDXB z91k)jqWB>20CkBAN#6*pnOxGn&lcBfv^uf8`^Xyr{3Y-5E7RN`u;z+3+l~P-i(sU9 z!rP@ZONPN20H6rl3|;@A0en_a_`p`oFA5UN20mXDz9q6hJca~5zXQLk)xSdkfU3y9 zK|cWutzY3o_-OZBr>`^zz&-n=*k%R7;tm$!61E3f@Ed#UIZFJ-}-oN zj1+C?$9+b^ymQtxR~`7?qWVHJ0C!9Dq#S)>TUmYQzR<6bd7*g~NNGgOz6ednL z_Wrk1jQ`97+!a*rfJTM6Y$*i~eehs!#$~ClyS9q>X^yc$b=U8OU(pq#Sx!SZ{vZpcpmj6`xBp42FvR^U&Dpr22}Ihjw0`>^tfNE zl{xu6SA}XXJQ3xF?2+w5R{I_RoEy+wNY4i>Mx0|}{5LX!A!DzMju?@T{WH=c^jZBu zKxhce6xRnVGkFG+Y|PxVTEo|16ayAF{2qh?G0!y0%j*0dut*PcAMcM_{u#&pA7h&n zbB;wKqT9x3Uv4xTJ9_C!RXzAN)Px2JKNqxS_3A9@Rm=oOixj$jlMLr6M1T9J60Rr$ zHyq#9?>_{nUZ(qKn;)+-76$z9?Z;U12xPK!aJ&1TNNOXV6Ljr!vs>?H^^~|}Pub_T z4hM%H0sw3X7xG!R%%j~zBKm$}c(JSdZFYeuW~|^dxbfx-H&3aSz^QszmXp0wyp74o ziWV2DWvNtv7ZePf-Q&vC;yYYgXEAAcnck7=vLYP7=l8vIJF9tK_OP{B}N$8UFNWh@4 z5ZQw;!<~SUR_{fP-fjr9itCq#PlH+Y;F;T(OAYIK#45VD#+#rUjM>F!?ovitYM$UL z@x;?fe}44^*8MF z*>dIzLYb8)-yPA(Bl>sZgRyA%ZRKp6N}1Y!EXnOzUL!GZOZ8Jl^8_t=H%OS*UULGf zW#BXgJz&Y0mRLEQ9T=$5AuUQLa8SLA>-}0Y60X0D3=F(7_x)Pdm`kM`enzZmAnWyf z{uxbQX$|(~aMzbZmenPS_~eRVVuIb>YOaEy+n(HpZ;Ki05bI)~1?XO6OEaj$zVX`z`IF z8-=avMk)-JMr^w~>-ts&YTX1)85N2)bM^{x!;kge8CB}$kmib`tsX8%A>N-Idy-Bf zf42@YVVjO5CAE`jOxxXo$A4Zsd9eBd`&zZXF{4lv7IlL;SsdVmtxh4!J(}L81YF>Z zVL{@`>gwj|?HzJ-qR&`r(G5tAP@Pca@I;sF_AU3aXB%nyzemt2Djc7{5suyhV@~t& zr#W9C)}8Qeo^+|*2&u!w#J$$BGQP7;eFsRt%rE>Z-E1Lc1b<0oIi%2oM9EPXi)a_* ztk1aSudEYmjcx^6N)Xm5_op?vCcI750GzqTbHec3CBgvn&7I(Na78>#Ru;~{Mf8*V z_3wMOt(i_Zol?eoker*WudI9z<^SNW8{lWV8g&+4%}1Qf&(aAIwUUN68h@>rs`UIk z>HO*U8xEEWuo$29_bR^4IO>KvUY3*fnn1}svWh9=2JX7Xm1TBf53-?IhkF9PtE(Y! zUP^p@C*(*M=I8Z&9IdGZixbxpcw+-7O_AX??CP$*zWiCVfR_7@=^q}mqrS@%Y1TG8 zb`hzX=_lz5kiZo&Iop=n?i3G&JWFbO2+fR;ssxcf$XMJYZrEGUr+pKMWc#zyWE0p( zfb1m4wf8KVWu%mQvEs%6AsK&0r^sxLn=-8S@!;o(*HNcL)1oEH^T?TxE{1ybBP-u4 z%_hZ9*X`z|2-{A3z9WY|$CNa$Y2LxATtVT3lI;>Cf{JLJ2o0k&9aJYRWq^S?jE@|{ zY_y$B4TisOPex_+ktV7X6*ijD(C4ZdJb$nvq zhLEw5O})%-`Gu=|a*44>V7{|2vMD(rpXOR>s>GaY#S+F9q%mu z%Nh`j>I;V#y9Z)et{r7{LrmY`5s@Q~B+c82ZX-IL!PkwR)i>Q>1o9{N(ODxZ!6V6` z=4pOx_g{8;uGSOA1wFOf5jcquX(?(+p_v`w&q>&5$QJC>VyGWI(xHqHK@z=DI1&-} zL9KWW;?Sx;I2xz{`1^z$M{aV$u^BuPsU!G&7rWKI52o@7+_SSrkK^LV9t~ z{W1Rr)3-uxH!wpu>WZOo_+;U}d(f!_G93 z83RX)D*KWir_3d3mZv&(e!P71WL3QUW3HWv_&#z`(Jpy}8^Bp>)C@;%#Tba$=9?9? zXC%Z&KvoNUm3v;1yDJ7w8*5(rM=;?JBhoW8kl*fDq9NaMtQIMBfpVb z#!AXV_L>zAl$C<@MSi%nCcm+P0i-P46tc)s90O;S~gO4{Zx1 zfk1EAi^z!s#eZ;oZzwPRA1warEbY8701OUa@+p{Gb3MhXm>0mPWk^6na`qub(O9$l z+=Wz{Xw)xgN9>z(z4+M<&zdX#AkgvzAxQE(s-|~t=PcH(zJ?ybuN^n$hu*(zt z(`NDe=$!03>*LUNGPK&FK~=?JFJPKyJSqb&OrNjlQ^;*=zBm{EE%b$~ z+73;^ghs#$3o^3xXZ0%DIs6D9rmFmpApEsTgX7U4AhGK`Z?u{$Qg{S9a!qN2Z;Z6tbL&iUY13lWw)Z{Vieas!=#a=+0f`;bjIzPIvM9xz zrmO4dl<2`Li{9G2^cGT`?XYnrU7WzK7W$%=_cx@7YZ`!1zK1fAq^)e(!+-^-wtMw` zH5)?Jo-fc0-m{1ps;x&U+cfNG6)Szs@N8?#sJw9rZ$Ba0b>~gjZ!<)h$S9hU8uz$$ zs6b9BMD5{^H6^>oWyZx{C^R%#P>)648Xx$(mP%`j5rRG%C>7h>TMSLFPN~j0ym}Hj zm9%(D`8*VS&ZzFKYBQM}d|@6f=Wo#VR$nCBwsB_iPOw-Kwifk~diAlb_r@vjF4)wn z89|hfFghr(-E(kM)7w~M&yia{Cx$WIhH$#0;aBd4qroH;>GK=aLJtz0@%E&VZ0eN1 z;MYLXjcB&{>{P@jJI;5wF!o(dWs~=rjhi;BiS8i^$_%rpP`(2(Rjc1qqa1fb`B3pT zl!>YrP(fIUSLE*rgIAY!^JcCm>)4EYIYf5;I)Km5Y75bDn&v3+kI-H`lwDL{UO2b7 znH7SVtVTMv)mdi!sS~5&8;sjoYuLEE5^6 zXyap|AkX9k(g`DWR>9>C=qD64`2p|N0eIuf{$xhpxv`lxxThOC-K+gVfh^7HJU$Iu zaNbF-{GLi;NAKF^Z|^UMC~$o(5Wc3{TPMM1ZyBm-9KR!z;U$jl@F^X%kvi-b?Fc`C ztJ4Cha2W!32*S@D`YJT$em-KS&1*W~OM{6Kxhp?wQtD^7S#UsA5qA?8LlE`8x}?cO z_$gRMGh(OHa@R9)Mesqr^~`v;hh*CGnySDd`*S7lHbPtzjerjiinM80l=*Zk(!z5f z-Y6@n0U`U`4qtv_^Oy5r!NW;?7Na+(MS(7sRc8T%h91!zpds^Na9dMe-^Md`CZmZpzrD{UA zd3=_6Q~oM&;iSuT2vIes@2-2gq+6<1E}x@u$6FyiOp_a8v612>7j8PR8aU#^&k>w& zF9msKvvdx1Mc+xfgW02@U%a#@dGZK;bk>s;5*7#+O#GM%-aG%M%%lWebBtuqeaFyuv$GBsTZzaHOwv7ylAz;)cvPa zceJcW{@GRY8sqdjKjAPiosU@!dM*WBQ@-SAy-4Tdh4`^WVNQn+fAbrzV{so z(J>=mn1st)7}C^1lACus9Wn5F)RSZI1v6t2DKII_NLZW*J!30tN~kd(SW0=OnweL= z?2zaB(_N5NBs1nXPZQdebeL!WC5|vrGvYeqj!+cokZCmBkC=V8u9S-1a7f7mvRcu_13t>BJA!50k4*bSh&`^bX|!Uk(622bo8ah3E&SMh>GBI%A4E zz6LyZUoGiZbuVHBQO0DNC_mtAQpil*S>#tX=X{rfT7g~fG&teW=fGv$Ku|f6jfCXb zC^trYuD1)}0Dkg^97R^JGj^?^n71L3CIbUwPLTeK9xcU+-R1tHhBdvo4cBa0fLY$h z^ZAjKc&^7^ghsuzB>EP}uNF=cBLE}p8nz&4I%eVh&``;~aSiT|D%K7l&lP!FA8x?2 z37_D%1c2o+F#gllI_e4w(Fv0UnVtgguOIT5?&vrknwFpcmpZl>!uf7=tvby!j8$i~ zrpMy*RpS8-6Ayx4HvZ3ICG+p2oBbR>|95cZ_WA3F<2YoHS3_IDze?uV3+-@~5h!VS z0@3$*X?8-+5bc=vG*f+NSd$e1lG3~+m%woEFEEX^q?VJ7X-p&jUorHEo+BBY!1pNI z^UCJmd_pdTqhWS&4T4lk>x;p`I+c>~CP!&MIOsaI zGL7odrnhT02Wtq20Ozyb&F6;gpNv-E3XiM>R0D$AXJE;34soiqaM6Wl& zg((WoM_b2HWSyS>K~Azde8Nr3-7(OZ^PTx@V^V|0nxu%0fum za@@bPx`CPhaqR*Bw{{np=Mo5t6%x>Za=-dS-A|W6VJtAnB``87J+>3neiL1cE(7Hm-Z~syp{?=+GQu@(TGbhGZ zCp7&MJfv+KK>|J?c-_2|h1LuPKF2{%z$WgsO#S#vnLUQQE7b^X@Sg+KMD-VCupqjR zIO&t}^s`#)Dq6N21NY|`>E9~dmD|b>#rN7G4Otd?`O3K0o)}}HzuE)qrSwl@2{CO^zy250MsNfEF@i&|pzC^;UN2Z0v6TiwaB4!@zgv#EMPBj;ken zz|T+TJiyd~gZ}b=wbSHtoMNr!?CZ2Kat-JN7_oFvJ>&Ird8r6RBQ6cKm)*hh91Ayw4r!-@z5tCM5&Al|&|T$4TSc9W zQ1rasnw~;t;$M=>t)agp7brk zZ{=srQG1(HJDaB(mm9=8bhqcY(Tw$zDefy-#Z;Dz9RJ8ah*0KU0lhY9uq|WZsK>}k zV}|hj;<67{Y^5WAHOlJX(6h2*kplF26qGV|r_}uG(B;DfnK#vDosZ!eeER#i52|GH z1bH&r<7xF7#>Y$$a;0sp(QMY&=dC`~(A}^7&NkAhJN022)K?WUN59_kI$aHcON||3 zN`NL%%ZB=@?ebp9xVeHinrYIwBRue-WP&AnFIMQolV;SnNk0+^M;PXggYDdnM!AVCFO!gdg_ zpbM@@j19YMFGSvVwCJ?;-ukcg1eq8m^!dgOdEZD-cM-VVl~qh6jBnawE1Qz!&-Qk` zr_rBmMe5R}mQW)WawaSaOAI3C{|f8+Xk^p~RZ?!L+|5zW-8b5? z2@ae;iu~N$ZLr|(@>4187IkO9tkAvgdf9sk_G^*}mR)_dbmfY1LR@KyWLwnn*IZij zAiI#Y%5>V9k*OXwjNggaz&<%MgeW^ERAaWjDSekpeM(IE>fY_zy$Jc-Z--;G+i|pMqCbt)LnN-1mZ!4COdj+?tC@)-atsA5`%WR9FNd za3hW-1u5@0PUzOvv=N^v{ed4ajjvUB_P_*pMI@vF$~- zT^h3r>`f>_p-Ao(M?XlrXe{$utR+I=1QE+rXYF7isa%OW$9ydVffyr@NEW9@ysdGw zeWNDZ{WStvqkT76_xpG`M4ambjMN?bBOXLsKXTpOAjTd2qd3EhJa6?ip6(n&e%86b z^}s^{tMxJT`d^&hon25%>bYN3y?k3|`G$pTsk_sXKjX-VO3Dn%7VzFW zZanLL5)#*2zwx>lWb5yQW*4P6p|AjvnzjnQV#ma#Qm>O)g;Ea3B>px^M$hkL{v`qI z+mU16?t;~V=RXGgZ$B{U9U`|=R+=M*^}X?~no9~#_rnjk&=OOs23fLHR|%Z1|75e^ zkzh`+yHNkX+*p{x^9b}-C7|V39oz$duOO`fzZefaJ7sKFegs_(TJtc8!qZ@r&~2sUuAghR$o1MOVFd zpa=h#HomKWK+}L7!3@1V&a7!dYa+@zIj<%+@wBz@CDqmw@tN|N2S7;wOB2kn4iCJd zsk%%DoSO?=sXFSzUXu6X%1466L^-w^Mj&ZL;i+g|b4R`MdN9sQmUYWwds z5@#YUZ?!UxA|r)B77zF8&mHk9=+V6rGZd23-`RNbLG5KhYfQv!Xc3Gmn9dsfekw299mfYLC2Q| zl5OO8b7*2?zg=q3Ma`I=lD-JAJ!!YQkS$9pgjZq8U;uCX&+jaRL!TsHA7XF%R)*7V z$)5VWyI=oXuh!Gjck#{1&yBQS^q-Gg0}G+jov-g*n4@Yl-K)!rilg~V>(vR zR7&H8teyZN&v5~;&lGG+_@C5bDs@uMWPD=ca!*M|TecSHQ3pKGOxCq`r)25ClgUHv z-1}P9dT?%q{Q1Goo`KFzn}x`tvptI%>)BC}>)uDgc%B)*TJlo3H((ECc zH9v0;B%$Lz=#;0_dY&~wO)6Ed*mBp&cTY35!h5s_p#)$VECnA0_UaNqLx#M3wl|)# zQ5f6WzNwG#fm@IwKNEAu$xQ28D38-hcFUSbcu0;f zv^o+WP*@ZW-NAL?H-?*)0}UvWiKWEcbOHu*xNp@18kJM@fkc$6P>aQlgyW4Ln?G$z zV1KGLT*rUS68Ty%iCT8AUTh0YfnZlhjb%}B13M1tXE&?MVb6R!Y@)cycubkx*C6p*H$AQdpuqBxe_x13u2%BBV~ z8JsJV&2WWV^$^C1-4q*Gu@bw%UoJPfqOv%6+I?1NX)Am(YIJY=qo3P+1bA!aD93)g z%fqW1QOGD|r`C-2H5h&FZjdVoRl3CPnHN*xP$j!1gQ5V@_I==R7CVoD(cA_NA?gqZ zrQHkB!Es!aH&u)V6!8o9q`_BI5`Amhx4P#;KmS!b34@zZcHp~bJ4y5h!8O>aJXFLSbxRFaCF#?8g{aN5M>)k{b3rp|O1v zMvY+gu{griT+X~Xk4e_;{_$Sese;HTx&YlOWVabemJBy*~!RMbbt@hya`*1U?tA~66OFx)JG!UcHaCDU zG1jKzZM0W+<8@G$l>IbfI`hr3FuYPyEC)NZGy{!#1LE|WrK?K9GCgFYuhNOMo6_Ov zRkjjp?wtA)A{oor{)h|x904|;n?G~v6_%^UBE36Uj^6pcqq=-zwmbvtBLnf&b?NyD z-GEQ25Lo64O{On(q+IR`dAXImT1eqFb~0ysQwx}|cM(;xO999+J|e7Q_=RtL1mrAmDV!VnT7L0Uu!h9cxt8-LN8=-D^{wOcCA8^PUl(`7 zP1v;^n>KKK2z)t)b!X_%s#j0H!V|YIPwek7ZBS7|%K>-a*QLXF)xkX_N;ITU`-i1ozP2so2_JNDVI=hC?cDq!h)F{iKwFq3UhoVwkD0$ycdGAV;4(nDiInvDB+S!VVcJGD7DPIBiDg#yS^K9pop<_ vN{++vX6L_~`9T)|@IwFp+lrNb-_TJCEG~(n&w_j!0Pf#0zFl(D`M3WCEBEsr diff --git a/man/figures/rsi_example1.png b/man/figures/rsi_example1.png new file mode 100644 index 0000000000000000000000000000000000000000..73fdc0c71b079d39b35d3855d5a7f9b08e899534 GIT binary patch literal 9651 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 literal 0 HcmV?d00001 diff --git a/man/figures/rsi_example2.png b/man/figures/rsi_example2.png new file mode 100644 index 0000000000000000000000000000000000000000..d9240011e779f57055c1e4314a0c02e0a8fdc6cf GIT binary patch literal 7874 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 literal 0 HcmV?d00001 diff --git a/man/figures/rsi_example3.png b/man/figures/rsi_example3.png new file mode 100644 index 0000000000000000000000000000000000000000..36857cc5738418c4d01b58f4a3c5b4a4b146023b GIT binary patch literal 7160 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 literal 0 HcmV?d00001 diff --git a/man/ggplot_rsi.Rd b/man/ggplot_rsi.Rd index e2e7cffb..95c6bd6a 100644 --- a/man/ggplot_rsi.Rd +++ b/man/ggplot_rsi.Rd @@ -31,7 +31,7 @@ theme_rsi() \item{position}{position adjustment of bars, either \code{"stack"} (default) or \code{"dodge"}} } \description{ -Use these functions to create bar plots for antimicrobial resistance analysis. All functions rely on internal \code{\link{ggplot}} functions. +Use these functions to create bar plots for antimicrobial resistance analysis. All functions rely on internal \code{\link[ggplot2]{ggplot}} functions. } \details{ At default, the names of antibiotics will be shown on the plots using \code{\link{abname}}. This can be set with the option \code{get_antibiotic_names} (a logical value), so change it e.g. to \code{FALSE} with \code{options(get_antibiotic_names = FALSE)}. @@ -39,13 +39,13 @@ At default, the names of antibiotics will be shown on the plots using \code{\lin \strong{The functions}\cr \code{geom_rsi} will take any variable from the data that has an \code{rsi} class (created with \code{\link{as.rsi}}) using \code{\link{portion_df}} and will plot bars with the percentage R, I and S. The default behaviour is to have the bars stacked and to have the different antibiotics on the x axis. -\code{facet_rsi} creates 2d plots (at default based on S/I/R) using \code{\link{facet_wrap}}. +\code{facet_rsi} creates 2d plots (at default based on S/I/R) using \code{\link[ggplot2]{facet_wrap}}. \code{scale_y_percent} transforms the y axis to a 0 to 100% range. \code{scale_rsi_colours} sets colours to the bars: green for S, yellow for I and red for R. -\code{theme_rsi} is a \code{\link{theme}} with minimal distraction. +\code{theme_rsi} is a \code{\link[ggplot2]{theme}} with minimal distraction. \code{ggplot_rsi} is a wrapper around all above functions that uses data as first input. This makes it possible to use this function after a pipe (\code{\%>\%}). See Examples. } diff --git a/tests/testthat/test-ggplot_rsi.R b/tests/testthat/test-ggplot_rsi.R new file mode 100644 index 00000000..e46e24d6 --- /dev/null +++ b/tests/testthat/test-ggplot_rsi.R @@ -0,0 +1,35 @@ +context("ggplot_rsi.R") + +test_that("ggplot_rsi works", { + + skip_if_not("ggplot2" %in% rownames(installed.packages())) + + library(dplyr) + library(ggplot2) + + # data should be equal + expect_equal( + (septic_patients %>% select(amcl, cipr) %>% ggplot_rsi())$data %>% + summarise_all(portion_IR) %>% as.double(), + septic_patients %>% select(amcl, cipr) %>% + summarise_all(portion_IR) %>% as.double() + ) + + expect_equal( + (septic_patients %>% select(amcl, cipr) %>% ggplot_rsi(x = "Interpretation", facet = "Antibiotic"))$data %>% + summarise_all(portion_IR) %>% as.double(), + septic_patients %>% select(amcl, cipr) %>% + summarise_all(portion_IR) %>% as.double() + ) + + expect_equal( + (septic_patients %>% select(amcl, cipr) %>% ggplot_rsi(x = "Antibiotic", facet = "Interpretation"))$data %>% + summarise_all(portion_IR) %>% as.double(), + septic_patients %>% select(amcl, cipr) %>% + summarise_all(portion_IR) %>% as.double() + ) + + expect_error(geom_rsi(x = "test")) + expect_error(facet_rsi(facet = "test")) + +}) diff --git a/tests/testthat/test-portion.R b/tests/testthat/test-portion.R index fec33cc3..f55e4d43 100755 --- a/tests/testthat/test-portion.R +++ b/tests/testthat/test-portion.R @@ -1,6 +1,6 @@ context("portion.R") -test_that("resistance works", { +test_that("portions works", { # amox resistance in `septic_patients` expect_equal(portion_R(septic_patients$amox), 0.6603, tolerance = 0.0001) expect_equal(portion_I(septic_patients$amox), 0.0030, tolerance = 0.0001) @@ -46,6 +46,9 @@ test_that("resistance works", { expect_warning(portion_S(as.character(septic_patients$amcl))) expect_warning(portion_S(as.character(septic_patients$amcl, septic_patients$gent))) + expect_equal(n_rsi(as.character(septic_patients$amcl, + septic_patients$gent)), + 1570) # check for errors @@ -59,6 +62,9 @@ test_that("resistance works", { expect_error(portion_S("test", as_percent = "test")) expect_error(portion_S(septic_patients %>% select(amox, amcl))) expect_error(portion_S("R", septic_patients %>% select(amox, amcl))) + expect_error(n_rsi(septic_patients %>% select(amox, amcl))) + expect_error(n_rsi(septic_patients$amox, septic_patients %>% select(amox, amcl))) + # check too low amount of isolates expect_identical(portion_R(septic_patients$amox, minimum = nrow(septic_patients) + 1), @@ -102,6 +108,15 @@ test_that("old rsi works", { combination_n = n_rsi(cipr, gent)) %>% pull(combination_n), c(202, 482, 201, 499)) + + # portion_df + expect_equal( + septic_patients %>% select(amox) %>% portion_df(TRUE) %>% pull(Percentage), + c(septic_patients$amox %>% portion_S(), + septic_patients$amox %>% portion_I(), + septic_patients$amox %>% portion_R()) + ) + }) test_that("prediction of rsi works", {