mirror of
https://github.com/msberends/AMR.git
synced 2025-07-09 07:31:54 +02:00
Compare commits
11 Commits
0d67db4f32
...
v1.8.2
Author | SHA1 | Date | |
---|---|---|---|
63fe160322 | |||
a3b97a10a5 | |||
3fca703fbf | |||
fbd5d32541 | |||
e7af5fc716 | |||
e975a3043c | |||
2ed5f13880 | |||
1e4eaf23f2 | |||
21b4552f5a | |||
c44ddf272f | |||
71db246d5c |
11
.github/prehooks/pre-commit
vendored
11
.github/prehooks/pre-commit
vendored
@ -3,29 +3,28 @@
|
||||
echo "Running pre-commit hook..."
|
||||
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
echo ">> Updating R documentation..."
|
||||
if command -v Rscript > /dev/null; then
|
||||
if [ "$(Rscript -e 'cat(all(c('"'pkgload'"', '"'devtools'"', '"'dplyr'"', '"'styler'"') %in% rownames(installed.packages())))')" = "TRUE" ]; then
|
||||
Rscript -e "source('data-raw/_pre_commit_hook.R')"
|
||||
currentpkg=`Rscript -e "cat(pkgload::pkg_name())"`
|
||||
echo ">> Adding all files in folders 'data-raw', 'inst', 'man', and 'R' to this git commit"
|
||||
echo "-> Adding all files in folders 'data-raw', 'inst', 'man', and 'R' to this git commit"
|
||||
git add data-raw/*
|
||||
git add inst/*
|
||||
git add man/*
|
||||
git add R/*
|
||||
else
|
||||
echo ">> R package 'pkgload', 'devtools', 'dplyr', or 'styler' not installed!"
|
||||
echo "- R package 'pkgload', 'devtools', 'dplyr', or 'styler' not installed!"
|
||||
currentpkg="your"
|
||||
fi
|
||||
else
|
||||
echo ">> R is not available on your system!"
|
||||
echo "- R is not available on your system!"
|
||||
currentpkg="your"
|
||||
fi
|
||||
echo ">> "
|
||||
echo ""
|
||||
|
||||
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
echo ">> Updating semantic versioning and date..."
|
||||
echo ">> Updating semantic versioning and date..."
|
||||
|
||||
# get tags from remote, and remove tags not on remote:
|
||||
git fetch origin --prune --prune-tags --quiet
|
||||
|
3
.github/workflows/check-pr.yaml
vendored
3
.github/workflows/check-pr.yaml
vendored
@ -32,6 +32,9 @@ name: R-code-check-PR
|
||||
|
||||
jobs:
|
||||
R-code-check-PR:
|
||||
# do not run if we are the authors - the other checks will already run
|
||||
if: ${{ github.event.comment.author_association != 'MEMBER' && github.event.comment.author_association != 'OWNER' }}
|
||||
|
||||
runs-on: ${{ matrix.config.os }}
|
||||
|
||||
continue-on-error: ${{ matrix.config.allowfail }}
|
||||
|
27
.github/workflows/check.yaml
vendored
27
.github/workflows/check.yaml
vendored
@ -57,7 +57,7 @@ jobs:
|
||||
- {os: ubuntu-22.04, r: '4.1', allowfail: false, rspm: "https://packagemanager.rstudio.com/cran/__linux__/jammy/latest"}
|
||||
- {os: ubuntu-22.04, r: '4.0', allowfail: false, rspm: "https://packagemanager.rstudio.com/cran/__linux__/jammy/latest"}
|
||||
- {os: ubuntu-22.04, r: '3.6', allowfail: false, rspm: "https://packagemanager.rstudio.com/cran/__linux__/jammy/latest"}
|
||||
- {os: ubuntu-22.04, r: '3.5', allowfail: false, rspm: "https://packagemanager.rstudio.com/cran/__linux__/jammy/latest"}
|
||||
- {os: ubuntu-22.04, r: '3.5', allowfail: true, rspm: "https://packagemanager.rstudio.com/cran/__linux__/jammy/latest"}
|
||||
- {os: ubuntu-22.04, r: '3.4', allowfail: false, rspm: "https://packagemanager.rstudio.com/cran/__linux__/jammy/latest"}
|
||||
- {os: ubuntu-22.04, r: '3.3', allowfail: false, rspm: "https://packagemanager.rstudio.com/cran/__linux__/jammy/latest"}
|
||||
- {os: ubuntu-22.04, r: '3.2', allowfail: false, rspm: "https://packagemanager.rstudio.com/cran/__linux__/jammy/latest"}
|
||||
@ -112,35 +112,42 @@ jobs:
|
||||
shell: Rscript {0}
|
||||
|
||||
- name: Remove vignettes on R without knitr support
|
||||
if: matrix.config.r == '3.0' || matrix.config.r == '3.1' || matrix.config.r == '3.2'
|
||||
# writing to DESCRIPTION2 and then moving to DESCRIPTION is required for R < 3.3 as writeLines() cannot overwrite
|
||||
if: matrix.config.r == '3.0' || matrix.config.r == '3.1' || matrix.config.r == '3.2' || matrix.config.r == '3.3'
|
||||
# writing to DESCRIPTION2 and then moving to DESCRIPTION is required for R <= 3.3 as writeLines() cannot overwrite
|
||||
run: |
|
||||
rm -rf AMR/vignettes
|
||||
Rscript -e "writeLines(readLines('AMR/DESCRIPTION')[!grepl('VignetteBuilder', readLines('AMR/DESCRIPTION'))], 'AMR/DESCRIPTION2')"
|
||||
rm AMR/DESCRIPTION
|
||||
mv AMR/DESCRIPTION2 AMR/DESCRIPTION
|
||||
rm -rf vignettes
|
||||
Rscript -e "writeLines(readLines('DESCRIPTION')[!grepl('VignetteBuilder', readLines('DESCRIPTION'))], 'DESCRIPTION2')"
|
||||
rm DESCRIPTION
|
||||
mv DESCRIPTION2 DESCRIPTION
|
||||
shell: bash
|
||||
|
||||
- name: Run R CMD check
|
||||
if: always()
|
||||
env:
|
||||
# see https://rstudio.github.io/r-manuals/r-ints/Tools.html for an overview
|
||||
_R_CHECK_CRAN_INCOMING_: false
|
||||
_R_CHECK_FORCE_SUGGESTS_: false
|
||||
_R_CHECK_DEPENDS_ONLY_: true
|
||||
_R_CHECK_LENGTH_1_CONDITION_: verbose
|
||||
_R_CHECK_LENGTH_1_LOGIC2_: verbose
|
||||
# no check for old R versions - these packages require higher R versions
|
||||
_R_CHECK_RD_XREFS_: ${{ matrix.config.r != '3.0' && matrix.config.r != '3.1' && matrix.config.r != '3.2' && matrix.config.r != '3.3' && matrix.config.r != '3.4' }}
|
||||
_R_CHECK_FORCE_SUGGESTS_: false
|
||||
R_CHECK_CONSTANTS: 5
|
||||
R_JIT_STRATEGY: 3
|
||||
# during 'R CMD check', R_LIBS_USER will be overwritten, so:
|
||||
R_LIBS_USER_GH_ACTIONS: ${{ env.R_LIBS_USER }}
|
||||
# this is a required value to run the unit tests:
|
||||
R_RUN_TINYTEST: true
|
||||
run: |
|
||||
cd ..
|
||||
R CMD build AMR
|
||||
R CMD check --no-manual --run-donttest --run-dontrun AMR_*.tar.gz
|
||||
R CMD check --as-cran --no-manual --run-donttest --run-dontrun AMR_*.tar.gz
|
||||
shell: bash
|
||||
|
||||
- name: Show unit tests output
|
||||
if: always()
|
||||
run: |
|
||||
cd ../AMR.Rcheck
|
||||
find . -name 'tinytest.Rout*' -exec cat '{}' \; || true
|
||||
shell: bash
|
||||
|
||||
@ -149,4 +156,4 @@ jobs:
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: artifacts-${{ matrix.config.os }}-r${{ matrix.config.r }}
|
||||
path: AMR.Rcheck
|
||||
path: /home/runner/work/AMR.Rcheck
|
||||
|
42
.github/workflows/codecovr.yaml
vendored
42
.github/workflows/codecovr.yaml
vendored
@ -33,54 +33,30 @@ name: code-coverage
|
||||
|
||||
jobs:
|
||||
code-coverage:
|
||||
runs-on: macOS-latest
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}
|
||||
CODECOV_TOKEN: ${{secrets.CODECOV_TOKEN}}
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- uses: r-lib/actions/setup-pandoc@v2
|
||||
|
||||
- uses: r-lib/actions/setup-r@v2
|
||||
with:
|
||||
r-version: release
|
||||
|
||||
- uses: r-lib/actions/setup-pandoc@v2
|
||||
# with:
|
||||
# pandoc-version: '2.7.3' # The pandoc version to download (if necessary) and use.
|
||||
# use RStudio Package Manager to quickly install packages
|
||||
use-public-rspm: true
|
||||
|
||||
- name: Query dependencies
|
||||
# this will change once a week, so it will cache dependency updates
|
||||
run: |
|
||||
writeLines(paste(format(Sys.Date(), "week %V %Y"), sprintf("R-%i.%i", getRversion()$major, getRversion()$minor)), ".github/week-R-version")
|
||||
shell: Rscript {0}
|
||||
|
||||
- name: Restore cached R packages
|
||||
# this step will add the step 'Post Restore cached R packages' on a succesful run
|
||||
uses: actions/cache@v2
|
||||
- uses: r-lib/actions/setup-r-dependencies@v2
|
||||
with:
|
||||
path: ${{ env.R_LIBS_USER }}
|
||||
key: ${{ matrix.config.os }}-${{ hashFiles('.github/week-R-version') }}-v4
|
||||
|
||||
- name: Unpack AMR and install R dependencies
|
||||
run: |
|
||||
tar -xf data-raw/AMR_latest.tar.gz
|
||||
Rscript -e "source('data-raw/_install_deps.R')"
|
||||
shell: bash
|
||||
|
||||
- name: Show session info
|
||||
run: |
|
||||
options(width = 100)
|
||||
utils::sessionInfo()
|
||||
as.data.frame(utils::installed.packages())[, "Version", drop = FALSE]
|
||||
shell: Rscript {0}
|
||||
extra-packages: any::covr
|
||||
|
||||
- name: Test coverage
|
||||
env:
|
||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
||||
R_LIBS_USER_GH_ACTIONS: ${{ env.R_LIBS_USER }}
|
||||
R_RUN_TINYTEST: true
|
||||
run: |
|
||||
install.packages("covr", repos = "https://cran.rstudio.com/")
|
||||
library(AMR)
|
||||
library(tinytest)
|
||||
x <- covr::codecov(line_exclusions = list("R/atc_online.R", "R/mo_source.R", "R/translate.R", "R/resistance_predict.R", "R/aa_helper_functions.R", "R/aa_helper_pm_functions.R", "R/zzz.R"))
|
||||
print(x)
|
||||
shell: Rscript {0}
|
||||
|
29
.github/workflows/lintr.yaml
vendored
29
.github/workflows/lintr.yaml
vendored
@ -33,34 +33,23 @@ name: lintr
|
||||
|
||||
jobs:
|
||||
lintr:
|
||||
runs-on: macOS-latest
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- uses: r-lib/actions/setup-pandoc@v2
|
||||
|
||||
- uses: r-lib/actions/setup-r@v2
|
||||
|
||||
- name: Query dependencies
|
||||
run: |
|
||||
install.packages('remotes')
|
||||
saveRDS(remotes::dev_package_deps(dependencies = TRUE), ".github/depends.Rds", version = 2)
|
||||
writeLines(sprintf("R-%i.%i", getRversion()$major, getRversion()$minor), ".github/R-version")
|
||||
shell: Rscript {0}
|
||||
|
||||
- name: Cache R packages
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ${{ env.R_LIBS_USER }}
|
||||
key: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1-${{ hashFiles('.github/depends.Rds') }}
|
||||
restore-keys: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1-
|
||||
r-version: release
|
||||
# use RStudio Package Manager to quickly install packages
|
||||
use-public-rspm: true
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
install.packages(c("remotes"))
|
||||
remotes::install_deps(dependencies = TRUE)
|
||||
remotes::install_cran("lintr")
|
||||
shell: Rscript {0}
|
||||
- uses: r-lib/actions/setup-r-dependencies@v2
|
||||
with:
|
||||
extra-packages: any::lintr
|
||||
|
||||
- name: Lint
|
||||
run: lintr::lint_package(linters = lintr::with_defaults(line_length_linter = NULL, trailing_whitespace_linter = NULL, object_name_linter = NULL, cyclocomp_linter = NULL, object_length_linter = lintr::object_length_linter(length = 50L)), exclusions = list("R/aa_helper_pm_functions.R"))
|
||||
|
@ -1,6 +1,6 @@
|
||||
Package: AMR
|
||||
Version: 1.8.1.9034
|
||||
Date: 2022-08-28
|
||||
Version: 1.8.1.9049
|
||||
Date: 2022-09-01
|
||||
Title: Antimicrobial Resistance Data Analysis
|
||||
Description: Functions to simplify and standardise antimicrobial resistance (AMR)
|
||||
data analysis and to work with microbial and antimicrobial properties by
|
||||
@ -13,13 +13,14 @@ Authors@R: c(
|
||||
person(family = "Hassing", c("Erwin", "E.", "A."), role = c("aut", "ctb")),
|
||||
person(family = "Albers", c("Casper", "J."), role = "ths", comment = c(ORCID = "0000-0002-9213-6743")),
|
||||
person(family = "Dutey-Magni", c("Peter"), role = "ctb", comment = c(ORCID = "0000-0002-8942-9836")),
|
||||
person(family = "Fonville", c("Judith", "M"), role = "ctb"),
|
||||
person(family = "Fonville", c("Judith", "M."), role = "ctb"),
|
||||
person(family = "Friedrich", c("Alex", "W."), role = "ths", comment = c(ORCID = "0000-0003-4881-038X")),
|
||||
person(family = "Glasner", c("Corinna"), role = "ths", comment = c(ORCID = "0000-0003-1241-1328")),
|
||||
person(family = "Hazenberg", c("Eric", "H.", "L.", "C.", "M."), role = "ctb"),
|
||||
person(family = "Knight", c("Gwen"), role = "ctb", comment = c(ORCID = "0000-0002-7263-9896")),
|
||||
person(family = "Lenglet", c("Annick"), role = "ctb", comment = c(ORCID = "0000-0003-2013-8405")),
|
||||
person(family = "Meijer", c("Bart", "C."), role = "ctb"),
|
||||
person(family = "Mykhailenko", c("Dmytro"), role = "ctb"),
|
||||
person(family = "Mymrikov", c("Anton"), role = "ctb"),
|
||||
person(family = "Ny", c("Sofia"), role = "ctb", comment = c(ORCID = "0000-0002-2017-1363")),
|
||||
person(family = "Schade", c("Rogier", "P."), role = "ctb"),
|
||||
@ -42,7 +43,7 @@ Suggests:
|
||||
rvest,
|
||||
tinytest,
|
||||
xml2
|
||||
VignetteBuilder: knitr
|
||||
VignetteBuilder: knitr,rmarkdown
|
||||
URL: https://msberends.github.io/AMR/, https://github.com/msberends/AMR
|
||||
BugReports: https://github.com/msberends/AMR/issues
|
||||
License: GPL-2 | file LICENSE
|
||||
|
@ -101,6 +101,11 @@ S3method(log1p,mic)
|
||||
S3method(log2,mic)
|
||||
S3method(max,mic)
|
||||
S3method(mean,mic)
|
||||
S3method(mean_amr_distance,data.frame)
|
||||
S3method(mean_amr_distance,default)
|
||||
S3method(mean_amr_distance,disk)
|
||||
S3method(mean_amr_distance,mic)
|
||||
S3method(mean_amr_distance,rsi)
|
||||
S3method(median,mic)
|
||||
S3method(min,mic)
|
||||
S3method(plot,disk)
|
||||
@ -220,6 +225,7 @@ export(count_resistant)
|
||||
export(count_susceptible)
|
||||
export(custom_eucast_rules)
|
||||
export(custom_mdro_guideline)
|
||||
export(distance_from_row)
|
||||
export(eucast_dosage)
|
||||
export(eucast_exceptional_phenotypes)
|
||||
export(eucast_rules)
|
||||
@ -259,6 +265,7 @@ export(macrolides)
|
||||
export(mdr_cmi2012)
|
||||
export(mdr_tb)
|
||||
export(mdro)
|
||||
export(mean_amr_distance)
|
||||
export(mo_authors)
|
||||
export(mo_class)
|
||||
export(mo_domain)
|
||||
@ -314,6 +321,7 @@ export(resistance)
|
||||
export(resistance_predict)
|
||||
export(right_join_microorganisms)
|
||||
export(rsi_df)
|
||||
export(rsi_interpretation_history)
|
||||
export(rsi_predict)
|
||||
export(scale_rsi_colours)
|
||||
export(scale_y_percent)
|
||||
|
6
NEWS.md
6
NEWS.md
@ -1,7 +1,9 @@
|
||||
# AMR 1.8.1.9034
|
||||
# AMR 1.8.1.9049
|
||||
|
||||
### New
|
||||
* EUCAST 2022 and CLSI 2022 guidelines have been added for `as.rsi()`. EUCAST 2022 is now the new default guideline for all MIC and disks diffusion interpretations.
|
||||
* Function `mean_amr_distance()` to calculate the mean AMR distance. The mean AMR distance is a normalised numeric value to compare AMR test results and can help to identify similar isolates, without comparing antibiograms by hand.
|
||||
* Function `rsi_interpretation_history()` to view the history of previous runs of `as.rsi()`. This returns a 'logbook' with the selected guideline, reference table and specific interpretation of each row in a data set on which `as.rsi()` was run.
|
||||
* Support for `data.frame`-enhancing R packages, more specifically: `data.table`, `tibble`, and `tsibble`. AMR package functions that have a data set as output (such as `rsi_df()` and `bug_drug_combinations()`), will now return the same data type as the input. Furthermore, all our data sets are now in `tibble` format.
|
||||
* Our data sets are now also continually exported to Apache Feather and Apache Parquet formats. You can find more info [in this article on our website](https://msberends.github.io/AMR/articles/datasets.html).
|
||||
* Support for the following languages: Chinese, Greek, Japanese, Polish, Turkish and Ukrainian. We are very grateful for the valuable input by our colleagues from other countries. The `AMR` package is now available in 16 languages.
|
||||
@ -21,6 +23,8 @@
|
||||
* All data sets in this package are now exported as `tibble`, instead of base R `data.frame`s. Older R versions are still supported.
|
||||
* Automatic language determination will give a note once a session
|
||||
* For all interpretation guidelines using `as.rsi()` on amoxicillin, the rules for ampicillin will be used if amoxicillin rules are not available
|
||||
* Fix for using `ab_atc()` on non-existing ATC codes
|
||||
* Black and white message texts are now reversed in colour if using an RStudio dark theme
|
||||
|
||||
### Other
|
||||
* New website to make use of the new Bootstrap 5 and pkgdown v2.0. The website now contains results for all examples and will be automatically regenerated with every change to our repository, using GitHub Actions
|
||||
|
@ -651,7 +651,7 @@ dataset_UTF8_to_ASCII <- function(df) {
|
||||
df[, i] <- col
|
||||
}
|
||||
}
|
||||
tibble::as_tibble(df)
|
||||
import_fn("as_tibble", "tibble")(df)
|
||||
}
|
||||
|
||||
# for eucast_rules() and mdro(), creates markdown output with URLs and names
|
||||
@ -1062,10 +1062,10 @@ has_colour <- function() {
|
||||
if ((cols <- Sys.getenv("RSTUDIO_CONSOLE_COLOR", "")) != "" && !is.na(as.double(cols))) {
|
||||
return(TRUE)
|
||||
}
|
||||
tryCatch(get("isAvailable", envir = asNamespace("rstudioapi"))(), error = function(e) {
|
||||
tryCatch(getExportedValue("isAvailable", ns = asNamespace("rstudioapi"))(), error = function(e) {
|
||||
return(FALSE)
|
||||
}) &&
|
||||
tryCatch(get("hasFun", envir = asNamespace("rstudioapi"))("getConsoleHasColor"), error = function(e) {
|
||||
tryCatch(getExportedValue("hasFun", ns = asNamespace("rstudioapi"))("getConsoleHasColor"), error = function(e) {
|
||||
return(FALSE)
|
||||
})
|
||||
}
|
||||
@ -1112,7 +1112,26 @@ try_colour <- function(..., before, after, collapse = " ") {
|
||||
}
|
||||
}
|
||||
font_black <- function(..., collapse = " ") {
|
||||
try_colour(..., before = "\033[38;5;232m", after = "\033[39m", collapse = collapse)
|
||||
before <- "\033[38;5;232m"
|
||||
after <- "\033[39m"
|
||||
theme_info <- import_fn("getThemeInfo", "rstudioapi", error_on_fail = FALSE)
|
||||
if (!is.null(theme_info) && isTRUE(theme_info()$dark)) {
|
||||
# white
|
||||
before <- "\033[37m"
|
||||
after <- "\033[39m"
|
||||
}
|
||||
try_colour(..., before = before, after = after, collapse = collapse)
|
||||
}
|
||||
font_white <- function(..., collapse = " ") {
|
||||
before <- "\033[37m"
|
||||
after <- "\033[39m"
|
||||
theme_info <- import_fn("getThemeInfo", "rstudioapi", error_on_fail = FALSE)
|
||||
if (!is.null(theme_info) && isTRUE(theme_info()$dark)) {
|
||||
# black
|
||||
before <- "\033[38;5;232m"
|
||||
after <- "\033[39m"
|
||||
}
|
||||
try_colour(..., before = before, after = after, collapse = collapse)
|
||||
}
|
||||
font_blue <- function(..., collapse = " ") {
|
||||
try_colour(..., before = "\033[34m", after = "\033[39m", collapse = collapse)
|
||||
@ -1129,9 +1148,6 @@ font_red <- function(..., collapse = " ") {
|
||||
font_silver <- function(..., collapse = " ") {
|
||||
try_colour(..., before = "\033[90m", after = "\033[39m", collapse = collapse)
|
||||
}
|
||||
font_white <- function(..., collapse = " ") {
|
||||
try_colour(..., before = "\033[37m", after = "\033[39m", collapse = collapse)
|
||||
}
|
||||
font_yellow <- function(..., collapse = " ") {
|
||||
try_colour(..., before = "\033[33m", after = "\033[39m", collapse = collapse)
|
||||
}
|
||||
|
15
R/ab.R
15
R/ab.R
@ -125,6 +125,7 @@ as.ab <- function(x, flag_multiple_results = TRUE, info = interactive(), ...) {
|
||||
x <- unique(x_bak_clean) # this means that every x is in fact generalise_antibiotic_name(x)
|
||||
x_new <- rep(NA_character_, length(x))
|
||||
x_unknown <- character(0)
|
||||
x_unknown_ATCs <- character(0)
|
||||
|
||||
note_if_more_than_one_found <- function(found, index, from_text) {
|
||||
if (initial_search == TRUE & isTRUE(length(from_text) > 1)) {
|
||||
@ -183,6 +184,13 @@ as.ab <- function(x, flag_multiple_results = TRUE, info = interactive(), ...) {
|
||||
x_unknown <- c(x_unknown, x_bak[x[i] == x_bak_clean][1])
|
||||
next
|
||||
}
|
||||
if (x[i] %like_case% "[A-Z][0-9][0-9][A-Z][A-Z][0-9][0-9]") {
|
||||
# seems an ATC code, but the available ones are in `already_known`, so:
|
||||
x_unknown <- c(x_unknown, x[i])
|
||||
x_unknown_ATCs <- c(x_unknown_ATCs, x[i])
|
||||
x_new[i] <- NA_character_
|
||||
next
|
||||
}
|
||||
|
||||
if (fast_mode == FALSE && flag_multiple_results == TRUE && x[i] %like% "[ ]") {
|
||||
from_text <- tryCatch(suppressWarnings(ab_from_text(x[i], initial_search = FALSE, translate_ab = FALSE)[[1]]),
|
||||
@ -474,16 +482,15 @@ as.ab <- function(x, flag_multiple_results = TRUE, info = interactive(), ...) {
|
||||
}
|
||||
|
||||
# take failed ATC codes apart from rest
|
||||
x_unknown_ATCs <- x_unknown[x_unknown %like% "[A-Z][0-9][0-9][A-Z][A-Z][0-9][0-9]"]
|
||||
x_unknown <- x_unknown[!x_unknown %in% x_unknown_ATCs]
|
||||
if (length(x_unknown_ATCs) > 0 & fast_mode == FALSE) {
|
||||
if (length(x_unknown_ATCs) > 0 && fast_mode == FALSE) {
|
||||
warning_(
|
||||
"in `as.ab()`: these ATC codes are not (yet) in the antibiotics data set: ",
|
||||
vector_and(x_unknown_ATCs), "."
|
||||
)
|
||||
}
|
||||
x_unknown <- x_unknown[!x_unknown %in% x_unknown_ATCs]
|
||||
|
||||
if (length(x_unknown) > 0 & fast_mode == FALSE) {
|
||||
if (length(x_unknown) > 0 && fast_mode == FALSE) {
|
||||
warning_(
|
||||
"in `as.ab()`: these values could not be coerced to a valid antimicrobial ID: ",
|
||||
vector_and(x_unknown), "."
|
||||
|
@ -374,7 +374,12 @@ set_ab_names <- function(data, ..., property = "name", language = get_AMR_locale
|
||||
|
||||
if (is.data.frame(data)) {
|
||||
if (tryCatch(length(list(...)) > 0, error = function(e) TRUE)) {
|
||||
df <- pm_select(data, ...)
|
||||
out <- tryCatch(suppressWarnings(c(...)), error = function(e) NULL)
|
||||
if (!is.null(out)) {
|
||||
df <- data[, out, drop = FALSE]
|
||||
} else {
|
||||
df <- pm_select(data, ...)
|
||||
}
|
||||
} else {
|
||||
df <- data
|
||||
}
|
||||
@ -457,7 +462,11 @@ ab_validate <- function(x, property, ...) {
|
||||
|
||||
if (!all(x %in% AB_lookup[, property, drop = TRUE])) {
|
||||
x <- as.ab(x, ...)
|
||||
x <- AB_lookup[match(x, AB_lookup$ab), property, drop = TRUE]
|
||||
if (all(is.na(x)) && is.list(AB_lookup[, property, drop = TRUE])) {
|
||||
x <- rep(NA_character_, length(x))
|
||||
} else {
|
||||
x <- AB_lookup[match(x, AB_lookup$ab), property, drop = TRUE]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
22
R/data.R
22
R/data.R
@ -27,7 +27,7 @@
|
||||
#'
|
||||
#' Two data sets containing all antibiotics/antimycotics and antivirals. Use [as.ab()] or one of the [`ab_*`][ab_property()] functions to retrieve values from the [antibiotics] data set. Three identifiers are included in this data set: an antibiotic ID (`ab`, primarily used in this package) as defined by WHONET/EARS-Net, an ATC code (`atc`) as defined by the WHO, and a Compound ID (`cid`) as found in PubChem. Other properties in this data set are derived from one or more of these codes. Note that some drugs have multiple ATC codes.
|
||||
#' @format
|
||||
#' ## For the [antibiotics] data set: a [tibble[tibble::tibble] with `r nrow(antibiotics)` observations and `r ncol(antibiotics)` variables:
|
||||
#' ## For the [antibiotics] data set: a [tibble][tibble::tibble] with `r nrow(antibiotics)` observations and `r ncol(antibiotics)` variables:
|
||||
#' - `ab`\cr Antibiotic ID as used in this package (such as `AMC`), using the official EARS-Net (European Antimicrobial Resistance Surveillance Network) codes where available
|
||||
#' - `cid`\cr Compound ID as found in PubChem
|
||||
#' - `name`\cr Official name as used by WHONET/EARS-Net or the WHO
|
||||
@ -43,7 +43,7 @@
|
||||
#' - `iv_units`\cr Units of `iv_ddd`
|
||||
#' - `loinc`\cr All LOINC codes (Logical Observation Identifiers Names and Codes) associated with the name of the antimicrobial agent. Use [ab_loinc()] to retrieve them quickly, see [ab_property()].
|
||||
#'
|
||||
#' ## For the [antivirals] data set: a [tibble[tibble::tibble] with `r nrow(antivirals)` observations and `r ncol(antivirals)` variables:
|
||||
#' ## For the [antivirals] data set: a [tibble][tibble::tibble] with `r nrow(antivirals)` observations and `r ncol(antivirals)` variables:
|
||||
#' - `atc`\cr ATC codes (Anatomical Therapeutic Chemical) as defined by the WHOCC
|
||||
#' - `cid`\cr Compound ID as found in PubChem
|
||||
#' - `name`\cr Official name as used by WHONET/EARS-Net or the WHO
|
||||
@ -76,7 +76,7 @@
|
||||
#'
|
||||
#' A data set containing the full microbial taxonomy (**last updated: `r CATALOGUE_OF_LIFE$yearmonth_LPSN`**) of `r nr2char(length(unique(microorganisms$kingdom[!microorganisms$kingdom %like% "unknown"])))` kingdoms from the Catalogue of Life (CoL) and the List of Prokaryotic names with Standing in Nomenclature (LPSN). MO codes can be looked up using [as.mo()].
|
||||
#' @inheritSection catalogue_of_life Catalogue of Life
|
||||
#' @format A [tibble[tibble::tibble] with `r format(nrow(microorganisms), big.mark = ",")` observations and `r ncol(microorganisms)` variables:
|
||||
#' @format A [tibble][tibble::tibble] with `r format(nrow(microorganisms), big.mark = ",")` observations and `r ncol(microorganisms)` variables:
|
||||
#' - `mo`\cr ID of microorganism as used by this package
|
||||
#' - `fullname`\cr Full name, like `"Escherichia coli"`
|
||||
#' - `kingdom`, `phylum`, `class`, `order`, `family`, `genus`, `species`, `subspecies`\cr Taxonomic rank of the microorganism
|
||||
@ -134,7 +134,7 @@
|
||||
#'
|
||||
#' A data set containing old (previously valid or accepted) taxonomic names according to the Catalogue of Life. This data set is used internally by [as.mo()].
|
||||
#' @inheritSection catalogue_of_life Catalogue of Life
|
||||
#' @format A [tibble[tibble::tibble] with `r format(nrow(microorganisms.old), big.mark = ",")` observations and `r ncol(microorganisms.old)` variables:
|
||||
#' @format A [tibble][tibble::tibble] with `r format(nrow(microorganisms.old), big.mark = ",")` observations and `r ncol(microorganisms.old)` variables:
|
||||
#' - `fullname`\cr Old full taxonomic name of the microorganism
|
||||
#' - `fullname_new`\cr New full taxonomic name of the microorganism
|
||||
#' - `ref`\cr Author(s) and year of concerning scientific publication
|
||||
@ -152,7 +152,7 @@
|
||||
#' Data Set with `r format(nrow(microorganisms.codes), big.mark = ",")` Common Microorganism Codes
|
||||
#'
|
||||
#' A data set containing commonly used codes for microorganisms, from laboratory systems and WHONET. Define your own with [set_mo_source()]. They will all be searched when using [as.mo()] and consequently all the [`mo_*`][mo_property()] functions.
|
||||
#' @format A [tibble[tibble::tibble] with `r format(nrow(microorganisms.codes), big.mark = ",")` observations and `r ncol(microorganisms.codes)` variables:
|
||||
#' @format A [tibble][tibble::tibble] with `r format(nrow(microorganisms.codes), big.mark = ",")` observations and `r ncol(microorganisms.codes)` variables:
|
||||
#' - `code`\cr Commonly used code of a microorganism
|
||||
#' - `mo`\cr ID of the microorganism in the [microorganisms] data set
|
||||
#' @details
|
||||
@ -166,7 +166,7 @@
|
||||
#' Data Set with `r format(nrow(example_isolates), big.mark = ",")` Example Isolates
|
||||
#'
|
||||
#' A data set containing `r format(nrow(example_isolates), big.mark = ",")` microbial isolates with their full antibiograms. This data set contains randomised fictitious data, but reflects reality and can be used to practise AMR data analysis. For examples, please read [the tutorial on our website](https://msberends.github.io/AMR/articles/AMR.html).
|
||||
#' @format A [tibble[tibble::tibble] with `r format(nrow(example_isolates), big.mark = ",")` observations and `r ncol(example_isolates)` variables:
|
||||
#' @format A [tibble][tibble::tibble] with `r format(nrow(example_isolates), big.mark = ",")` observations and `r ncol(example_isolates)` variables:
|
||||
#' - `date`\cr Date of receipt at the laboratory
|
||||
#' - `patient`\cr ID of the patient
|
||||
#' - `age`\cr Age of the patient
|
||||
@ -183,7 +183,7 @@
|
||||
#' Data Set with Unclean Data
|
||||
#'
|
||||
#' A data set containing `r format(nrow(example_isolates_unclean), big.mark = ",")` microbial isolates that are not cleaned up and consequently not ready for AMR data analysis. This data set can be used for practice.
|
||||
#' @format A [tibble[tibble::tibble] with `r format(nrow(example_isolates_unclean), big.mark = ",")` observations and `r ncol(example_isolates_unclean)` variables:
|
||||
#' @format A [tibble][tibble::tibble] with `r format(nrow(example_isolates_unclean), big.mark = ",")` observations and `r ncol(example_isolates_unclean)` variables:
|
||||
#' - `patient_id`\cr ID of the patient
|
||||
#' - `date`\cr date of receipt at the laboratory
|
||||
#' - `hospital`\cr ID of the hospital, from A to C
|
||||
@ -198,7 +198,7 @@
|
||||
#' Data Set with `r format(nrow(WHONET), big.mark = ",")` Isolates - WHONET Example
|
||||
#'
|
||||
#' This example data set has the exact same structure as an export file from WHONET. Such files can be used with this package, as this example data set shows. The antibiotic results are from our [example_isolates] data set. All patient names are created using online surname generators and are only in place for practice purposes.
|
||||
#' @format A [tibble[tibble::tibble] with `r format(nrow(WHONET), big.mark = ",")` observations and `r ncol(WHONET)` variables:
|
||||
#' @format A [tibble][tibble::tibble] with `r format(nrow(WHONET), big.mark = ",")` observations and `r ncol(WHONET)` variables:
|
||||
#' - `Identification number`\cr ID of the sample
|
||||
#' - `Specimen number`\cr ID of the specimen
|
||||
#' - `Organism`\cr Name of the microorganism. Before analysis, you should transform this to a valid microbial class, using [as.mo()].
|
||||
@ -234,7 +234,7 @@
|
||||
#' Data Set for R/SI Interpretation
|
||||
#'
|
||||
#' Data set containing reference data to interpret MIC and disk diffusion to R/SI values, according to international guidelines. Currently implemented guidelines are EUCAST (`r min(as.integer(gsub("[^0-9]", "", subset(rsi_translation, guideline %like% "EUCAST")$guideline)))`-`r max(as.integer(gsub("[^0-9]", "", subset(rsi_translation, guideline %like% "EUCAST")$guideline)))`) and CLSI (`r min(as.integer(gsub("[^0-9]", "", subset(rsi_translation, guideline %like% "CLSI")$guideline)))`-`r max(as.integer(gsub("[^0-9]", "", subset(rsi_translation, guideline %like% "CLSI")$guideline)))`). Use [as.rsi()] to transform MICs or disks measurements to R/SI values.
|
||||
#' @format A [tibble[tibble::tibble] with `r format(nrow(rsi_translation), big.mark = ",")` observations and `r ncol(rsi_translation)` variables:
|
||||
#' @format A [tibble][tibble::tibble] with `r format(nrow(rsi_translation), big.mark = ",")` observations and `r ncol(rsi_translation)` variables:
|
||||
#' - `guideline`\cr Name of the guideline
|
||||
#' - `method`\cr Either `r vector_or(rsi_translation$method)`
|
||||
#' - `site`\cr Body site, e.g. "Oral" or "Respiratory"
|
||||
@ -258,7 +258,7 @@
|
||||
#' Data Set with Bacterial Intrinsic Resistance
|
||||
#'
|
||||
#' Data set containing defined intrinsic resistance by EUCAST of all bug-drug combinations.
|
||||
#' @format A [tibble[tibble::tibble] with `r format(nrow(intrinsic_resistant), big.mark = ",")` observations and `r ncol(intrinsic_resistant)` variables:
|
||||
#' @format A [tibble][tibble::tibble] with `r format(nrow(intrinsic_resistant), big.mark = ",")` observations and `r ncol(intrinsic_resistant)` variables:
|
||||
#' - `mo`\cr Microorganism ID
|
||||
#' - `ab`\cr Antibiotic ID
|
||||
#' @details
|
||||
@ -275,7 +275,7 @@
|
||||
#' Data Set with Treatment Dosages as Defined by EUCAST
|
||||
#'
|
||||
#' EUCAST breakpoints used in this package are based on the dosages in this data set. They can be retrieved with [eucast_dosage()].
|
||||
#' @format A [tibble[tibble::tibble] with `r format(nrow(dosage), big.mark = ",")` observations and `r ncol(dosage)` variables:
|
||||
#' @format A [tibble][tibble::tibble] with `r format(nrow(dosage), big.mark = ",")` observations and `r ncol(dosage)` variables:
|
||||
#' - `ab`\cr Antibiotic ID as used in this package (such as `AMC`), using the official EARS-Net (European Antimicrobial Resistance Surveillance Network) codes where available
|
||||
#' - `name`\cr Official name of the antimicrobial agent as used by WHONET/EARS-Net or the WHO
|
||||
#' - `type`\cr Type of the dosage, either `r vector_or(dosage$type)`
|
||||
|
@ -529,7 +529,7 @@ first_isolate <- function(x = NULL,
|
||||
}
|
||||
if (!is.null(col_icu)) {
|
||||
if (icu_exclude == TRUE) {
|
||||
message_("Excluding ", format(sum(!col_icu, na.rm = TRUE), big.mark = ","), " isolates from ICU.",
|
||||
message_("Excluding ", format(sum(col_icu, na.rm = TRUE), big.mark = ","), " isolates from ICU.",
|
||||
add_fn = font_black,
|
||||
as_note = FALSE
|
||||
)
|
||||
|
@ -30,7 +30,7 @@
|
||||
#' @param search_string a text to search `x` for, will be checked with [as.ab()] if this value is not a column in `x`
|
||||
#' @param verbose a [logical] to indicate whether additional info should be printed
|
||||
#' @param only_rsi_columns a [logical] to indicate whether only antibiotic columns must be detected that were transformed to class `<rsi>` (see [as.rsi()]) on beforehand (defaults to `FALSE`)
|
||||
#' @details You can look for an antibiotic (trade) name or abbreviation and it will search `x` and the [antibiotics] data set for any column containing a name or code of that antibiotic. **Longer columns names take precedence over shorter column names.**
|
||||
#' @details You can look for an antibiotic (trade) name or abbreviation and it will search `x` and the [antibiotics] data set for any column containing a name or code of that antibiotic.
|
||||
#' @return A column name of `x`, or `NULL` when no result is found.
|
||||
#' @export
|
||||
#' @examples
|
||||
@ -40,13 +40,10 @@
|
||||
#' )
|
||||
#'
|
||||
#' guess_ab_col(df, "amoxicillin")
|
||||
#' # [1] "amox"
|
||||
#' guess_ab_col(df, "J01AA07") # ATC code of tetracycline
|
||||
#' # [1] "tetr"
|
||||
#'
|
||||
#' guess_ab_col(df, "J01AA07", verbose = TRUE)
|
||||
#' # NOTE: Using column 'tetr' as input for J01AA07 (tetracycline).
|
||||
#' # [1] "tetr"
|
||||
#'
|
||||
#' # WHONET codes
|
||||
#' df <- data.frame(
|
||||
@ -54,19 +51,8 @@
|
||||
#' AMC_ED20 = "S"
|
||||
#' )
|
||||
#' guess_ab_col(df, "ampicillin")
|
||||
#' # [1] "AMP_ND10"
|
||||
#' guess_ab_col(df, "J01CR02")
|
||||
#' # [1] "AMC_ED20"
|
||||
#' guess_ab_col(df, as.ab("augmentin"))
|
||||
#' # [1] "AMC_ED20"
|
||||
#'
|
||||
#' # Longer names take precendence:
|
||||
#' df <- data.frame(
|
||||
#' AMP_ED2 = "S",
|
||||
#' AMP_ED20 = "S"
|
||||
#' )
|
||||
#' guess_ab_col(df, "ampicillin")
|
||||
#' # [1] "AMP_ED20"
|
||||
guess_ab_col <- function(x = NULL, search_string = NULL, verbose = FALSE, only_rsi_columns = FALSE) {
|
||||
meet_criteria(x, allow_class = "data.frame", allow_NULL = TRUE)
|
||||
meet_criteria(search_string, allow_class = "character", has_length = 1, allow_NULL = TRUE)
|
||||
|
163
R/mean_amr_distance.R
Normal file
163
R/mean_amr_distance.R
Normal file
@ -0,0 +1,163 @@
|
||||
# ==================================================================== #
|
||||
# TITLE #
|
||||
# Antimicrobial Resistance (AMR) Data Analysis for R #
|
||||
# #
|
||||
# SOURCE #
|
||||
# https://github.com/msberends/AMR #
|
||||
# #
|
||||
# LICENCE #
|
||||
# (c) 2018-2022 Berends MS, Luz CF et al. #
|
||||
# Developed at the University of Groningen, the Netherlands, in #
|
||||
# collaboration with non-profit organisations Certe Medical #
|
||||
# Diagnostics & Advice, and University Medical Center Groningen. #
|
||||
# #
|
||||
# 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 the full manual and a complete tutorial about #
|
||||
# how to conduct AMR data analysis: https://msberends.github.io/AMR/ #
|
||||
# ==================================================================== #
|
||||
|
||||
#' Mean AMR Distance
|
||||
#'
|
||||
#' This function calculates a normalised mean for antimicrobial resistance between multiple observations.
|
||||
#' @param x a vector of class [rsi][as.rsi()], [rsi][as.rsi()] or [rsi][as.rsi()], or a [data.frame] containing columns of any of these classes
|
||||
#' @param ... variables to select (supports tidy selection such as `column1:column4` and [`where(is.mic)`][tidyselect::language]), and can thus also be [antibiotic selectors][ab_selector()]
|
||||
#' @param combine_SI a [logical] to indicate whether all values of S and I must be merged into one, so the input only consists of S+I vs. R (susceptible vs. resistant), defaults to `TRUE`
|
||||
#' @details The mean AMR distance is a normalised numeric value to compare AMR test results and can help to identify similar isolates, without comparing antibiograms by hand. For common numeric data this distance is equal to [Z scores](https://en.wikipedia.org/wiki/Standard_score) (the number of standard deviations from the mean).
|
||||
#'
|
||||
#' MIC values (see [as.mic()]) are transformed with [log2()] first; their distance is calculated as `(log2(x) - mean(log2(x))) / sd(log2(x))`.
|
||||
#'
|
||||
#' R/SI values (see [as.rsi()]) are transformed using `"S"` = 1, `"I"` = 2, and `"R"` = 3. If `combine_SI` is `TRUE` (default), the `"I"` will be considered to be 1.
|
||||
#'
|
||||
#' For data sets, the mean AMR distance will be calculated per variable, after which the mean of all columns will returned per row (using [rowMeans()]), see *Examples*.
|
||||
#'
|
||||
#' Use [distance_from_row()] to subtract distances from the distance of one row, see *Examples*.
|
||||
#' @section Interpretation:
|
||||
#' Isolates with distances less than 0.01 difference from each other should be considered similar. Differences lower than 0.025 should be considered suspicious.
|
||||
#' @export
|
||||
#' @examples
|
||||
#' x <- random_mic(10)
|
||||
#' x
|
||||
#' mean_amr_distance(x)
|
||||
#'
|
||||
#' y <- data.frame(
|
||||
#' id = LETTERS[1:10],
|
||||
#' amox = random_mic(10, ab = "amox", mo = "Escherichia coli"),
|
||||
#' cipr = random_mic(10, ab = "cipr", mo = "Escherichia coli"),
|
||||
#' gent = random_mic(10, ab = "gent", mo = "Escherichia coli"),
|
||||
#' tobr = random_mic(10, ab = "tobr", mo = "Escherichia coli")
|
||||
#' )
|
||||
#' y
|
||||
#' mean_amr_distance(y)
|
||||
#' y$amr_distance <- mean_amr_distance(y, where(is.mic))
|
||||
#' y[order(y$amr_distance), ]
|
||||
#'
|
||||
#' if (require("dplyr")) {
|
||||
#' y %>%
|
||||
#' mutate(
|
||||
#' amr_distance = mean_amr_distance(., where(is.mic)),
|
||||
#' check_id_C = distance_from_row(amr_distance, id == "C")
|
||||
#' ) %>%
|
||||
#' arrange(check_id_C)
|
||||
#' }
|
||||
#' if (require("dplyr")) {
|
||||
#' # support for groups
|
||||
#' example_isolates %>%
|
||||
#' filter(mo_genus() == "Enterococcus" & mo_species() != "") %>%
|
||||
#' select(mo, TCY, carbapenems()) %>%
|
||||
#' group_by(mo) %>%
|
||||
#' mutate(d = mean_amr_distance(., where(is.rsi))) %>%
|
||||
#' arrange(mo, d)
|
||||
#' }
|
||||
mean_amr_distance <- function(x, ...) {
|
||||
UseMethod("mean_amr_distance")
|
||||
}
|
||||
|
||||
#' @rdname mean_amr_distance
|
||||
#' @export
|
||||
mean_amr_distance.default <- function(x, ...) {
|
||||
x <- as.double(x)
|
||||
(x - mean(x, na.rm = TRUE)) / stats::sd(x, na.rm = TRUE)
|
||||
}
|
||||
|
||||
#' @rdname mean_amr_distance
|
||||
#' @export
|
||||
mean_amr_distance.mic <- function(x, ...) {
|
||||
mean_amr_distance(log2(x))
|
||||
}
|
||||
|
||||
#' @rdname mean_amr_distance
|
||||
#' @export
|
||||
mean_amr_distance.disk <- function(x, ...) {
|
||||
mean_amr_distance(as.double(x))
|
||||
}
|
||||
|
||||
#' @rdname mean_amr_distance
|
||||
#' @export
|
||||
mean_amr_distance.rsi <- function(x, combine_SI = TRUE, ...) {
|
||||
meet_criteria(combine_SI, allow_class = "logical", has_length = 1, .call_depth = -1)
|
||||
if (isTRUE(combine_SI)) {
|
||||
x[x == "I"] <- "S"
|
||||
}
|
||||
mean_amr_distance(as.double(x))
|
||||
}
|
||||
|
||||
#' @rdname mean_amr_distance
|
||||
#' @export
|
||||
mean_amr_distance.data.frame <- function(x, ..., combine_SI = TRUE) {
|
||||
meet_criteria(combine_SI, allow_class = "logical", has_length = 1, .call_depth = -1)
|
||||
df <- x
|
||||
if (is_null_or_grouped_tbl(df)) {
|
||||
df <- get_current_data("x", -2)
|
||||
}
|
||||
if (tryCatch(length(list(...)) > 0, error = function(e) TRUE)) {
|
||||
out <- tryCatch(suppressWarnings(c(...)), error = function(e) NULL)
|
||||
if (!is.null(out)) {
|
||||
df <- df[, out, drop = FALSE]
|
||||
} else {
|
||||
df <- pm_select(df, ...)
|
||||
}
|
||||
}
|
||||
stop_if(ncol(df) < 2,
|
||||
"data set must contain at least two variables",
|
||||
call = -2
|
||||
)
|
||||
if (message_not_thrown_before("mean_amr_distance", "groups")) {
|
||||
message_("Calculating mean AMR distance based on columns ", vector_and(colnames(df)))
|
||||
}
|
||||
res <- vapply(
|
||||
FUN.VALUE = double(nrow(df)),
|
||||
df,
|
||||
mean_amr_distance,
|
||||
combine_SI = combine_SI
|
||||
)
|
||||
if (is.null(dim(res))) {
|
||||
if (all(is.na(res))) {
|
||||
return(NA_real_)
|
||||
} else {
|
||||
return(mean(res, na.rm = TRUE))
|
||||
}
|
||||
}
|
||||
res <- rowMeans(res, na.rm = TRUE)
|
||||
res[is.infinite(res)] <- 0
|
||||
res
|
||||
}
|
||||
|
||||
#' @rdname mean_amr_distance
|
||||
#' @param mean_distance the outcome of [mean_amr_distance()]
|
||||
#' @param row an index, such as a row number
|
||||
#' @export
|
||||
distance_from_row <- function(mean_distance, row) {
|
||||
meet_criteria(mean_distance, allow_class = c("double", "numeric"), is_finite = TRUE)
|
||||
meet_criteria(row, allow_class = c("logical", "double", "numeric"))
|
||||
if (is.logical(row)) {
|
||||
row <- which(row)
|
||||
}
|
||||
abs(mean_distance[row] - mean_distance)
|
||||
}
|
12
R/mo.R
12
R/mo.R
@ -204,12 +204,12 @@ as.mo <- function(x,
|
||||
))
|
||||
}
|
||||
|
||||
reference_df <- repair_reference_df(reference_df)
|
||||
if (!is.null(reference_df) &&
|
||||
check_validity_mo_source(reference_df) &&
|
||||
isFALSE(Becker) &&
|
||||
isFALSE(Lancefield) &&
|
||||
all(x %in% unlist(reference_df), na.rm = TRUE)) {
|
||||
reference_df <- repair_reference_df(reference_df)
|
||||
all(x %in% reference_df[, 1, drop = TRUE], na.rm = TRUE)) {
|
||||
suppressWarnings(
|
||||
y <- data.frame(x = x, stringsAsFactors = FALSE) %pm>%
|
||||
pm_left_join(reference_df, by = "x") %pm>%
|
||||
@ -221,6 +221,7 @@ as.mo <- function(x,
|
||||
y <- x
|
||||
} else {
|
||||
# will be checked for mo class in validation and uses exec_as.mo internally if necessary
|
||||
|
||||
y <- mo_validate(
|
||||
x = x, property = "mo",
|
||||
Becker = Becker, Lancefield = Lancefield,
|
||||
@ -420,7 +421,7 @@ exec_as.mo <- function(x,
|
||||
}
|
||||
|
||||
# all empty
|
||||
if (all(identical(trimws(x_input), "") | is.na(x_input) | length(x) == 0)) {
|
||||
if (all(identical(trimws(x_input), "") | is.na(x_input) | length(x) == 0, na.rm = TRUE)) {
|
||||
if (property == "mo") {
|
||||
return(set_clean_class(rep(NA_character_, length(x_input)),
|
||||
new_class = c("mo", "character")
|
||||
@ -428,7 +429,7 @@ exec_as.mo <- function(x,
|
||||
} else {
|
||||
return(rep(NA_character_, length(x_input)))
|
||||
}
|
||||
} else if (all(x %in% reference_df[, 1, drop = TRUE][[1]])) {
|
||||
} else if (all(x %in% reference_df[, 1, drop = TRUE], na.rm = TRUE)) {
|
||||
# all in reference df
|
||||
colnames(reference_df)[1] <- "x"
|
||||
suppressWarnings(
|
||||
@ -2357,6 +2358,9 @@ replace_ignore_pattern <- function(x, ignore_pattern) {
|
||||
}
|
||||
|
||||
repair_reference_df <- function(reference_df) {
|
||||
if (is.null(reference_df)) {
|
||||
return(NULL)
|
||||
}
|
||||
# has valid own reference_df
|
||||
reference_df <- reference_df %pm>%
|
||||
pm_filter(!is.na(mo))
|
||||
|
@ -26,7 +26,7 @@
|
||||
#' Calculate the Matching Score for Microorganisms
|
||||
#'
|
||||
#' This algorithm is used by [as.mo()] and all the [`mo_*`][mo_property()] functions to determine the most probable match of taxonomic records based on user input.
|
||||
#' @author Dr Matthijs Berends
|
||||
#' @author Dr. Matthijs Berends
|
||||
#' @param x Any user input value(s)
|
||||
#' @param n A full taxonomic name, that exists in [`microorganisms$fullname`][microorganisms]
|
||||
#' @section Matching Score for Microorganisms:
|
||||
|
4
R/plot.R
4
R/plot.R
@ -65,7 +65,11 @@
|
||||
#' \donttest{
|
||||
#' if (require("ggplot2")) {
|
||||
#' autoplot(some_mic_values)
|
||||
#' }
|
||||
#' if (require("ggplot2")) {
|
||||
#' autoplot(some_disk_values, mo = "Escherichia coli", ab = "cipro")
|
||||
#' }
|
||||
#' if (require("ggplot2")) {
|
||||
#' autoplot(some_rsi_values)
|
||||
#' }
|
||||
#' }
|
||||
|
189
R/rsi.R
189
R/rsi.R
@ -52,16 +52,16 @@
|
||||
#' your_data %>% mutate(across(where(is.mic), as.rsi)) # since dplyr 1.0.0
|
||||
#' ```
|
||||
#' * Operators like "<=" will be stripped before interpretation. When using `conserve_capped_values = TRUE`, an MIC value of e.g. ">2" will always return "R", even if the breakpoint according to the chosen guideline is ">=4". This is to prevent that capped values from raw laboratory data would not be treated conservatively. The default behaviour (`conserve_capped_values = FALSE`) considers ">2" to be lower than ">=4" and might in this case return "S" or "I".
|
||||
#'
|
||||
#' 3. For **interpreting disk diffusion diameters** according to EUCAST or CLSI. You must clean your disk zones first using [as.disk()], that also gives your columns the new data class [`disk`]. Also, be sure to have a column with microorganism names or codes. It will be found automatically, but can be set manually using the `mo` argument.
|
||||
#' * Using `dplyr`, R/SI interpretation can be done very easily with either:
|
||||
#' ```
|
||||
#' your_data %>% mutate_if(is.disk, as.rsi) # until dplyr 1.0.0
|
||||
#' your_data %>% mutate(across(where(is.disk), as.rsi)) # since dplyr 1.0.0
|
||||
#' ```
|
||||
#'
|
||||
#' 4. For **interpreting a complete data set**, with automatic determination of MIC values, disk diffusion diameters, microorganism names or codes, and antimicrobial test results. This is done very simply by running `as.rsi(your_data)`.
|
||||
#'
|
||||
#' For points 2, 3 and 4: Use [rsi_interpretation_history()] to retrieve a [data.frame] (or [tibble][tibble::tibble()] if the `tibble` package is installed) with all results of the last [as.rsi()] call.
|
||||
#'
|
||||
#' ## Supported Guidelines
|
||||
#'
|
||||
#' For interpreting MIC values as well as disk diffusion diameters, currently implemented guidelines are EUCAST (`r min(as.integer(gsub("[^0-9]", "", subset(rsi_translation, guideline %like% "EUCAST")$guideline)))`-`r max(as.integer(gsub("[^0-9]", "", subset(rsi_translation, guideline %like% "EUCAST")$guideline)))`) and CLSI (`r min(as.integer(gsub("[^0-9]", "", subset(rsi_translation, guideline %like% "CLSI")$guideline)))`-`r max(as.integer(gsub("[^0-9]", "", subset(rsi_translation, guideline %like% "CLSI")$guideline)))`).
|
||||
@ -110,11 +110,13 @@
|
||||
#' CIP = as.mic(0.256),
|
||||
#' GEN = as.disk(18),
|
||||
#' TOB = as.disk(16),
|
||||
#' NIT = as.mic(32),
|
||||
#' ERY = "R"
|
||||
#' )
|
||||
#' as.rsi(df)
|
||||
#'
|
||||
#' # return a 'logbook' about the results:
|
||||
#' rsi_interpretation_history()
|
||||
#'
|
||||
#' # for single values
|
||||
#' as.rsi(
|
||||
#' x = as.mic(2),
|
||||
@ -553,34 +555,36 @@ as.rsi.data.frame <- function(x,
|
||||
|
||||
for (i in seq_len(length(ab_cols))) {
|
||||
if (types[i] == "mic") {
|
||||
x[, ab_cols[i]] <- as.rsi(
|
||||
x = x %pm>%
|
||||
pm_pull(ab_cols[i]) %pm>%
|
||||
as.character() %pm>%
|
||||
as.mic(),
|
||||
mo = x_mo,
|
||||
ab = ab_cols[i],
|
||||
guideline = guideline,
|
||||
uti = uti,
|
||||
conserve_capped_values = conserve_capped_values,
|
||||
add_intrinsic_resistance = add_intrinsic_resistance,
|
||||
reference_data = reference_data,
|
||||
is_data.frame = TRUE
|
||||
)
|
||||
x[, ab_cols[i]] <- x %pm>%
|
||||
pm_pull(ab_cols[i]) %pm>%
|
||||
as.character() %pm>%
|
||||
as.mic() %pm>%
|
||||
as.rsi(
|
||||
mo = x_mo,
|
||||
mo.bak = x[, col_mo, drop = TRUE],
|
||||
ab = ab_cols[i],
|
||||
guideline = guideline,
|
||||
uti = uti,
|
||||
conserve_capped_values = conserve_capped_values,
|
||||
add_intrinsic_resistance = add_intrinsic_resistance,
|
||||
reference_data = reference_data,
|
||||
is_data.frame = TRUE
|
||||
)
|
||||
} else if (types[i] == "disk") {
|
||||
x[, ab_cols[i]] <- as.rsi(
|
||||
x = x %pm>%
|
||||
pm_pull(ab_cols[i]) %pm>%
|
||||
as.character() %pm>%
|
||||
as.disk(),
|
||||
mo = x_mo,
|
||||
ab = ab_cols[i],
|
||||
guideline = guideline,
|
||||
uti = uti,
|
||||
add_intrinsic_resistance = add_intrinsic_resistance,
|
||||
reference_data = reference_data,
|
||||
is_data.frame = TRUE
|
||||
)
|
||||
x[, ab_cols[i]] <- x %pm>%
|
||||
pm_pull(ab_cols[i]) %pm>%
|
||||
as.character() %pm>%
|
||||
as.disk() %pm>%
|
||||
as.rsi(
|
||||
mo = x_mo,
|
||||
mo.bak = x[, col_mo, drop = TRUE],
|
||||
ab = ab_cols[i],
|
||||
guideline = guideline,
|
||||
uti = uti,
|
||||
add_intrinsic_resistance = add_intrinsic_resistance,
|
||||
reference_data = reference_data,
|
||||
is_data.frame = TRUE
|
||||
)
|
||||
} else if (types[i] == "rsi") {
|
||||
show_message <- FALSE
|
||||
ab <- ab_cols[i]
|
||||
@ -647,14 +651,14 @@ as_rsi_method <- function(method_short,
|
||||
add_intrinsic_resistance,
|
||||
reference_data,
|
||||
...) {
|
||||
meet_criteria(x, allow_NA = TRUE)
|
||||
meet_criteria(mo, allow_class = c("mo", "character"), allow_NULL = TRUE)
|
||||
meet_criteria(ab, allow_class = c("ab", "character"))
|
||||
meet_criteria(guideline, allow_class = "character", has_length = 1)
|
||||
meet_criteria(uti, allow_class = "logical", has_length = c(1, length(x)))
|
||||
meet_criteria(conserve_capped_values, allow_class = "logical", has_length = 1)
|
||||
meet_criteria(add_intrinsic_resistance, allow_class = "logical", has_length = 1)
|
||||
meet_criteria(reference_data, allow_class = "data.frame")
|
||||
meet_criteria(x, allow_NA = TRUE, .call_depth = -2)
|
||||
meet_criteria(mo, allow_class = c("mo", "character"), allow_NULL = TRUE, .call_depth = -2)
|
||||
meet_criteria(ab, allow_class = c("ab", "character"), .call_depth = -2)
|
||||
meet_criteria(guideline, allow_class = "character", has_length = 1, .call_depth = -2)
|
||||
meet_criteria(uti, allow_class = "logical", has_length = c(1, length(x)), .call_depth = -2)
|
||||
meet_criteria(conserve_capped_values, allow_class = "logical", has_length = 1, .call_depth = -2)
|
||||
meet_criteria(add_intrinsic_resistance, allow_class = "logical", has_length = 1, .call_depth = -2)
|
||||
meet_criteria(reference_data, allow_class = "data.frame", .call_depth = -2)
|
||||
check_reference_data(reference_data)
|
||||
|
||||
# for dplyr's across()
|
||||
@ -701,31 +705,37 @@ as_rsi_method <- function(method_short,
|
||||
stop_("No unambiguous name was supplied about the antibiotic (argument `ab`). See ?as.rsi.", call = FALSE)
|
||||
}
|
||||
|
||||
ab_coerced <- suppressWarnings(as.ab(ab))
|
||||
mo_coerced <- suppressWarnings(as.mo(mo))
|
||||
ab.bak <- ab
|
||||
ab <- suppressWarnings(as.ab(ab))
|
||||
if (!is.null(list(...)$mo.bak)) {
|
||||
mo.bak <- list(...)$mo.bak
|
||||
} else {
|
||||
mo.bak <- mo
|
||||
mo <- suppressWarnings(as.mo(mo))
|
||||
}
|
||||
guideline_coerced <- get_guideline(guideline, reference_data)
|
||||
if (is.na(ab_coerced)) {
|
||||
message_("Returning NAs for unknown drug: '", font_bold(ab),
|
||||
if (is.na(ab)) {
|
||||
message_("Returning NAs for unknown drug: '", font_bold(ab.bak),
|
||||
"'. Rename this column to a drug name or code, and check the output with `as.ab()`.",
|
||||
add_fn = font_red,
|
||||
as_note = FALSE
|
||||
)
|
||||
return(as.rsi(rep(NA, length(x))))
|
||||
}
|
||||
if (length(mo_coerced) == 1) {
|
||||
mo_coerced <- rep(mo_coerced, length(x))
|
||||
if (length(mo) == 1) {
|
||||
mo <- rep(mo, length(x))
|
||||
}
|
||||
if (length(uti) == 1) {
|
||||
uti <- rep(uti, length(x))
|
||||
}
|
||||
|
||||
agent_formatted <- paste0("'", font_bold(ab), "'")
|
||||
agent_name <- ab_name(ab_coerced, tolower = TRUE, language = NULL)
|
||||
agent_formatted <- paste0("'", font_bold(ab.bak), "'")
|
||||
agent_name <- ab_name(ab, tolower = TRUE, language = NULL)
|
||||
if (generalise_antibiotic_name(ab) != generalise_antibiotic_name(agent_name)) {
|
||||
agent_formatted <- paste0(
|
||||
agent_formatted,
|
||||
" (", ifelse(ab == ab_coerced, "",
|
||||
paste0(ab_coerced, ", ")
|
||||
" (", ifelse(ab.bak == ab, "",
|
||||
paste0(ab, ", ")
|
||||
), agent_name, ")"
|
||||
)
|
||||
}
|
||||
@ -740,29 +750,9 @@ as_rsi_method <- function(method_short,
|
||||
appendLF = FALSE,
|
||||
as_note = FALSE
|
||||
)
|
||||
result <- exec_as.rsi(
|
||||
method = method_short,
|
||||
x = x,
|
||||
mo = mo_coerced,
|
||||
ab = ab_coerced,
|
||||
guideline = guideline_coerced,
|
||||
uti = uti,
|
||||
conserve_capped_values = conserve_capped_values,
|
||||
add_intrinsic_resistance = add_intrinsic_resistance,
|
||||
reference_data = reference_data
|
||||
) # exec_as.rsi will return message 'OK'
|
||||
result
|
||||
}
|
||||
|
||||
exec_as.rsi <- function(method,
|
||||
x,
|
||||
mo,
|
||||
ab,
|
||||
guideline,
|
||||
uti,
|
||||
conserve_capped_values,
|
||||
add_intrinsic_resistance,
|
||||
reference_data) {
|
||||
method <- method_short
|
||||
|
||||
metadata_mo <- get_mo_failures_uncertainties_renamed()
|
||||
|
||||
x_bak <- data.frame(x_mo = paste0(x, mo), stringsAsFactors = FALSE)
|
||||
@ -795,13 +785,6 @@ exec_as.rsi <- function(method,
|
||||
}
|
||||
mo_other <- as.mo(rep("UNKNOWN", length(mo)))
|
||||
|
||||
guideline_coerced <- get_guideline(guideline, reference_data)
|
||||
if (guideline_coerced != guideline) {
|
||||
if (message_not_thrown_before("as.rsi", "guideline")) {
|
||||
message_("Using guideline ", font_bold(guideline_coerced), " as input for `guideline`.")
|
||||
}
|
||||
}
|
||||
|
||||
new_rsi <- rep(NA_character_, length(x))
|
||||
ab_param <- ab
|
||||
|
||||
@ -868,7 +851,7 @@ exec_as.rsi <- function(method,
|
||||
lookup_other[i]
|
||||
))
|
||||
|
||||
if (any(get_record$uti == TRUE, na.rm = TRUE) && !any(uti == TRUE, na.rm = TRUE) && message_not_thrown_before("as.rsi", "uti", ab_param)) {
|
||||
if (any(nrow(get_record) == 1 && get_record$uti == TRUE, na.rm = TRUE) && !any(uti == TRUE, na.rm = TRUE) && message_not_thrown_before("as.rsi", "uti", ab_param)) {
|
||||
warning_("in `as.rsi()`: interpretation of ", font_bold(ab_name(ab_param, tolower = TRUE)), " is only available for (uncomplicated) urinary tract infections (UTI) for some microorganisms. Use argument `uti` to set which isolates are from urine. See ?as.rsi.")
|
||||
rise_warning <- TRUE
|
||||
}
|
||||
@ -913,6 +896,27 @@ exec_as.rsi <- function(method,
|
||||
TRUE ~ NA_character_
|
||||
)
|
||||
}
|
||||
|
||||
# write to verbose output
|
||||
pkg_env$rsi_interpretation_history <- rbind(
|
||||
pkg_env$rsi_interpretation_history,
|
||||
data.frame(
|
||||
datetime = Sys.time(),
|
||||
index = i,
|
||||
ab_input = ab.bak[1],
|
||||
ab_considered = ab[1],
|
||||
mo_input = mo.bak[1],
|
||||
mo_considered = mo[1],
|
||||
guideline = guideline_coerced,
|
||||
ref_table = get_record[, "ref_tbl", drop = TRUE],
|
||||
method = method,
|
||||
breakpoint_S = get_record[, "breakpoint_S", drop = TRUE],
|
||||
breakpoint_R = get_record[, "breakpoint_R", drop = TRUE],
|
||||
input = as.double(x[i]),
|
||||
interpretation = new_rsi[i],
|
||||
stringsAsFactors = FALSE
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@ -946,6 +950,35 @@ exec_as.rsi <- function(method,
|
||||
)
|
||||
}
|
||||
|
||||
#' @rdname as.rsi
|
||||
#' @param clean a [logical] to indicate whether previously stored results should be forgotten after returning the 'logbook' with results
|
||||
#' @export
|
||||
rsi_interpretation_history <- function(clean = FALSE) {
|
||||
meet_criteria(clean, allow_class = "logical", has_length = 1)
|
||||
|
||||
out.bak <- pkg_env$rsi_interpretation_history
|
||||
out <- out.bak
|
||||
if (NROW(out) == 0) {
|
||||
message_("No results to return. Run `as.rsi()` on MIC values or disk diffusion zones first to see a 'logbook' data set here.")
|
||||
return(NULL)
|
||||
}
|
||||
out$ab_considered <- as.ab(out$ab_considered)
|
||||
out$mo_considered <- as.mo(out$mo_considered)
|
||||
out$interpretation <- as.rsi(out$interpretation)
|
||||
# keep stored for next use
|
||||
if (isTRUE(clean)) {
|
||||
pkg_env$rsi_interpretation_history <- pkg_env$rsi_interpretation_history[0, , drop = FALSE]
|
||||
} else {
|
||||
pkg_env$rsi_interpretation_history <- out.bak
|
||||
}
|
||||
|
||||
if (pkg_is_available("tibble", also_load = FALSE)) {
|
||||
import_fn("as_tibble", "tibble")(out)
|
||||
} else {
|
||||
out
|
||||
}
|
||||
}
|
||||
|
||||
# will be exported using s3_register() in R/zzz.R
|
||||
pillar_shaft.rsi <- function(x, ...) {
|
||||
out <- trimws(format(x))
|
||||
|
BIN
R/sysdata.rda
BIN
R/sysdata.rda
Binary file not shown.
12
R/vctrs.R
12
R/vctrs.R
@ -84,3 +84,15 @@ vec_ptype2.disk.integer <- function(x, y, ...) {
|
||||
vec_cast.integer.disk <- function(x, to, ...) {
|
||||
unclass(x)
|
||||
}
|
||||
|
||||
# S3: mic
|
||||
vec_cast.character.mic <- function(x, to, ...) {
|
||||
as.character(x)
|
||||
}
|
||||
vec_cast.double.mic <- function(x, to, ...) {
|
||||
# this calls as.double.mic()
|
||||
as.double(x)
|
||||
}
|
||||
vec_math.mic <- function(.fn, x, ...) {
|
||||
.fn(as.double(x), ...)
|
||||
}
|
||||
|
19
R/zzz.R
19
R/zzz.R
@ -33,6 +33,22 @@ pkg_env$mo_field_abbreviations <- c(
|
||||
"PRSP", "STEC", "UPEC", "VISA", "VISP", "VRE",
|
||||
"VRSA", "VRSP"
|
||||
)
|
||||
pkg_env$rsi_interpretation_history <- data.frame(
|
||||
datetime = Sys.time()[0],
|
||||
index = integer(0),
|
||||
ab_input = character(0),
|
||||
ab_considered = character(0),
|
||||
mo_input = character(0),
|
||||
mo_considered = character(0),
|
||||
guideline = character(0),
|
||||
ref_table = character(0),
|
||||
method = character(0),
|
||||
breakpoint_S = double(0),
|
||||
breakpoint_R = double(0),
|
||||
input = double(0),
|
||||
interpretation = character(0),
|
||||
stringsAsFactors = FALSE
|
||||
)
|
||||
|
||||
# determine info icon for messages
|
||||
utf8_supported <- isTRUE(base::l10n_info()$`UTF-8`)
|
||||
@ -96,6 +112,9 @@ if (utf8_supported && !is_latex) {
|
||||
s3_register("vctrs::vec_ptype2", "disk.integer")
|
||||
s3_register("vctrs::vec_ptype2", "integer.disk")
|
||||
s3_register("vctrs::vec_cast", "integer.disk")
|
||||
s3_register("vctrs::vec_cast", "character.mic")
|
||||
s3_register("vctrs::vec_cast", "double.mic")
|
||||
s3_register("vctrs::vec_math", "mic")
|
||||
|
||||
# if mo source exists, fire it up (see mo_source())
|
||||
try(
|
||||
|
@ -54,7 +54,7 @@ footer:
|
||||
right: [logo]
|
||||
components:
|
||||
devtext: '<code>AMR</code> (for R). Developed at the <a target="_blank" href="https://www.rug.nl">University of Groningen</a> in collaboration with non-profit organisations<br><a target="_blank" href="https://www.certe.nl">Certe Medical Diagnostics and Advice Foundation</a> and <a target="_blank" href="https://www.umcg.nl">University Medical Center Groningen</a>.'
|
||||
logo: '<a target="_blank" href="https://www.rug.nl"><img src="https://github.com/msberends/AMR/raw/main/pkgdown/logos/logo_rug.png" style="max-width: 200px;"></a>'
|
||||
logo: '<a target="_blank" href="https://www.rug.nl"><img src="https://github.com/msberends/AMR/raw/main/pkgdown/logos/logo_rug.svg" style="max-width: 200px;"></a>'
|
||||
|
||||
home:
|
||||
sidebar:
|
||||
@ -168,6 +168,7 @@ reference:
|
||||
- "`ggplot_rsi`"
|
||||
- "`bug_drug_combinations`"
|
||||
- "`antibiotic_class_selectors`"
|
||||
- "`mean_amr_distance`"
|
||||
- "`resistance_predict`"
|
||||
- "`guess_ab_col`"
|
||||
|
||||
|
@ -26,7 +26,6 @@
|
||||
# some old R instances have trouble installing tinytest, so we ship it too
|
||||
install.packages("data-raw/tinytest_1.3.1.tar.gz", dependencies = c("Depends", "Imports", "LinkingTo"))
|
||||
install.packages(getwd(), repos = NULL, type = "source")
|
||||
# install.packages("data-raw/AMR_latest.tar.gz", dependencies = FALSE)
|
||||
|
||||
pkg_suggests <- gsub(
|
||||
"[^a-zA-Z0-9]+", "",
|
||||
|
@ -29,7 +29,7 @@
|
||||
library(dplyr, warn.conflicts = FALSE)
|
||||
devtools::load_all(quiet = TRUE)
|
||||
|
||||
suppressMessages(set_AMR_locale("en"))
|
||||
suppressMessages(set_AMR_locale("English"))
|
||||
|
||||
old_globalenv <- ls(envir = globalenv())
|
||||
|
||||
@ -473,6 +473,11 @@ rm(list = current_globalenv[!current_globalenv %in% old_globalenv])
|
||||
rm(current_globalenv)
|
||||
|
||||
devtools::load_all(quiet = TRUE)
|
||||
suppressMessages(set_AMR_locale("English"))
|
||||
|
||||
# Update URLs -------------------------------------------------------------
|
||||
usethis::ui_info("Checking URLs for redirects")
|
||||
invisible(capture.output(urlchecker::url_update()))
|
||||
|
||||
|
||||
# Document pkg ------------------------------------------------------------
|
||||
@ -495,3 +500,4 @@ invisible(capture.output(styler::style_dir(
|
||||
|
||||
# Finished ----------------------------------------------------------------
|
||||
usethis::ui_done("All done")
|
||||
suppressMessages(reset_AMR_locale())
|
||||
|
Binary file not shown.
Binary file not shown.
@ -1 +1 @@
|
||||
19af89838b60bc8549d4474609629e8d
|
||||
b57c9cc7380a233a2616a80e8e904a81
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,6 +1,6 @@
|
||||
pattern regular_expr case_sensitive affect_ab_name affect_mo_name zh da nl fr de el it ja pl pt ru es sv tr uk
|
||||
language name English FALSE FALSE FALSE FALSE Chinese Danish Dutch French German Greek Italian Japanese Polish Portuguese Russian Spanish Swedish Turkish Ukrainian
|
||||
language name FALSE FALSE FALSE FALSE 汉语 Dansk Nederlands Français Deutsch Ελληνικά Italiano 日本語 Polski Português Русский Español Svenska Türkçe украї́нська
|
||||
language name FALSE FALSE FALSE FALSE 汉语 Dansk Nederlands Français Deutsch Ελληνικά Italiano 日本語 Polski Português Русский Español Svenska Türkçe Українська
|
||||
Coagulase-negative Staphylococcus TRUE TRUE FALSE TRUE 凝固酶阴性葡萄球菌 Koagulase-negative stafylokokker Coagulase-negatieve Staphylococcus Staphylococcus à coagulase négative Koagulase-negative Staphylococcus Σταφυλόκοκκος με αρνητική πηκτικότητα Staphylococcus negativo coagulasi コアグラーゼ陰性ブドウ球菌 Staphylococcus koagulazoujemny Staphylococcus coagulase negativo Коагулазоотрицательный стафилококк Staphylococcus coagulasa negativo Koagulasnegativa stafylokocker Koagülaz-negatif Stafilokok Коагулазонегативний стафілокок
|
||||
Coagulase-positive Staphylococcus TRUE TRUE FALSE TRUE 凝固酶阳性葡萄球菌 Koagulase-positive stafylokokker Coagulase-positieve Staphylococcus Staphylococcus à coagulase positif Koagulase-positive Staphylococcus Σταφυλόκοκκος θετικός στην πήξη Staphylococcus positivo coagulasi コアグラーゼ陽性ブドウ球菌 Staphylococcus koagulazo-dodatni Staphylococcus coagulase positivo Коагулазоположительный стафилококк Staphylococcus coagulasa positivo Koagulaspositiva stafylokocker Koagülaz-pozitif Stafilokok Коагулазопозитивний стафілокок
|
||||
Beta-haemolytic Streptococcus TRUE TRUE FALSE TRUE β-溶血性链球菌 Beta-haemolytiske streptokokker Beta-hemolytische Streptococcus Streptococcus Bêta-hémolytique Beta-hämolytischer Streptococcus Β-αιμολυτικός στρεπτόκοκκος Streptococcus Beta-emolitico ベータ溶血性レンサ球菌 Streptococcus beta-hemolityczny Streptococcus Beta-hemolítico Бета-гемолитический стрептококк Streptococcus Beta-hemolítico Beta-hemolytiska streptokocker Beta-hemolitik Streptokok Бета-гемолітичний стрептокок
|
||||
@ -269,4 +269,4 @@ Glycopeptides FALSE TRUE TRUE FALSE 糖肽类药物 Glykopeptider Glycopeptiden
|
||||
Macrolides/lincosamides FALSE TRUE TRUE FALSE 大环内酯类/林可酰胺类 Makrolider/lincosamider Macroliden/lincosamiden Macrolides/lincosamides Makrolide/Linkosamide Μακρολίδια/λινκοσαμίδια Macrolidi/lincosamidi ポリミキシン Makrolidy/linkozamidy Macrolides/lincosamidas Макролиды/линкозамиды Macrólidos/lincosamidas Makrolider/linkosamider Makrolidler/linkozamidler Макроліди/лінкозаміди
|
||||
Other antibacterials FALSE TRUE TRUE FALSE 其他抗菌剂 Andre antibakterielle stoffer Overige antibiotica Autres antibactériens Andere Antibiotika Άλλα αντιβακτηριακά Altri antibatterici キノロン Inne środki przeciwbakteryjne Outros antibacterianos Другие антибактериальные препараты Otros antibacterianos Andra antibakteriella medel Diğer antibakteriyeller Інші антибактеріальні засоби
|
||||
Polymyxins FALSE TRUE TRUE FALSE 多粘菌素类 Polymyxiner Polymyxines Polymyxines Polymyxine Πολυμυξίνες Polimixine ポリミキシン Polimyksyny Polimixinas Полимиксины Polimixinas Polymyxiner Polimiksinler Поліміксини
|
||||
Quinolones FALSE TRUE TRUE FALSE 喹诺酮类 Kinoloner Quinolonen Quinolones Quinolone Κινολόνες Chinoloni キノロン Quinolony Quinolones Хинолоны Quinolonas Kinoloner Kinolonlar Хінолони
|
||||
Quinolones FALSE TRUE TRUE FALSE 喹诺酮类 Kinoloner Quinolonen Quinolones Quinolone Κινολόνες Chinoloni キノロン Quinolony Quinolones Хинолоны Quinolonas Kinoloner Kinolonlar Хінолони
|
||||
|
|
Binary file not shown.
Binary file not shown.
10
index.md
10
index.md
@ -175,11 +175,11 @@ To find out how to conduct AMR data analysis, please [continue reading here to g
|
||||
The development of this package is part of, related to, or made possible by:
|
||||
|
||||
<div align="center">
|
||||
<a href="https://www.rug.nl" title="University of Groningen"><img src="./logo_rug.png" class="partner_logo"></a>
|
||||
<a href="https://www.umcg.nl" title="University Medical Center Groningen"><img src="./logo_umcg.png" class="partner_logo"></a>
|
||||
<a href="https://www.certe.nl" title="Certe Medical Diagnostics and Advice Foundation"><img src="./logo_certe.png" class="partner_logo"></a>
|
||||
<a href="https://www.deutschland-nederland.eu" title="EurHealth-1-Health"><img src="./logo_eh1h.png" class="partner_logo"></a>
|
||||
<a href="https://www.deutschland-nederland.eu" title="INTERREG"><img src="./logo_interreg.png" class="partner_logo"></a>
|
||||
<a href="https://www.rug.nl" title="University of Groningen"><img src="./logo_rug.svg" style="max-width: 200px;"></a>
|
||||
<a href="https://www.umcg.nl" title="University Medical Center Groningen"><img src="./logo_umcg.png" style="max-width: 200px;"></a>
|
||||
<a href="https://www.certe.nl" title="Certe Medical Diagnostics and Advice Foundation"><img src="./logo_certe.png" style="max-width: 200px;"></a>
|
||||
<a href="https://www.deutschland-nederland.eu" title="EurHealth-1-Health"><img src="./logo_eh1h.png" style="max-width: 200px;"></a>
|
||||
<a href="https://www.deutschland-nederland.eu" title="INTERREG"><img src="./logo_interreg.png" style="max-width: 200px;"></a>
|
||||
</div>
|
||||
|
||||
### Copyright
|
||||
|
@ -47,7 +47,7 @@ if (AMR:::pkg_is_available("dplyr", min_version = "1.0.0")) {
|
||||
expect_warning(AMR:::get_column_abx(rename(example_isolates, thisone = AMX), amox = "thisone", tmp = "thisone", verbose = FALSE))
|
||||
}
|
||||
|
||||
# we rely on "grouped_tbl" being a class of grouped tibbles, so implement a test that checks for this:
|
||||
# we rely on "grouped_tbl" being a class of grouped tibbles, so run a test that checks for this:
|
||||
if (AMR:::pkg_is_available("dplyr", min_version = "1.0.0")) {
|
||||
expect_true(AMR:::is_null_or_grouped_tbl(example_isolates %>% group_by(ward)))
|
||||
}
|
||||
|
@ -68,15 +68,15 @@ expect_true(ab_url("AMX") %like% "whocc.no")
|
||||
expect_warning(ab_url("ASP"))
|
||||
|
||||
expect_identical(
|
||||
colnames(set_ab_names(example_isolates[, 20:25])),
|
||||
colnames(set_ab_names(example_isolates[, 17:22])),
|
||||
c("cefoxitin", "cefotaxime", "ceftazidime", "ceftriaxone", "gentamicin", "tobramycin")
|
||||
)
|
||||
expect_identical(
|
||||
colnames(set_ab_names(example_isolates[, 20:25], language = "nl", snake_case = FALSE)),
|
||||
colnames(set_ab_names(example_isolates[, 17:22], language = "nl", snake_case = FALSE)),
|
||||
c("Cefoxitine", "Cefotaxim", "Ceftazidim", "Ceftriaxon", "Gentamicine", "Tobramycine")
|
||||
)
|
||||
expect_identical(
|
||||
colnames(set_ab_names(example_isolates[, 20:25], property = "atc")),
|
||||
colnames(set_ab_names(example_isolates[, 17:22], property = "atc")),
|
||||
c("J01DC01", "J01DD01", "J01DD02", "J01DD04", "J01GB03", "J01GB01")
|
||||
)
|
||||
|
||||
|
@ -79,7 +79,7 @@ if (AMR:::pkg_is_available("dplyr", min_version = "1.0.0")) {
|
||||
combination = count_susceptible(CIP, GEN)
|
||||
) %>%
|
||||
pull(combination),
|
||||
c(253, 465, 192, 558)
|
||||
c(946, 428, 94)
|
||||
)
|
||||
|
||||
# count_df
|
||||
|
@ -53,12 +53,13 @@ expect_false(any(is.na(as.disk(rsi_translation[which(rsi_translation$method == "
|
||||
# antibiotic names must always be coercible to their original AB code
|
||||
expect_identical(as.ab(antibiotics$name), antibiotics$ab)
|
||||
|
||||
# there should be no diacritics (i.e. non ASCII) characters in the datasets (CRAN policy)
|
||||
datasets <- data(package = "AMR", envir = asNamespace("AMR"))$results[, "Item", drop = TRUE]
|
||||
for (i in seq_len(length(datasets))) {
|
||||
dataset <- get(datasets[i], envir = asNamespace("AMR"))
|
||||
expect_identical(class(dataset), "data.frame")
|
||||
expect_identical(AMR:::dataset_UTF8_to_ASCII(dataset), dataset, info = datasets[i])
|
||||
if (AMR:::pkg_is_available("tibble", also_load = FALSE)) {
|
||||
# there should be no diacritics (i.e. non ASCII) characters in the datasets (CRAN policy)
|
||||
datasets <- data(package = "AMR", envir = asNamespace("AMR"))$results[, "Item", drop = TRUE]
|
||||
for (i in seq_len(length(datasets))) {
|
||||
dataset <- get(datasets[i], envir = asNamespace("AMR"))
|
||||
expect_identical(AMR:::dataset_UTF8_to_ASCII(dataset), dataset, info = datasets[i])
|
||||
}
|
||||
}
|
||||
|
||||
df <- AMR:::MO_lookup
|
||||
|
@ -75,7 +75,7 @@ expect_equal(
|
||||
),
|
||||
na.rm = TRUE
|
||||
),
|
||||
941
|
||||
942
|
||||
)
|
||||
|
||||
# set 1500 random observations to be of specimen type 'Urine'
|
||||
@ -160,7 +160,7 @@ if (AMR:::pkg_is_available("dplyr", min_version = "1.0.0")) {
|
||||
|
||||
# support for WHONET
|
||||
expect_message(example_isolates %>%
|
||||
select(-patient_id) %>%
|
||||
select(-patient) %>%
|
||||
mutate(
|
||||
`First name` = "test",
|
||||
`Last name` = "test",
|
||||
|
59
inst/tinytest/test-mean_amr_distance.R
Normal file
59
inst/tinytest/test-mean_amr_distance.R
Normal file
@ -0,0 +1,59 @@
|
||||
# ==================================================================== #
|
||||
# TITLE #
|
||||
# Antimicrobial Resistance (AMR) Data Analysis for R #
|
||||
# #
|
||||
# SOURCE #
|
||||
# https://github.com/msberends/AMR #
|
||||
# #
|
||||
# LICENCE #
|
||||
# (c) 2018-2022 Berends MS, Luz CF et al. #
|
||||
# Developed at the University of Groningen, the Netherlands, in #
|
||||
# collaboration with non-profit organisations Certe Medical #
|
||||
# Diagnostics & Advice, and University Medical Center Groningen. #
|
||||
# #
|
||||
# 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 the full manual and a complete tutorial about #
|
||||
# how to conduct AMR data analysis: https://msberends.github.io/AMR/ #
|
||||
# ==================================================================== #
|
||||
|
||||
vctr_disk <- as.disk(c(20:25))
|
||||
vctr_mic <- as.mic(2^c(0:5))
|
||||
vctr_rsi <- as.rsi(c("S", "S", "I", "I", "R", "R"))
|
||||
|
||||
expect_identical(
|
||||
mean_amr_distance(vctr_disk),
|
||||
(as.double(vctr_disk) - mean(as.double(vctr_disk))) / sd(as.double(vctr_disk))
|
||||
)
|
||||
|
||||
expect_identical(
|
||||
mean_amr_distance(vctr_mic),
|
||||
(log2(vctr_mic) - mean(log2(vctr_mic))) / sd(log2(vctr_mic))
|
||||
)
|
||||
|
||||
expect_identical(
|
||||
mean_amr_distance(vctr_rsi, combine_SI = FALSE),
|
||||
(c(1, 1, 2, 2, 3, 3) - mean(c(1, 1, 2, 2, 3, 3))) / sd(c(1, 1, 2, 2, 3, 3))
|
||||
)
|
||||
expect_identical(
|
||||
mean_amr_distance(vctr_rsi, combine_SI = TRUE),
|
||||
(c(1, 1, 1, 1, 3, 3) - mean(c(1, 1, 1, 1, 3, 3))) / sd(c(1, 1, 1, 1, 3, 3))
|
||||
)
|
||||
|
||||
expect_equal(
|
||||
mean_amr_distance(data.frame(vctr_mic, vctr_rsi, vctr_disk)),
|
||||
c(-1.10603655, -0.74968823, -0.39333990, -0.03699158, 0.96485397, 1.32120229),
|
||||
tolerance = 0.00001
|
||||
)
|
||||
|
||||
expect_equal(
|
||||
mean_amr_distance(data.frame(vctr_mic, vctr_rsi, vctr_disk), 2:3),
|
||||
c(-0.9909017, -0.7236405, -0.4563792, -0.1891180, 1.0463891, 1.3136503),
|
||||
tolerance = 0.00001
|
||||
)
|
@ -84,7 +84,7 @@ if (AMR:::pkg_is_available("dplyr", min_version = "1.0.0")) {
|
||||
combination_n = n_rsi(CIP, GEN)
|
||||
) %>%
|
||||
pull(combination_n),
|
||||
c(305, 617, 241, 711)
|
||||
c(1181, 577, 116)
|
||||
)
|
||||
|
||||
# proportion_df
|
||||
|
@ -123,6 +123,10 @@ expect_equal(
|
||||
c("S", "S", "I", "R", "R")
|
||||
)
|
||||
|
||||
expect_true(is.data.frame(rsi_interpretation_history(clean = FALSE)))
|
||||
expect_true(is.data.frame(rsi_interpretation_history(clean = TRUE)))
|
||||
expect_true(is.null(rsi_interpretation_history()))
|
||||
|
||||
# cutoffs at MIC = 8
|
||||
expect_equal(
|
||||
as.rsi(as.mic(2), "E. coli", "ampicillin", guideline = "EUCAST 2020"),
|
||||
|
@ -5,7 +5,7 @@
|
||||
\alias{WHONET}
|
||||
\title{Data Set with 500 Isolates - WHONET Example}
|
||||
\format{
|
||||
A [tibble\link[tibble:tibble]{tibble::tibble} with 500 observations and 53 variables:
|
||||
A \link[tibble:tibble]{tibble} with 500 observations and 53 variables:
|
||||
\itemize{
|
||||
\item \verb{Identification number}\cr ID of the sample
|
||||
\item \verb{Specimen number}\cr ID of the specimen
|
||||
|
@ -6,7 +6,7 @@
|
||||
\alias{antivirals}
|
||||
\title{Data Sets with 566 Antimicrobial Drugs}
|
||||
\format{
|
||||
\subsection{For the \link{antibiotics} data set: a [tibble\link[tibble:tibble]{tibble::tibble} with 464 observations and 14 variables:}{
|
||||
\subsection{For the \link{antibiotics} data set: a \link[tibble:tibble]{tibble} with 464 observations and 14 variables:}{
|
||||
\itemize{
|
||||
\item \code{ab}\cr Antibiotic ID as used in this package (such as \code{AMC}), using the official EARS-Net (European Antimicrobial Resistance Surveillance Network) codes where available
|
||||
\item \code{cid}\cr Compound ID as found in PubChem
|
||||
@ -25,7 +25,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
\subsection{For the \link{antivirals} data set: a [tibble\link[tibble:tibble]{tibble::tibble} with 102 observations and 9 variables:}{
|
||||
\subsection{For the \link{antivirals} data set: a \link[tibble:tibble]{tibble} with 102 observations and 9 variables:}{
|
||||
\itemize{
|
||||
\item \code{atc}\cr ATC codes (Anatomical Therapeutic Chemical) as defined by the WHOCC
|
||||
\item \code{cid}\cr Compound ID as found in PubChem
|
||||
|
@ -10,6 +10,7 @@
|
||||
\alias{as.rsi.mic}
|
||||
\alias{as.rsi.disk}
|
||||
\alias{as.rsi.data.frame}
|
||||
\alias{rsi_interpretation_history}
|
||||
\title{Interpret MIC and Disk Values, or Clean Raw R/SI Data}
|
||||
\format{
|
||||
An object of class \code{rsi} (inherits from \code{ordered}, \code{factor}) of length 1.
|
||||
@ -56,6 +57,8 @@ is.rsi.eligible(x, threshold = 0.05)
|
||||
add_intrinsic_resistance = FALSE,
|
||||
reference_data = AMR::rsi_translation
|
||||
)
|
||||
|
||||
rsi_interpretation_history(clean = FALSE)
|
||||
}
|
||||
\arguments{
|
||||
\item{x}{vector of values (for class \code{\link{mic}}: MIC values in mg/L, for class \code{\link{disk}}: a disk diffusion radius in millimetres)}
|
||||
@ -79,6 +82,8 @@ is.rsi.eligible(x, threshold = 0.05)
|
||||
\item{reference_data}{a \link{data.frame} to be used for interpretation, which defaults to the \link{rsi_translation} data set. Changing this argument allows for using own interpretation guidelines. This argument must contain a data set that is equal in structure to the \link{rsi_translation} data set (same column names and column types). Please note that the \code{guideline} argument will be ignored when \code{reference_data} is manually set.}
|
||||
|
||||
\item{col_mo}{column name of the IDs of the microorganisms (see \code{\link[=as.mo]{as.mo()}}), defaults to the first column of class \code{\link{mo}}. Values will be coerced using \code{\link[=as.mo]{as.mo()}}.}
|
||||
|
||||
\item{clean}{a \link{logical} to indicate whether previously stored results should be forgotten after returning the 'logbook' with results}
|
||||
}
|
||||
\value{
|
||||
Ordered \link{factor} with new class \verb{<rsi>}
|
||||
@ -111,6 +116,8 @@ your_data \%>\% mutate(across(where(is.disk), as.rsi)) # since dplyr 1.0.0
|
||||
}
|
||||
\item For \strong{interpreting a complete data set}, with automatic determination of MIC values, disk diffusion diameters, microorganism names or codes, and antimicrobial test results. This is done very simply by running \code{as.rsi(your_data)}.
|
||||
}
|
||||
|
||||
For points 2, 3 and 4: Use \code{\link[=rsi_interpretation_history]{rsi_interpretation_history()}} to retrieve a \link{data.frame} (or \link[tibble:tibble]{tibble} if the \code{tibble} package is installed) with all results of the last \code{\link[=as.rsi]{as.rsi()}} call.
|
||||
}
|
||||
|
||||
\subsection{Supported Guidelines}{
|
||||
@ -172,11 +179,13 @@ df <- data.frame(
|
||||
CIP = as.mic(0.256),
|
||||
GEN = as.disk(18),
|
||||
TOB = as.disk(16),
|
||||
NIT = as.mic(32),
|
||||
ERY = "R"
|
||||
)
|
||||
as.rsi(df)
|
||||
|
||||
# return a 'logbook' about the results:
|
||||
rsi_interpretation_history()
|
||||
|
||||
# for single values
|
||||
as.rsi(
|
||||
x = as.mic(2),
|
||||
|
@ -24,87 +24,43 @@ Some organisations have their own adoption of EUCAST rules. This function can be
|
||||
|
||||
If you are familiar with the \code{\link[dplyr:case_when]{case_when()}} function of the \code{dplyr} package, you will recognise the input method to set your own rules. Rules must be set using what \R considers to be the 'formula notation'. The rule itself is written \emph{before} the tilde (\code{~}) and the consequence of the rule is written \emph{after} the tilde:
|
||||
|
||||
\if{html}{\out{<div class="sourceCode r">}}\preformatted{x <- custom_eucast_rules(TZP == "S" ~ aminopenicillins == "S",
|
||||
\if{html}{\out{<div class="sourceCode {r}">}}\preformatted{x <- custom_eucast_rules(TZP == "S" ~ aminopenicillins == "S",
|
||||
TZP == "R" ~ aminopenicillins == "R")
|
||||
}\if{html}{\out{</div>}}
|
||||
|
||||
These are two custom EUCAST rules: if TZP (piperacillin/tazobactam) is "S", all aminopenicillins (ampicillin and amoxicillin) must be made "S", and if TZP is "R", aminopenicillins must be made "R". These rules can also be printed to the console, so it is immediately clear how they work:
|
||||
|
||||
\if{html}{\out{<div class="sourceCode r">}}\preformatted{x
|
||||
#> A set of custom EUCAST rules:
|
||||
#>
|
||||
#> 1. If TZP is "S" then set to S :
|
||||
#> amoxicillin (AMX), ampicillin (AMP)
|
||||
#>
|
||||
#> 2. If TZP is "R" then set to R :
|
||||
#> amoxicillin (AMX), ampicillin (AMP)
|
||||
\if{html}{\out{<div class="sourceCode {r}">}}\preformatted{x
|
||||
}\if{html}{\out{</div>}}
|
||||
|
||||
The rules (the part \emph{before} the tilde, in above example \code{TZP == "S"} and \code{TZP == "R"}) must be evaluable in your data set: it should be able to run as a filter in your data set without errors. This means for the above example that the column \code{TZP} must exist. We will create a sample data set and test the rules set:
|
||||
|
||||
\if{html}{\out{<div class="sourceCode r">}}\preformatted{df <- data.frame(mo = c("Escherichia coli", "Klebsiella pneumoniae"),
|
||||
\if{html}{\out{<div class="sourceCode {r}">}}\preformatted{df <- data.frame(mo = c("Escherichia coli", "Klebsiella pneumoniae"),
|
||||
TZP = as.rsi("R"),
|
||||
ampi = as.rsi("S"),
|
||||
cipro = as.rsi("S"))
|
||||
df
|
||||
#> mo TZP ampi cipro
|
||||
#> 1 Escherichia coli R S S
|
||||
#> 2 Klebsiella pneumoniae R S S
|
||||
|
||||
eucast_rules(df, rules = "custom", custom_rules = x, info = FALSE)
|
||||
#> mo TZP ampi cipro
|
||||
#> 1 Escherichia coli R R S
|
||||
#> 2 Klebsiella pneumoniae R R S
|
||||
}\if{html}{\out{</div>}}
|
||||
}
|
||||
|
||||
\subsection{Using taxonomic properties in rules}{
|
||||
|
||||
There is one exception in variables used for the rules: all column names of the \link{microorganisms} data set can also be used, but do not have to exist in the data set. These column names are: "mo", "fullname", "kingdom", "phylum", "class", "order", "family", "genus", "species", "subspecies", "rank", "ref", "species_id", "source", "prevalence" and "snomed". Thus, this next example will work as well, despite the fact that the \code{df} data set does not contain a column \code{genus}:
|
||||
There is one exception in variables used for the rules: all column names of the \link{microorganisms} data set can also be used, but do not have to exist in the data set. These column names are: \verb{r vector_and(colnames(microorganisms), sort = FALSE)}. Thus, this next example will work as well, despite the fact that the \code{df} data set does not contain a column \code{genus}:
|
||||
|
||||
\if{html}{\out{<div class="sourceCode r">}}\preformatted{y <- custom_eucast_rules(TZP == "S" & genus == "Klebsiella" ~ aminopenicillins == "S",
|
||||
\if{html}{\out{<div class="sourceCode {r}">}}\preformatted{y <- custom_eucast_rules(TZP == "S" & genus == "Klebsiella" ~ aminopenicillins == "S",
|
||||
TZP == "R" & genus == "Klebsiella" ~ aminopenicillins == "R")
|
||||
|
||||
eucast_rules(df, rules = "custom", custom_rules = y, info = FALSE)
|
||||
#> mo TZP ampi cipro
|
||||
#> 1 Escherichia coli R S S
|
||||
#> 2 Klebsiella pneumoniae R R S
|
||||
}\if{html}{\out{</div>}}
|
||||
}
|
||||
|
||||
\subsection{Usage of antibiotic group names}{
|
||||
|
||||
It is possible to define antibiotic groups instead of single antibiotics for the rule consequence, the part \emph{after} the tilde. In above examples, the antibiotic group \code{aminopenicillins} is used to include ampicillin and amoxicillin. The following groups are allowed (case-insensitive). Within parentheses are the agents that will be matched when running the rule.
|
||||
\itemize{
|
||||
\item "aminoglycosides"\cr(amikacin, amikacin/fosfomycin, amphotericin B-high, apramycin, arbekacin, astromicin, bekanamycin, dibekacin, framycetin, gentamicin, gentamicin-high, habekacin, hygromycin, isepamicin, kanamycin, kanamycin-high, kanamycin/cephalexin, micronomicin, neomycin, netilmicin, pentisomicin, plazomicin, propikacin, ribostamycin, sisomicin, streptoduocin, streptomycin, streptomycin-high, tobramycin and tobramycin-high)
|
||||
\item "aminopenicillins"\cr(amoxicillin and ampicillin)
|
||||
\item "antifungals"\cr(5-fluorocytosine, amphotericin B, anidulafungin, butoconazole, caspofungin, ciclopirox, clotrimazole, econazole, fluconazole, fosfluconazole, griseofulvin, hachimycin, ibrexafungerp, isavuconazole, isoconazole, itraconazole, ketoconazole, manogepix, micafungin, miconazole, nystatin, pimaricin, posaconazole, rezafungin, ribociclib, sulconazole, terbinafine, terconazole and voriconazole)
|
||||
\item "antimycobacterials"\cr(4-aminosalicylic acid, calcium aminosalicylate, capreomycin, clofazimine, delamanid, enviomycin, ethambutol, ethambutol/isoniazid, ethionamide, isoniazid, morinamide, p-aminosalicylic acid, pretomanid, prothionamide, pyrazinamide, rifabutin, rifampicin, rifampicin/isoniazid, rifampicin/pyrazinamide/ethambutol/isoniazid, rifampicin/pyrazinamide/isoniazid, rifamycin, rifapentine, simvastatin/fenofibrate, sodium aminosalicylate, streptomycin/isoniazid, terizidone, thioacetazone/isoniazid, tiocarlide and viomycin)
|
||||
\item "betalactams"\cr(amoxicillin, amoxicillin/clavulanic acid, amoxicillin/sulbactam, ampicillin, ampicillin/sulbactam, apalcillin, aspoxicillin, avibactam, azidocillin, azlocillin, aztreonam, aztreonam/avibactam, aztreonam/nacubactam, bacampicillin, benzathine benzylpenicillin, benzathine phenoxymethylpenicillin, benzylpenicillin, biapenem, carbenicillin, carindacillin, cefacetrile, cefaclor, cefadroxil, cefaloridine, cefamandole, cefatrizine, cefazedone, cefazolin, cefcapene, cefcapene pivoxil, cefdinir, cefditoren, cefditoren pivoxil, cefepime, cefepime/clavulanic acid, cefepime/nacubactam, cefepime/tazobactam, cefetamet, cefetamet pivoxil, cefetecol, cefetrizole, cefixime, cefmenoxime, cefmetazole, cefodizime, cefonicid, cefoperazone, cefoperazone/sulbactam, ceforanide, cefoselis, cefotaxime, cefotaxime/clavulanic acid, cefotaxime/sulbactam, cefotetan, cefotiam, cefotiam hexetil, cefovecin, cefoxitin, cefoxitin screening, cefozopran, cefpimizole, cefpiramide, cefpirome, cefpodoxime, cefpodoxime proxetil, cefpodoxime/clavulanic acid, cefprozil, cefquinome, cefroxadine, cefsulodin, cefsumide, ceftaroline, ceftaroline/avibactam, ceftazidime, ceftazidime/avibactam, ceftazidime/clavulanic acid, cefteram, cefteram pivoxil, ceftezole, ceftibuten, ceftiofur, ceftizoxime, ceftizoxime alapivoxil, ceftobiprole, ceftobiprole medocaril, ceftolozane/enzyme inhibitor, ceftolozane/tazobactam, ceftriaxone, cefuroxime, cefuroxime axetil, cephalexin, cephalothin, cephapirin, cephradine, ciclacillin, clometocillin, cloxacillin, dicloxacillin, doripenem, epicillin, ertapenem, flucloxacillin, hetacillin, imipenem, imipenem/EDTA, imipenem/relebactam, latamoxef, lenampicillin, loracarbef, mecillinam, meropenem, meropenem/nacubactam, meropenem/vaborbactam, metampicillin, methicillin, mezlocillin, mezlocillin/sulbactam, nacubactam, nafcillin, oxacillin, panipenem, penamecillin, penicillin/novobiocin, penicillin/sulbactam, phenethicillin, phenoxymethylpenicillin, piperacillin, piperacillin/sulbactam, piperacillin/tazobactam, piridicillin, pivampicillin, pivmecillinam, procaine benzylpenicillin, propicillin, razupenem, ritipenem, ritipenem acoxil, sarmoxicillin, sulbactam, sulbenicillin, sultamicillin, talampicillin, tazobactam, tebipenem, temocillin, ticarcillin and ticarcillin/clavulanic acid)
|
||||
\item "carbapenems"\cr(biapenem, doripenem, ertapenem, imipenem, imipenem/EDTA, imipenem/relebactam, meropenem, meropenem/nacubactam, meropenem/vaborbactam, panipenem, razupenem, ritipenem, ritipenem acoxil and tebipenem)
|
||||
\item "cephalosporins"\cr(cefacetrile, cefaclor, cefadroxil, cefaloridine, cefamandole, cefatrizine, cefazedone, cefazolin, cefcapene, cefcapene pivoxil, cefdinir, cefditoren, cefditoren pivoxil, cefepime, cefepime/clavulanic acid, cefepime/tazobactam, cefetamet, cefetamet pivoxil, cefetecol, cefetrizole, cefixime, cefmenoxime, cefmetazole, cefodizime, cefonicid, cefoperazone, cefoperazone/sulbactam, ceforanide, cefoselis, cefotaxime, cefotaxime/clavulanic acid, cefotaxime/sulbactam, cefotetan, cefotiam, cefotiam hexetil, cefovecin, cefoxitin, cefoxitin screening, cefozopran, cefpimizole, cefpiramide, cefpirome, cefpodoxime, cefpodoxime proxetil, cefpodoxime/clavulanic acid, cefprozil, cefquinome, cefroxadine, cefsulodin, cefsumide, ceftaroline, ceftaroline/avibactam, ceftazidime, ceftazidime/avibactam, ceftazidime/clavulanic acid, cefteram, cefteram pivoxil, ceftezole, ceftibuten, ceftiofur, ceftizoxime, ceftizoxime alapivoxil, ceftobiprole, ceftobiprole medocaril, ceftolozane/enzyme inhibitor, ceftolozane/tazobactam, ceftriaxone, cefuroxime, cefuroxime axetil, cephalexin, cephalothin, cephapirin, cephradine, latamoxef and loracarbef)
|
||||
\item "cephalosporins_1st"\cr(cefacetrile, cefadroxil, cefaloridine, cefatrizine, cefazedone, cefazolin, cefroxadine, ceftezole, cephalexin, cephalothin, cephapirin and cephradine)
|
||||
\item "cephalosporins_2nd"\cr(cefaclor, cefamandole, cefmetazole, cefonicid, ceforanide, cefotetan, cefotiam, cefoxitin, cefoxitin screening, cefprozil, cefuroxime, cefuroxime axetil and loracarbef)
|
||||
\item "cephalosporins_3rd"\cr(cefcapene, cefcapene pivoxil, cefdinir, cefditoren, cefditoren pivoxil, cefetamet, cefetamet pivoxil, cefixime, cefmenoxime, cefodizime, cefoperazone, cefoperazone/sulbactam, cefotaxime, cefotaxime/clavulanic acid, cefotaxime/sulbactam, cefotiam hexetil, cefovecin, cefpimizole, cefpiramide, cefpodoxime, cefpodoxime proxetil, cefpodoxime/clavulanic acid, cefsulodin, ceftazidime, ceftazidime/avibactam, ceftazidime/clavulanic acid, cefteram, cefteram pivoxil, ceftibuten, ceftiofur, ceftizoxime, ceftizoxime alapivoxil, ceftriaxone and latamoxef)
|
||||
\item "cephalosporins_4th"\cr(cefepime, cefepime/clavulanic acid, cefepime/tazobactam, cefetecol, cefoselis, cefozopran, cefpirome and cefquinome)
|
||||
\item "cephalosporins_5th"\cr(ceftaroline, ceftaroline/avibactam, ceftobiprole, ceftobiprole medocaril, ceftolozane/enzyme inhibitor and ceftolozane/tazobactam)
|
||||
\item "cephalosporins_except_caz"\cr(cefacetrile, cefaclor, cefadroxil, cefaloridine, cefamandole, cefatrizine, cefazedone, cefazolin, cefcapene, cefcapene pivoxil, cefdinir, cefditoren, cefditoren pivoxil, cefepime, cefepime/clavulanic acid, cefepime/tazobactam, cefetamet, cefetamet pivoxil, cefetecol, cefetrizole, cefixime, cefmenoxime, cefmetazole, cefodizime, cefonicid, cefoperazone, cefoperazone/sulbactam, ceforanide, cefoselis, cefotaxime, cefotaxime/clavulanic acid, cefotaxime/sulbactam, cefotetan, cefotiam, cefotiam hexetil, cefovecin, cefoxitin, cefoxitin screening, cefozopran, cefpimizole, cefpiramide, cefpirome, cefpodoxime, cefpodoxime proxetil, cefpodoxime/clavulanic acid, cefprozil, cefquinome, cefroxadine, cefsulodin, cefsumide, ceftaroline, ceftaroline/avibactam, ceftazidime/avibactam, ceftazidime/clavulanic acid, cefteram, cefteram pivoxil, ceftezole, ceftibuten, ceftiofur, ceftizoxime, ceftizoxime alapivoxil, ceftobiprole, ceftobiprole medocaril, ceftolozane/enzyme inhibitor, ceftolozane/tazobactam, ceftriaxone, cefuroxime, cefuroxime axetil, cephalexin, cephalothin, cephapirin, cephradine, latamoxef and loracarbef)
|
||||
\item "fluoroquinolones"\cr(besifloxacin, ciprofloxacin, clinafloxacin, danofloxacin, delafloxacin, difloxacin, enoxacin, enrofloxacin, finafloxacin, fleroxacin, garenoxacin, gatifloxacin, gemifloxacin, grepafloxacin, levofloxacin, levonadifloxacin, lomefloxacin, marbofloxacin, metioxate, miloxacin, moxifloxacin, nadifloxacin, nifuroquine, norfloxacin, ofloxacin, orbifloxacin, pazufloxacin, pefloxacin, pradofloxacin, premafloxacin, prulifloxacin, rufloxacin, sarafloxacin, sitafloxacin, sparfloxacin, temafloxacin, tilbroquinol, tioxacin, tosufloxacin and trovafloxacin)
|
||||
\item "glycopeptides"\cr(avoparcin, dalbavancin, norvancomycin, oritavancin, ramoplanin, teicoplanin, teicoplanin-macromethod, telavancin, vancomycin and vancomycin-macromethod)
|
||||
\item "glycopeptides_except_lipo"\cr(avoparcin, norvancomycin, ramoplanin, teicoplanin, teicoplanin-macromethod, vancomycin and vancomycin-macromethod)
|
||||
\item "lincosamides"\cr(acetylmidecamycin, acetylspiramycin, clindamycin, gamithromycin, kitasamycin, lincomycin, meleumycin, nafithromycin, pirlimycin, primycin, solithromycin, tildipirosin, tilmicosin, tulathromycin, tylosin and tylvalosin)
|
||||
\item "lipoglycopeptides"\cr(dalbavancin, oritavancin and telavancin)
|
||||
\item "macrolides"\cr(acetylmidecamycin, acetylspiramycin, azithromycin, clarithromycin, dirithromycin, erythromycin, flurithromycin, gamithromycin, josamycin, kitasamycin, meleumycin, midecamycin, miocamycin, nafithromycin, oleandomycin, pirlimycin, primycin, rokitamycin, roxithromycin, solithromycin, spiramycin, telithromycin, tildipirosin, tilmicosin, troleandomycin, tulathromycin, tylosin and tylvalosin)
|
||||
\item "oxazolidinones"\cr(cadazolid, cycloserine, linezolid, tedizolid and thiacetazone)
|
||||
\item "penicillins"\cr(amoxicillin, amoxicillin/clavulanic acid, amoxicillin/sulbactam, ampicillin, ampicillin/sulbactam, apalcillin, aspoxicillin, avibactam, azidocillin, azlocillin, aztreonam, aztreonam/avibactam, aztreonam/nacubactam, bacampicillin, benzathine benzylpenicillin, benzathine phenoxymethylpenicillin, benzylpenicillin, carbenicillin, carindacillin, cefepime/nacubactam, ciclacillin, clometocillin, cloxacillin, dicloxacillin, epicillin, flucloxacillin, hetacillin, lenampicillin, mecillinam, metampicillin, methicillin, mezlocillin, mezlocillin/sulbactam, nacubactam, nafcillin, oxacillin, penamecillin, penicillin/novobiocin, penicillin/sulbactam, phenethicillin, phenoxymethylpenicillin, piperacillin, piperacillin/sulbactam, piperacillin/tazobactam, piridicillin, pivampicillin, pivmecillinam, procaine benzylpenicillin, propicillin, sarmoxicillin, sulbactam, sulbenicillin, sultamicillin, talampicillin, tazobactam, temocillin, ticarcillin and ticarcillin/clavulanic acid)
|
||||
\item "polymyxins"\cr(colistin, polymyxin B and polymyxin B/polysorbate 80)
|
||||
\item "quinolones"\cr(besifloxacin, cinoxacin, ciprofloxacin, clinafloxacin, danofloxacin, delafloxacin, difloxacin, enoxacin, enrofloxacin, finafloxacin, fleroxacin, flumequine, garenoxacin, gatifloxacin, gemifloxacin, grepafloxacin, levofloxacin, levonadifloxacin, lomefloxacin, marbofloxacin, metioxate, miloxacin, moxifloxacin, nadifloxacin, nalidixic acid, nifuroquine, nitroxoline, norfloxacin, ofloxacin, orbifloxacin, oxolinic acid, pazufloxacin, pefloxacin, pipemidic acid, piromidic acid, pradofloxacin, premafloxacin, prulifloxacin, rosoxacin, rufloxacin, sarafloxacin, sitafloxacin, sparfloxacin, temafloxacin, tilbroquinol, tioxacin, tosufloxacin and trovafloxacin)
|
||||
\item "streptogramins"\cr(pristinamycin and quinupristin/dalfopristin)
|
||||
\item "tetracyclines"\cr(cetocycline, chlortetracycline, clomocycline, demeclocycline, doxycycline, eravacycline, lymecycline, metacycline, minocycline, omadacycline, oxytetracycline, penimepicycline, rolitetracycline, tetracycline and tigecycline)
|
||||
\item "tetracyclines_except_tgc"\cr(cetocycline, chlortetracycline, clomocycline, demeclocycline, doxycycline, eravacycline, lymecycline, metacycline, minocycline, omadacycline, oxytetracycline, penimepicycline, rolitetracycline and tetracycline)
|
||||
\item "trimethoprims"\cr(brodimoprim, sulfadiazine, sulfadiazine/tetroxoprim, sulfadiazine/trimethoprim, sulfadimethoxine, sulfadimidine, sulfadimidine/trimethoprim, sulfafurazole, sulfaisodimidine, sulfalene, sulfamazone, sulfamerazine, sulfamerazine/trimethoprim, sulfamethizole, sulfamethoxazole, sulfamethoxypyridazine, sulfametomidine, sulfametoxydiazine, sulfametrole/trimethoprim, sulfamoxole, sulfamoxole/trimethoprim, sulfanilamide, sulfaperin, sulfaphenazole, sulfapyridine, sulfathiazole, sulfathiourea, trimethoprim and trimethoprim/sulfamethoxazole)
|
||||
\item "ureidopenicillins"\cr(azlocillin, mezlocillin, piperacillin and piperacillin/tazobactam)
|
||||
}
|
||||
|
||||
\verb{r paste0(" * ", sapply(DEFINED_AB_GROUPS, function(x) paste0("\\"", tolower(gsub("^AB_", "", x)), "\\"\\\\cr(", vector_and(ab_name(eval(parse(text = x), envir = asNamespace("AMR")), language = NULL, tolower = TRUE), quotes = FALSE), ")"), USE.NAMES = FALSE), "\\n", collapse = "")}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
\alias{dosage}
|
||||
\title{Data Set with Treatment Dosages as Defined by EUCAST}
|
||||
\format{
|
||||
A [tibble\link[tibble:tibble]{tibble::tibble} with 169 observations and 9 variables:
|
||||
A \link[tibble:tibble]{tibble} with 169 observations and 9 variables:
|
||||
\itemize{
|
||||
\item \code{ab}\cr Antibiotic ID as used in this package (such as \code{AMC}), using the official EARS-Net (European Antimicrobial Resistance Surveillance Network) codes where available
|
||||
\item \code{name}\cr Official name of the antimicrobial agent as used by WHONET/EARS-Net or the WHO
|
||||
|
@ -74,36 +74,15 @@ To improve the interpretation of the antibiogram before EUCAST rules are applied
|
||||
\strong{Note:} This function does not translate MIC values to RSI values. Use \code{\link[=as.rsi]{as.rsi()}} for that. \cr
|
||||
\strong{Note:} When ampicillin (AMP, J01CA01) is not available but amoxicillin (AMX, J01CA04) is, the latter will be used for all rules where there is a dependency on ampicillin. These drugs are interchangeable when it comes to expression of antimicrobial resistance. \cr
|
||||
|
||||
The file containing all EUCAST rules is located here: \url{https://github.com/msberends/AMR/blob/main/data-raw/eucast_rules.tsv}. \strong{Note:} Old taxonomic names are replaced with the current taxonomy where applicable. For example, \emph{Ochrobactrum anthropi} was renamed to \emph{Brucella anthropi} in 2020; the original EUCAST rules v3.1 and v3.2 did not yet contain this new taxonomic name. The file used as input for this \code{AMR} package contains the taxonomy updated until \link[=catalogue_of_life]{5 October 2021}.
|
||||
The file containing all EUCAST rules is located here: \url{https://github.com/msberends/AMR/blob/main/data-raw/eucast_rules.tsv}. \strong{Note:} Old taxonomic names are replaced with the current taxonomy where applicable. For example, \emph{Ochrobactrum anthropi} was renamed to \emph{Brucella anthropi} in 2020; the original EUCAST rules v3.1 and v3.2 did not yet contain this new taxonomic name. The file used as input for this \code{AMR} package contains the taxonomy updated until \code{\link[=catalogue_of_life]{r CATALOGUE_OF_LIFE$yearmonth_LPSN}}.
|
||||
\subsection{Custom Rules}{
|
||||
|
||||
Custom rules can be created using \code{\link[=custom_eucast_rules]{custom_eucast_rules()}}, e.g.:
|
||||
|
||||
\if{html}{\out{<div class="sourceCode r">}}\preformatted{x <- custom_eucast_rules(AMC == "R" & genus == "Klebsiella" ~ aminopenicillins == "R",
|
||||
\if{html}{\out{<div class="sourceCode {r}">}}\preformatted{x <- custom_eucast_rules(AMC == "R" & genus == "Klebsiella" ~ aminopenicillins == "R",
|
||||
AMC == "I" & genus == "Klebsiella" ~ aminopenicillins == "I")
|
||||
|
||||
eucast_rules(example_isolates, rules = "custom", custom_rules = x, info = FALSE)
|
||||
#> # A tibble: 2,000 x 46
|
||||
#> date patient age gender ward mo PEN OXA FLC AMX
|
||||
#> * <date> <chr> <dbl> <chr> <chr> <mo> <rsi> <rsi> <rsi> <rsi>
|
||||
#> 1 2002-01-02 A77334 65 F Clinical B_ESCHR_COLI R NA NA NA
|
||||
#> 2 2002-01-03 A77334 65 F Clinical B_ESCHR_COLI R NA NA NA
|
||||
#> 3 2002-01-07 067927 45 F ICU B_STPHY_EPDR R NA R NA
|
||||
#> 4 2002-01-07 067927 45 F ICU B_STPHY_EPDR R NA R NA
|
||||
#> 5 2002-01-13 067927 45 F ICU B_STPHY_EPDR R NA R NA
|
||||
#> 6 2002-01-13 067927 45 F ICU B_STPHY_EPDR R NA R NA
|
||||
#> 7 2002-01-14 462729 78 M Clinical B_STPHY_AURS R NA S R
|
||||
#> 8 2002-01-14 462729 78 M Clinical B_STPHY_AURS R NA S R
|
||||
#> 9 2002-01-16 067927 45 F ICU B_STPHY_EPDR R NA R NA
|
||||
#> 10 2002-01-17 858515 79 F ICU B_STPHY_EPDR R NA S NA
|
||||
#> # ... with 1,990 more rows, and 36 more variables: AMC <rsi>, AMP <rsi>,
|
||||
#> # TZP <rsi>, CZO <rsi>, FEP <rsi>, CXM <rsi>, FOX <rsi>, CTX <rsi>,
|
||||
#> # CAZ <rsi>, CRO <rsi>, GEN <rsi>, TOB <rsi>, AMK <rsi>, KAN <rsi>,
|
||||
#> # TMP <rsi>, SXT <rsi>, NIT <rsi>, FOS <rsi>, LNZ <rsi>, CIP <rsi>,
|
||||
#> # MFX <rsi>, VAN <rsi>, TEC <rsi>, TCY <rsi>, TGC <rsi>, DOX <rsi>,
|
||||
#> # ERY <rsi>, CLI <rsi>, AZM <rsi>, IPM <rsi>, MEM <rsi>, MTR <rsi>,
|
||||
#> # CHL <rsi>, COL <rsi>, MUP <rsi>, RIF <rsi>
|
||||
#> # i Use `print(n = ...)` to see more rows, and `colnames()` to see all variable names
|
||||
}\if{html}{\out{</div>}}
|
||||
}
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
\alias{example_isolates}
|
||||
\title{Data Set with 2,000 Example Isolates}
|
||||
\format{
|
||||
A [tibble\link[tibble:tibble]{tibble::tibble} with 2,000 observations and 46 variables:
|
||||
A \link[tibble:tibble]{tibble} with 2,000 observations and 46 variables:
|
||||
\itemize{
|
||||
\item \code{date}\cr Date of receipt at the laboratory
|
||||
\item \code{patient}\cr ID of the patient
|
||||
|
@ -5,7 +5,7 @@
|
||||
\alias{example_isolates_unclean}
|
||||
\title{Data Set with Unclean Data}
|
||||
\format{
|
||||
A [tibble\link[tibble:tibble]{tibble::tibble} with 3,000 observations and 8 variables:
|
||||
A \link[tibble:tibble]{tibble} with 3,000 observations and 8 variables:
|
||||
\itemize{
|
||||
\item \code{patient_id}\cr ID of the patient
|
||||
\item \code{date}\cr date of receipt at the laboratory
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 56 KiB |
Binary file not shown.
Before Width: | Height: | Size: 9.4 KiB |
274
man/figures/logo_rug.svg
Normal file
274
man/figures/logo_rug.svg
Normal file
@ -0,0 +1,274 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 25.2.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 400 120" style="enable-background:new 0 0 400 120;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#E3032E;}
|
||||
</style>
|
||||
<g>
|
||||
<path class="st0" d="M333.6,73.8h1.3c1.4,0,1.6,0.3,1.6,2.7v8.8c0,1.7-0.2,2.3-2,2.3h-1.2v1.8h10.1v-1.8H343c-1.8,0-2-0.6-2-2.3
|
||||
v-5.9c0-3.4,1.8-5.2,4.4-5.2c1.9,0,3.2,1.1,3.2,3.7v7.4c0,1.7-0.2,2.3-2,2.3H346v1.8h9.9v-1.8H355c-1.8,0-2-0.6-2-2.3v-8.5
|
||||
c0-3.9-2.7-5.5-6.3-5.5c-2.9,0-5,1.2-6.2,4.1h-0.1v-4c-1.8,0.2-5,0.4-6.8,0.4V73.8z M330.8,80.9v-0.8c0-6-2.4-8.7-8.2-8.7
|
||||
c-6,0-8.6,4-8.6,9.3c0,5.3,2.6,9.3,8.6,9.3c6,0,7.8-3.1,7.8-6.2h-3.7c0,2.7-1.1,4.1-3.7,4.1c-4.4,0-4.5-4.5-4.5-6.9H330.8z
|
||||
M318.6,78.8c0-3,0.9-5.5,4-5.5c3.1,0,3.8,2.6,3.8,5.5H318.6z M304.8,77.6c0,3.1-0.9,4.6-2.8,4.6c-1.9,0-3.1-1.4-3.1-4.6
|
||||
c0-3.1,1.1-4.3,3.1-4.3C303.7,73.3,304.8,74.3,304.8,77.6 M306.4,92.4c0,1.7-1.1,3.4-4.5,3.4c-3,0-4.2-1.4-4.2-3.2
|
||||
c0-1.9,1.1-3.5,4.3-3.5C305.1,89.1,306.4,90.5,306.4,92.4 M311.6,71.7l-5.3,0.5c-1-0.3-2.7-0.8-4.2-0.8c-4.7,0-7.8,2.7-7.8,6.2
|
||||
c0,3.3,2.1,4.9,4.7,5.8v0.1c-2.5,0.2-3.5,1.1-3.5,2.3c0,1.2,0.8,1.8,3.2,2.3V88c-2.5,0.3-5.5,1.6-5.5,4.5c0,2.9,2.5,5.2,8.2,5.2
|
||||
c6,0,9.4-2,9.4-5.3c0-4.2-3.4-4.7-6.8-5c-4-0.3-4.6-0.6-4.6-1.7c0-1.2,1.6-1.4,2.8-1.5l0.9-0.1c5-0.8,6.6-3.5,6.6-6.4
|
||||
c0-1.5-0.7-2.9-1.6-3.6V74h3.5V71.7z M269.1,73.8h1.3c1.4,0,1.6,0.3,1.6,2.7v8.8c0,1.7-0.2,2.3-2,2.3h-1.2v1.8h10.1v-1.8h-0.5
|
||||
c-1.8,0-2-0.6-2-2.3v-5.9c0-3.4,1.8-5.2,4.4-5.2c1.9,0,3.2,1.1,3.2,3.7v7.4c0,1.7-0.2,2.3-2,2.3h-0.5v1.8h9.9v-1.8h-0.9
|
||||
c-1.8,0-2-0.6-2-2.3v-8.5c0-3.9-2.7-5.5-6.3-5.5c-2.9,0-5,1.2-6.2,4.1h-0.1v-4c-1.8,0.2-5,0.4-6.8,0.4V73.8z M259.3,65.8
|
||||
c0,1.5,0.9,2.7,2.6,2.7c1.7,0,2.6-1.2,2.6-2.7c0-1.5-0.9-2.7-2.6-2.7C260.3,63.1,259.3,64.2,259.3,65.8 M256.9,73.8h1.3
|
||||
c1.4,0,1.6,0.3,1.6,2.7v8.8c0,1.7-0.2,2.3-2,2.3h-1.2v1.8h10.5v-1.8h-0.9c-1.8,0-2-0.6-2-2.3V71.5c-2.3,0.2-5.5,0.4-7.3,0.4V73.8z
|
||||
M232.7,73.8h1.3c1.4,0,1.6,0.3,1.6,2.7v8.8c0,1.7-0.2,2.3-2,2.3h-1.2v1.8h10.1v-1.8h-0.5c-1.8,0-2-0.6-2-2.3v-5.9
|
||||
c0-3.4,1.8-5.2,4.4-5.2c1.9,0,3.2,1.1,3.2,3.7v7.4c0,1.7-0.2,2.3-2,2.3h-0.5v1.8h9.9v-1.8H254c-1.8,0-2-0.6-2-2.3v-8.5
|
||||
c0-3.9-2.7-5.5-6.3-5.5c-2.9,0-5,1.2-6.2,4.1h-0.1v-4c-1.8,0.2-5,0.4-6.8,0.4V73.8z M213,80.6c0,5.3,2.6,9.3,8.6,9.3
|
||||
c6,0,8.6-4,8.6-9.3c0-5.3-2.6-9.3-8.6-9.3C215.6,71.4,213,75.3,213,80.6 M217.6,80.6c0-4.9,1.1-7.2,4-7.2c2.9,0,4,2.3,4,7.2
|
||||
c0,4.9-1.1,7.2-4,7.2C218.7,87.8,217.6,85.5,217.6,80.6 M195.2,73.8h1.5c1.4,0,1.6,0.3,1.6,2.7v8.8c0,1.7-0.2,2.3-2,2.3h-1.2v1.8
|
||||
h11.5v-1.8h-1.9c-1.8,0-2-0.6-2-2.3v-5.9c0-3,1.7-5.2,3.3-5.2c1.4,0,1.8,1,1.8,2.8h3.5v-5.2c-0.8-0.3-1.8-0.4-2.9-0.4
|
||||
c-2.9,0-5,1.2-6.2,4.1h-0.1v-4c-1.8,0.2-5,0.4-7,0.4V73.8z M186.8,77.6c0,3.1-0.9,4.6-2.8,4.6c-1.9,0-3.1-1.4-3.1-4.6
|
||||
c0-3.1,1.1-4.3,3.1-4.3C185.7,73.3,186.8,74.3,186.8,77.6 M188.3,92.4c0,1.7-1.1,3.4-4.5,3.4c-3,0-4.2-1.4-4.2-3.2
|
||||
c0-1.9,1.1-3.5,4.3-3.5C187,89.1,188.3,90.5,188.3,92.4 M193.6,71.7l-5.3,0.5c-1-0.3-2.7-0.8-4.2-0.8c-4.7,0-7.8,2.7-7.8,6.2
|
||||
c0,3.3,2,4.9,4.8,5.8v0.1c-2.5,0.2-3.5,1.1-3.5,2.3c0,1.2,0.8,1.8,3.2,2.3V88c-2.5,0.3-5.5,1.6-5.5,4.5c0,2.9,2.5,5.2,8.2,5.2
|
||||
c6,0,9.4-2,9.4-5.3c0-4.2-3.4-4.7-6.8-5c-4-0.3-4.6-0.6-4.6-1.7c0-1.2,1.6-1.4,2.8-1.5l0.9-0.1c5-0.8,6.6-3.5,6.6-6.4
|
||||
c0-1.5-0.7-2.9-1.6-3.6V74h3.5V71.7z"/>
|
||||
<path class="st0" d="M383.3,38h3.2v11.3c0,1.7-0.2,2.3-2,2.3h-1.1v1.8h11.5v-1.8h-1.9c-1.8,0-2-0.6-2-2.3V38h4.7V36h-4.7v-3.6
|
||||
c0-2.2,0.9-3.2,2.3-3.2c1.3,0,1.8,0.8,1.8,3.2h3v-4.7c-1.4-0.3-3-0.5-4.8-0.5c-6.5,0-6.8,4-6.8,8.9h-3.2V38z M363.9,44.7
|
||||
c0,5.3,2.6,9.3,8.6,9.3c6,0,8.6-4,8.6-9.3c0-5.3-2.6-9.3-8.6-9.3C366.4,35.4,363.9,39.3,363.9,44.7 M368.5,44.7
|
||||
c0-4.9,1.1-7.2,4-7.2c2.9,0,4,2.3,4,7.2c0,4.9-1.1,7.2-4,7.2C369.5,51.9,368.5,49.6,368.5,44.7 M346.2,52.9l-1.7,4.4
|
||||
c-0.5,1.3-0.9,2-2.3,2h-1.6v1.8h9.6v-1.8H349c-1.4,0-1.8-0.3-1.8-1.1c0-0.6,0.4-1.4,0.6-1.9l7.1-16.9c0.5-1.2,0.8-1.8,1.6-1.8h0.8
|
||||
V36h-7.6v1.8h1.5c0.6,0,0.9,0.1,0.9,0.6c0,0.3-0.2,0.8-0.4,1.3l-3.3,8.4l-3-8c-0.2-0.6-0.5-1.1-0.5-1.6c0-0.5,0.4-0.6,1-0.6h1.3V36
|
||||
h-8.9v1.8h0.5c0.9,0,1.3,0.5,2,2.3L346.2,52.9z M322.1,38h3.2v10.3c0,4.5,2,5.6,5.6,5.6c3.5,0,5.5-1.7,5.5-5.6v-0.8h-3v1.8
|
||||
c0,1.5-0.6,2.2-1.9,2.2c-1.3,0-1.9-0.7-1.9-2.2V38h5.8V36h-5.8v-5.1h-3.1c-0.3,3.6-1.1,4.7-4.4,5.1V38z M312.6,29.8
|
||||
c0,1.5,0.9,2.7,2.6,2.7c1.7,0,2.6-1.2,2.6-2.7c0-1.5-0.9-2.7-2.6-2.7C313.5,27.1,312.6,28.3,312.6,29.8 M310.1,37.8h1.3
|
||||
c1.4,0,1.6,0.3,1.6,2.7v8.8c0,1.7-0.2,2.3-2,2.3h-1.2v1.8h10.5v-1.8h-0.9c-1.8,0-2-0.6-2-2.3V35.5c-2.3,0.2-5.5,0.4-7.3,0.4V37.8z
|
||||
M292.9,52.8c1,0.4,3.7,1.1,6.6,1.1c3.8,0,7.8-1.6,7.8-5.8c0-2.7-1.4-3.8-4.5-4.8l-2.9-1c-1.7-0.5-2.6-1.5-2.6-2.9
|
||||
c0-1.4,1-2.1,2.7-2.1c2.6,0,3.3,1.2,3.3,3.9h3v-4.9c-1-0.5-3.5-1-6.2-1c-4.2,0-7.2,2-7.2,5.3c0,2.8,2,4.3,6.2,5.6
|
||||
c3.3,1,3.8,1.8,3.8,3.1c0,1.7-1.5,2.6-3.8,2.6c-2.5,0-3.2-1.7-3.2-4.2h-3V52.8z M274.2,37.8h1.5c1.4,0,1.6,0.3,1.6,2.7v8.8
|
||||
c0,1.7-0.2,2.3-2,2.3h-1.2v1.8h11.5v-1.8h-1.9c-1.8,0-2-0.6-2-2.3v-5.9c0-3,1.7-5.3,3.3-5.3c1.4,0,1.8,1,1.8,2.8h3.5v-5.2
|
||||
c-0.8-0.3-1.8-0.4-2.9-0.4c-2.9,0-5,1.2-6.2,4.1h-0.1v-4c-1.8,0.2-5,0.4-7,0.4V37.8z M271.6,45v-0.8c0-6-2.4-8.7-8.2-8.7
|
||||
c-6,0-8.6,4-8.6,9.3c0,5.3,2.6,9.3,8.6,9.3c6,0,7.8-3.1,7.8-6.2h-3.7c0,2.7-1.1,4.1-3.7,4.1c-4.4,0-4.5-4.5-4.5-6.9H271.6z
|
||||
M259.4,42.9c0-3,0.9-5.5,4-5.5c3.1,0,3.8,2.6,3.8,5.5H259.4z M246.1,37.7h1.5c0.8,0,1,0.2,1,0.5c0,0.3-0.1,0.6-0.2,0.9l-3.7,10.7
|
||||
h-0.1l-3.5-10.1c-0.1-0.4-0.3-0.8-0.3-1.3c0-0.4,0.4-0.6,1.4-0.6h1.2V36h-9v1.8h0.4c0.8,0,1,0.2,1.5,1.4l5.6,14.5h4.2l5.6-14.6
|
||||
c0.4-0.9,0.7-1.2,1.4-1.2h0.5V36h-7.6V37.7z M226,29.8c0,1.5,0.9,2.7,2.6,2.7c1.7,0,2.6-1.2,2.6-2.7c0-1.5-0.9-2.7-2.6-2.7
|
||||
C227,27.1,226,28.3,226,29.8 M223.6,37.8h1.3c1.4,0,1.6,0.3,1.6,2.7v8.8c0,1.7-0.2,2.3-2,2.3h-1.2v1.8h10.5v-1.8H233
|
||||
c-1.8,0-2-0.6-2-2.3V35.5c-2.3,0.2-5.5,0.4-7.3,0.4V37.8z M199.4,37.8h1.3c1.4,0,1.6,0.3,1.6,2.7v8.8c0,1.7-0.2,2.3-2,2.3h-1.2v1.8
|
||||
h10.1v-1.8h-0.5c-1.8,0-2-0.6-2-2.3v-5.9c0-3.4,1.8-5.3,4.4-5.3c1.9,0,3.2,1.2,3.2,3.7v7.4c0,1.7-0.2,2.3-2,2.3h-0.5v1.8h9.9v-1.8
|
||||
h-0.9c-1.8,0-2-0.6-2-2.3v-8.5c0-3.9-2.7-5.5-6.3-5.5c-2.9,0-5,1.2-6.2,4.1h-0.1v-4c-1.8,0.2-5,0.4-6.8,0.4V37.8z M190.7,53.4h6.8
|
||||
v-1.8h-0.9c-1.8,0-2-0.6-2-2.3V35.5c-2.3,0.2-5.5,0.4-7.3,0.4v1.9h1.3c1.4,0,1.6,0.3,1.6,2.7v4.9c0,3.7-1.3,5.6-4.4,5.6
|
||||
c-2,0-3.2-1-3.2-3.2V35.5c-2.3,0.2-5.5,0.4-7.3,0.4v1.9h1.3c1.4,0,1.6,0.3,1.6,2.7V49c0,3.3,2.2,5,5.7,5c3.6,0,5.9-1.6,6.7-4h0.1
|
||||
V53.4z"/>
|
||||
</g>
|
||||
<polygon class="st0" points="150.7,35.7 86.8,114.5 91.9,114.6 155.8,35.7 "/>
|
||||
<g>
|
||||
<path class="st0" d="M32.5,20.3c-0.5,0.1-1.1,0.3-1.5-0.6c-0.3-0.8,1-2,1.4-2.4c0.6-0.5-0.2-1.1-0.6-0.5c-0.1,0.2-1.1,1.6-1.9,1.6
|
||||
c-1.2,0-1.2-1.5-1.2-1.5s-1.4-0.9-1.4-3.7c0-2.5,1.6-3.7,1.6-3.7s0-1.4,1.1-1.4c1.1,0,1.8,1.6,1.9,1.7c0.6,0.8,1.3,0.1,0.8-0.5
|
||||
c-1.2-1.4-1.4-2.5-0.1-3.1c0.5-1.1,1.9-1.8,3.4-1.9l0.1,0l0,0c1.5,0.1,2.9,0.9,3.4,1.9c1.3,0.6,1,1.7-0.1,3.1
|
||||
c-0.5,0.6,0.2,1.3,0.8,0.5c0.1-0.1,0.8-1.6,1.9-1.7c1.1,0,1.1,1.4,1.1,1.4s1.6,1.2,1.6,3.7c0,2.8-1.4,3.7-1.4,3.7s0.1,1.5-1.2,1.5
|
||||
c-0.8,0-1.8-1.4-1.9-1.6c-0.4-0.6-1.1,0-0.6,0.5c0.4,0.4,1.7,1.6,1.4,2.4c-0.4,0.8-1,0.6-1.5,0.6c0,0-0.4,0.7-1.1,0.7
|
||||
c3.2,2.4,8.3,1,8.9-0.7c0,0-0.9,0.2-0.8-0.7c0-0.5,0.6-0.8,1.3-0.9c-0.2-0.3-0.2-0.8-0.2-1.2c0.1-1.3,0.9-2.3,1.9-2.4
|
||||
c1,0,1.8,0.9,1.7,2.2c0,0.6-0.3,1.2-0.6,1.6c0.7,0.3,1.2,0.6,1.2,1.1c-0.2,1.2-1.2,0.9-1.2,0.9c-0.1,2.6,3.9,3.2,4.9,2.5
|
||||
c-0.4-1.5,0.2-2,0.7-2.4c0.3-0.3,1.3-0.9,1.5-1c0.3-0.2,0.5-0.6,0.3-0.8c-0.2-0.1-0.6,0.1-0.8,0.3c-0.3,0.3-0.8,1-1.5,0.8
|
||||
c-0.9-0.2-0.5-1.3-0.7-1.8c-1-3.5-0.1-6,3.4-7.5c0,0,1.3-1.4,2.5-0.8c1.2,0.6,0.4,2.5,0.4,2.5l0.4,0.2c1.3-2.3,3.2-4,5.8-4.1
|
||||
c1.9,0,2.8,1.1,2.9,2.6c0.2,3.4-3.3,2.1-3,0.9c0,0-0.8,0.1-1.3,0.8c0-0.2,0-2.2-1.8-1.2c-0.5,0.3-1.4,1.8-1.5,2
|
||||
c-0.2,0.7,0.1,0.8-0.3,1.4c-0.3,0.5-0.7,0.6-0.8,1c-0.2,0.4,0.1,1.1-0.2,1.5c-0.3,0.6-0.7,0.6-0.9,1.1c-0.2,0.4-2.7,6.8-2.7,6.8
|
||||
s1,0.6,0.8,1.6c-0.3,1.3-1.1,1-1.5,1.8c-13.7-3.5-27.8-3.5-42.5-0.1c-0.4-0.8-1.2-0.5-1.5-1.8c-0.2-1,0.8-1.6,0.8-1.6
|
||||
s-2.5-6.4-2.7-6.8c-0.2-0.5-0.6-0.5-0.9-1.1c-0.2-0.5,0-1.2-0.2-1.5c-0.2-0.4-0.5-0.5-0.8-1c-0.4-0.7,0-0.8-0.3-1.4
|
||||
c-0.1-0.2-1-1.7-1.5-2c-1.8-1.1-1.8,1-1.8,1.2c-0.5-0.7-1.3-0.8-1.3-0.8c0.3,1.3-3.2,2.5-3-0.9c0.1-1.5,1-2.6,2.9-2.6
|
||||
C7.2,8.9,9,10.6,10.3,13l0.4-0.2c0,0-0.7-1.9,0.4-2.5c1.2-0.6,2.5,0.8,2.5,0.8c3.5,1.5,4.4,3.9,3.4,7.5c-0.2,0.6,0.2,1.6-0.7,1.8
|
||||
c-0.8,0.2-1.2-0.5-1.5-0.8c-0.2-0.2-0.6-0.5-0.8-0.3c-0.2,0.2,0,0.6,0.3,0.8c0.1,0.1,1.1,0.7,1.5,1c0.5,0.4,1.1,0.9,0.7,2.4
|
||||
c1,0.7,5.1,0.2,4.9-2.5c0,0-1.1,0.3-1.3-0.9c-0.1-0.4,0.4-0.8,1.2-1.1c-0.4-0.4-0.6-1-0.6-1.6c-0.1-1.3,0.7-2.2,1.7-2.2
|
||||
c1,0,1.9,1.1,1.9,2.4c0,0.4-0.1,0.9-0.2,1.2c0.7,0.1,1.3,0.4,1.3,0.9c0,0.9-0.8,0.7-0.8,0.7c0.7,1.8,5.7,3.1,8.9,0.7
|
||||
C32.9,21.1,32.5,20.3,32.5,20.3 M33.6,13.8c0,1.3,1.1,2.4,2.4,2.4c1.3,0,2.4-1.1,2.4-2.4c0-1.3-1.1-2.4-2.4-2.4
|
||||
C34.7,11.4,33.6,12.5,33.6,13.8 M46.7,24c1,0,3,0.4,3,0.4s-0.8-0.9-1.2-1.6c0,0-0.5,0.4-0.7,0.6C47.5,23.6,46.7,24,46.7,24
|
||||
M36,21.9c-0.4,0.4-1.2,1.2-2,1.5c0,0,1.4,0,2,0H36c0.6,0,2,0,2,0C37.2,23.1,36.4,22.4,36,21.9 M25.3,24c0,0-0.8-0.4-1-0.6
|
||||
c-0.3-0.2-0.7-0.6-0.7-0.6c-0.4,0.6-1.2,1.6-1.2,1.6S24.3,24,25.3,24 M56.6,30.4c0.7,0.2,1.6,0.8,1.3,1.8c-0.3,0.9-1.4,1-2,0.9
|
||||
c-0.7-0.2-1.6-0.8-1.3-1.8C54.8,30.3,56,30.2,56.6,30.4 M48,30.1l-2,1.7l-1.7-2l2-1.7L48,30.1z M16.3,33c-0.7,0.2-1.8,0.1-2-0.9
|
||||
c-0.3-0.9,0.7-1.6,1.3-1.8c0.7-0.2,1.8-0.1,2,0.9C17.9,32.2,17,32.9,16.3,33 M34,29.5c0-0.8,0.9-1.4,2.1-1.4c1.1,0,2.1,0.6,2.1,1.4
|
||||
c0,0.8-0.9,1.4-2.1,1.4C35,30.9,34,30.3,34,29.5 M24.2,30.1l1.7-2l2,1.7l-1.7,2L24.2,30.1z M7.1,90.3c0.2-0.9,1.2-0.7,1.2-0.7
|
||||
S8.1,88.8,9,88.4C9.9,88,10.4,89,10.4,89l0.4,2.7l-2.9-0.1C7.9,91.6,6.9,91.4,7.1,90.3 M11.2,85.9c0.2-0.9,1.2-0.7,1.2-0.7
|
||||
S12.2,84.4,13,84c0.9-0.4,1.4,0.6,1.4,0.6l0.4,2.7L12,87.2C12,87.2,10.9,86.9,11.2,85.9 M15.3,81.5c0.2-0.9,1.2-0.7,1.2-0.7
|
||||
s-0.2-0.8,0.6-1.2c0.9-0.4,1.4,0.6,1.4,0.6l0.4,2.7L16,82.7C16,82.7,15,82.5,15.3,81.5 M36,40.3c0.2-0.9,1.2-0.7,1.2-0.7
|
||||
s-0.2-0.8,0.6-1.2c0.9-0.4,1.4,0.6,1.4,0.6l0.4,2.7l-2.9-0.1C36.8,41.6,35.8,41.3,36,40.3 M40,55.5c0.2-0.9,1.2-0.7,1.2-0.7
|
||||
s-0.2-0.8,0.6-1.2c0.9-0.4,1.4,0.6,1.4,0.6l0.4,2.7l-2.9-0.1C40.7,56.8,39.7,56.5,40,55.5 M44.7,50.4c0.2-0.9,1.2-0.7,1.2-0.7
|
||||
s-0.2-0.8,0.6-1.2c0.9-0.4,1.4,0.6,1.4,0.6l0.4,2.7l-2.9-0.1C45.5,51.7,44.5,51.4,44.7,50.4 M49.5,45.4c0.2-0.9,1.2-0.7,1.2-0.7
|
||||
s-0.2-0.8,0.6-1.2c0.9-0.4,1.4,0.6,1.4,0.6l0.4,2.7l-2.9-0.1C50.3,46.7,49.2,46.4,49.5,45.4 M54.3,40.4c0.2-0.9,1.2-0.7,1.2-0.7
|
||||
s-0.2-0.8,0.6-1.2c0.9-0.4,1.4,0.6,1.4,0.6l0.4,2.7L55,41.6C55,41.6,54,41.4,54.3,40.4 M4.5,74.3c0.2-0.9,1.2-0.7,1.2-0.7
|
||||
s-0.2-0.8,0.6-1.2C7.2,71.9,7.7,73,7.7,73l0.4,2.7l-2.9-0.1C5.2,75.5,4.2,75.3,4.5,74.3 M15.5,101.2c0.2-0.9,1.2-0.7,1.2-0.7
|
||||
s-0.2-0.8,0.6-1.2c0.9-0.4,1.4,0.6,1.4,0.6l0.4,2.7l-2.9-0.1C16.3,102.5,15.2,102.2,15.5,101.2 M20.2,96.1c0.2-0.9,1.2-0.7,1.2-0.7
|
||||
s-0.2-0.8,0.6-1.2c0.9-0.4,1.4,0.6,1.4,0.6l0.4,2.7L21,97.4C21,97.4,20,97.1,20.2,96.1 M24.9,91c0.2-0.9,1.2-0.7,1.2-0.7
|
||||
s-0.2-0.8,0.6-1.2c0.9-0.4,1.4,0.6,1.4,0.6l0.4,2.7l-2.9-0.1C25.7,92.3,24.7,92,24.9,91 M29.6,85.9c0.2-0.9,1.2-0.7,1.2-0.7
|
||||
s-0.2-0.8,0.6-1.2c0.9-0.4,1.4,0.6,1.4,0.6l0.4,2.7l-2.9-0.1C30.4,87.2,29.4,86.9,29.6,85.9 M50.3,64.1c0.2-0.9,1.2-0.7,1.2-0.7
|
||||
s-0.2-0.8,0.6-1.2c0.9-0.4,1.4,0.6,1.4,0.6l0.4,2.7l-2.9-0.1C51.1,65.4,50.1,65.1,50.3,64.1 M54.6,59.5c0.2-0.9,1.2-0.7,1.2-0.7
|
||||
s-0.2-0.8,0.6-1.2c0.9-0.4,1.4,0.6,1.4,0.6l0.4,2.7l-2.9-0.1C55.3,60.8,54.3,60.5,54.6,59.5 M58.8,54.9C59,54,60,54.2,60,54.2
|
||||
s-0.2-0.8,0.6-1.2c0.9-0.4,1.4,0.6,1.4,0.6l0.4,2.7l-2.9-0.1C59.6,56.2,58.6,55.9,58.8,54.9 M63.1,50.2c0.2-0.9,1.2-0.7,1.2-0.7
|
||||
s-0.2-0.8,0.6-1.2c0.9-0.4,1.4,0.6,1.4,0.6l0.4,2.7l-2.9-0.1C63.8,51.5,62.8,51.3,63.1,50.2 M30.1,105.8c0.2-0.9,1.2-0.7,1.2-0.7
|
||||
s-0.2-0.8,0.6-1.2c0.9-0.4,1.4,0.6,1.4,0.6l0.4,2.7l-2.9-0.1C30.9,107,29.9,106.8,30.1,105.8 M63.1,69.3c0.2-0.9,1.2-0.7,1.2-0.7
|
||||
s-0.2-0.8,0.6-1.2c0.9-0.4,1.4,0.6,1.4,0.6l0.4,2.7l-2.9-0.1C63.8,70.6,62.8,70.3,63.1,69.3 M31.2,73c0-0.1,0.2-0.1,0.7-0.2
|
||||
c0.4-0.1,0.8-0.2,0.8-0.1c0,0.2-0.3,0-0.3,0.4v3.3c0,0.2,0.2,0,0.2,0.2c0,0.2-0.4,0.1-0.7,0.1c-0.3,0-0.7,0.1-0.7-0.1
|
||||
c0-0.2,0.3,0,0.3-0.2v-3.2C31.5,72.9,31.2,73.2,31.2,73 M27.6,74.4c0-0.1,0.1-0.1,0.3-0.2c0.2-0.1,0.3-0.2,0.5-0.1
|
||||
c0.2,0.2,1.2,1.4,1.2,1.4v-1.7c0-0.2-0.3,0.1-0.3-0.1c0-0.1,0.1-0.1,0.4-0.2c0.2-0.1,0.6-0.4,0.6-0.2c0,0.2-0.2,0.1-0.2,0.4v3.3
|
||||
c0,0.3,0,0.3-0.1,0.3c-0.1,0-1.7-2.1-1.7-2.1v2.2c0,0.2,0.4-0.1,0.4,0.1c0,0.1-0.2,0.2-0.5,0.3c-0.2,0.1-0.6,0.3-0.6,0.1
|
||||
c0-0.2,0.3-0.1,0.3-0.3v-2.9C27.8,74.4,27.6,74.6,27.6,74.4 M26.3,76.4c0-1.4-0.9-0.9-0.9-0.9v2.8C25.4,78.4,26.3,78.4,26.3,76.4
|
||||
M24.2,75.9c0-0.1,0.4-0.3,0.7-0.4c0.5-0.2,2.2-1.1,2.2,1c0,1.9-1.3,2.2-1.7,2.4c-0.4,0.2-1,0.5-1,0.4c-0.1-0.1,0.2-0.2,0.2-0.5
|
||||
v-2.3C24.6,75.8,24.2,76.1,24.2,75.9 M30,67.4c0-0.1,0.3-0.1,0.5-0.2c0.3-0.1,0.5-0.1,0.6,0c0.1,0.1,0.7,1.1,0.7,1.1
|
||||
s0.8-1.1,0.8-1.2c0.1-0.1,0.1-0.2,0.4-0.2c0.4,0,0.5,0,0.5,0c0,0.1-0.2,0.1-0.2,0.4c0,0.2,0,2.9,0,3c0,0.3,0.2,0.2,0.2,0.3
|
||||
c0,0.1-0.2,0.1-0.7,0.1c-0.4,0-0.7,0.1-0.7,0c0-0.2,0.2,0,0.2-0.3v-2c0,0-0.8,1.1-0.8,1.1c0,0-1-1.4-1-1.4v2.4
|
||||
c0,0.4,0.4,0.2,0.4,0.3c0,0.1-0.3,0.1-0.5,0.2c-0.2,0.1-0.5,0.2-0.5,0.1c-0.1-0.2,0.3-0.1,0.3-0.5c0-0.4,0-2.6,0-2.8
|
||||
C30.3,67.4,30,67.6,30,67.4 M28.9,67.9c0.1-0.1,0.5-0.2,0.5-0.2c0.1,0.1-0.1,0.1-0.3,0.7c-0.1,0.2-0.7,3.6-0.9,3.7
|
||||
c-0.1,0-1.2-2.7-1.3-2.9c-0.2-0.4-0.4-0.1-0.4-0.3c0-0.1,0.3-0.2,0.5-0.3c0.1-0.1,0.6-0.4,0.7-0.3c0.1,0.1-0.3,0.1-0.1,0.5
|
||||
c0.1,0.3,0.7,1.6,0.7,1.6s0.4-1.5,0.5-2c0.1-0.5-0.3-0.3-0.3-0.4C28.5,68,28.7,67.9,28.9,67.9L28.9,67.9z M24.7,71.4v1.8
|
||||
c0,0,1-0.2,1-1.4C25.7,70.9,24.7,71.4,24.7,71.4 M24.7,69.8V71c0,0,0.7-0.3,0.7-0.9C25.4,69.4,24.7,69.8,24.7,69.8 M24.8,69.5
|
||||
c0.4-0.2,1.5-0.4,1.5,0.5c0,0.7-0.4,0.8-0.4,0.8s0.8,0.1,0.8,0.8c0,0.7-0.4,1.2-0.8,1.5c-0.2,0.1-1.5,0.7-1.6,0.8
|
||||
c-0.1,0.1-0.4,0.2-0.4,0.2c-0.1-0.2,0.2-0.1,0.2-0.6v-3c0-0.6-0.3-0.4-0.3-0.5C23.7,69.8,24.4,69.6,24.8,69.5 M31.4,61.1v1.5
|
||||
c0,0,0.7,0,0.7-0.9C32.1,60.8,31.4,61.1,31.4,61.1 M33.3,64.5c0.2,0,0.3-0.1,0.3-0.1s-0.1,0.5-0.6,0.5c-0.8,0-0.7-1.3-1-1.7
|
||||
c-0.2-0.4-0.6-0.2-0.6-0.2v1.3c0,0.4,0.3,0.2,0.3,0.4c0,0.1-0.2,0.1-0.2,0.1s-0.6,0.2-0.8,0.2c-0.2,0-0.3,0.1-0.3,0
|
||||
c0-0.2,0.2-0.1,0.2-0.5v-2.8c0-0.5-0.3-0.4-0.3-0.5c0-0.1,0.2-0.1,0.4-0.2c0.4-0.1,0.5-0.2,1-0.3c0.5-0.1,1.4,0.1,1.4,0.8
|
||||
c0,0.8-0.4,0.9-0.7,1.1C33.3,63.2,32.9,64.4,33.3,64.5 M27.5,62.5c0.4-0.1,1-0.4,1.7-0.8c0.1-0.1,0.4-0.2,0.5,0
|
||||
c0.1,0.3,0.2,0.6,0.2,0.6c-0.1,0.1-0.2,0-0.4-0.1c-0.1-0.1-0.3-0.2-0.5-0.1c-0.2,0-0.4,0.1-0.4,0.1l0,1.2c0,0,0.4,0,0.5-0.2
|
||||
c0-0.2,0.1-0.4,0.2-0.5c0.1,0,0.1,0.2,0.1,0.6c0,0.1,0,0.2,0,0.2c0,0.4,0,0.6-0.1,0.6c-0.1,0-0.2-0.3-0.2-0.4c0-0.1-0.5,0-0.5,0.1
|
||||
v1.7c0,0,0.3-0.2,0.5-0.3c0.2-0.1,0.5-0.5,0.6-0.7c0.1-0.2,0.2-0.4,0.3-0.4c0.1,0-0.1,0.7-0.1,0.7s0,0.3-0.2,0.4
|
||||
c-0.2,0.1-1.6,0.7-1.7,0.8c-0.2,0.1-0.5,0.3-0.5,0.2c0-0.2,0.2-0.1,0.2-0.6l0-2.8c0,0,0-0.2-0.2-0.3C27.3,62.7,27.2,62.6,27.5,62.5
|
||||
M24.4,63.8c0.2-0.1,0.7-0.3,0.8-0.2c0.1,0.2-0.3,0.1-0.2,0.5c0.1,0.3,0.7,1.8,0.7,1.8l0.5-2.1c0.1-0.5-0.3-0.3-0.3-0.4
|
||||
c0-0.1,0.3-0.2,0.4-0.2c0.1-0.1,0.6-0.3,0.6-0.2c0.1,0.2-0.2,0.2-0.3,0.6c-0.1,0.5-1,3.8-1.2,4c-0.1,0.1-1.3-2.8-1.4-3
|
||||
c-0.1-0.2-0.4-0.1-0.4-0.3C23.7,64,24.2,63.9,24.4,63.8 M39.4,73.1c0-0.1,0.1-0.1,0.3,0c0.2,0.1,0.4,0.1,0.6,0.4
|
||||
c0.2,0.3,1.4,2.4,1.4,2.4l0-1.9c0-0.3-0.2-0.3-0.2-0.4c0-0.1,0.2,0,0.4,0.1c0.2,0.1,0.4,0.1,0.4,0.2c0,0.1-0.2,0-0.2,0.2v3.6
|
||||
c0,0,0,0.2-0.1,0c-0.1-0.1-2-3.1-2-3.1s0,1.9,0,2.1c0,0.2,0.2,0.2,0.2,0.3c0,0.1-0.3,0.1-0.4,0c-0.2,0-0.4,0-0.4-0.2
|
||||
c0-0.1,0.2,0.1,0.2-0.3v-3.1C39.7,73.2,39.4,73.2,39.4,73.1 M41.2,67.5c0-0.1,0.6,0.1,1.1,0.2c0.5,0.1,1.4,0.3,1.4,0.6
|
||||
c0,0.4,0.1,0.7,0,0.7c-0.1,0-0.2-0.4-0.4-0.6c-0.2-0.2-0.7-0.3-0.8-0.3c-0.1,0-0.1,0-0.1,0.1v1.1c0,0,0.3,0.1,0.5,0.1
|
||||
C43,69.3,43,69,43.1,69c0.1,0,0.1,0.2,0,0.6c0,0.4,0,0.7-0.1,0.7c-0.1,0-0.1-0.4-0.3-0.6c-0.2-0.2-0.4-0.2-0.4-0.2v1.8
|
||||
c0,0,0.2,0.2,0.7,0.1c0.5-0.2,0.8-0.5,0.9-0.4c0.1,0.1,0,0.2-0.2,0.5c-0.2,0.4-0.3,0.6-0.6,0.5c-0.2-0.1-0.7-0.3-1.1-0.4
|
||||
c-0.3-0.1-1-0.3-1-0.4c0-0.1,0.3,0.1,0.3-0.3v-3.2C41.5,67.6,41.2,67.6,41.2,67.5 M40.4,66.9c0.2,0,0.1,0.6,0.2,0.8
|
||||
c0,0.4,0.2,0.7,0,0.7c-0.2,0-0.4-0.6-0.7-0.9c-0.3-0.3-1.3-0.8-1.3,1.3c0,1.8,0.8,1.8,1.2,1.6c0.4-0.1,0.6-0.5,0.6-0.4
|
||||
c0.1,0-0.4,0.9-1.2,1c-0.9,0.1-1.7-0.8-1.7-2.1c0-1.4,0.7-2.2,1.5-2.2c0.7,0,0.9,0.5,1.2,0.5C40.4,67.3,40.2,66.9,40.4,66.9
|
||||
M42.7,62.1c0-0.2,0.3,0,0.8,0.2c0.5,0.2,0.9,0.3,0.8,0.4c0,0.1-0.4-0.1-0.3,0.2c0,0.2,0.6,2.1,0.6,2.1s0.6-1.5,0.7-1.6
|
||||
c0-0.2-0.2-0.2-0.2-0.3c0-0.1,0.2,0,0.4,0.1c0.2,0.1,0.4,0.2,0.4,0.3c0,0.1-0.2-0.1-0.3,0c-0.1,0.2-1.4,3.1-1.4,3.1l-1.3-4.2
|
||||
C42.8,62.2,42.7,62.2,42.7,62.1 M39.7,61c0-0.1,0.2,0,0.2,0l1.2,0.4c0,0,0.2,0.1,0.2,0.2c0,0.1-0.4-0.1-0.4,0.2V65
|
||||
c0,0,0.1,0.2,0.5,0.1c0.4-0.2,1-0.5,1-0.5s0.3-0.1,0.2,0.1c-0.1,0.2-0.3,0.8-0.3,0.8s-0.1,0.2-0.4,0.2c-0.3-0.1-1.1-0.3-1.3-0.3
|
||||
c-0.2-0.1-0.8-0.2-0.8-0.2s-0.1,0-0.1-0.1c0-0.1,0.4,0,0.4-0.3v-3.2C40,61.1,39.7,61.1,39.7,61 M44.2,72.5c0-0.2,0.3,0.1,0.3-0.3
|
||||
v-3.1c0-0.4-0.2-0.4-0.2-0.5c0-0.2,0.3,0.1,0.4,0.1c0.1,0,1,0.5,1.1,0.5c0.1,0,1.1,0.4,1.1,1.5c0,0.7-0.6,0.6-0.6,0.6
|
||||
s0.6,0.4,0.6,0.9c0,0.5,0.1,1,0.1,1.1c0,0.1,0.1,0.4,0.4,0.1c0,0,0,0.6-0.7,0.4c-0.5-0.2-0.6-0.6-0.6-0.9c0-0.3-0.2-1.7-0.8-1.7
|
||||
v1.4c0,0.4,0.2,0.3,0.2,0.5c0,0.1-0.3-0.1-0.6-0.2C44.5,72.7,44.2,72.6,44.2,72.5 M45.3,69.3v1.5c0.1,0,0.8,0.5,0.8-0.4
|
||||
C46.1,69.4,45.3,69.3,45.3,69.3 M43.7,74.8c0.1-0.2-0.1-0.3-0.1-0.4c0-0.1,0.3,0.1,0.5,0.2c0.2,0.1,0.5,0.2,0.5,0.4
|
||||
c0.1,0.2,1,3.4,1.1,3.7c0.1,0.3,0.3,0.2,0.2,0.4c0,0.1-0.3-0.1-0.8-0.3c-0.5-0.2-0.7-0.2-0.7-0.3c0-0.1,0.5,0.1,0.3-0.2
|
||||
c-0.1-0.2-0.2-0.8-0.2-0.8l-1.3-0.4l-0.2,0.6c-0.1,0.3,0.2,0.3,0.1,0.4c0,0.1-0.2,0-0.4-0.1c-0.2-0.1-0.3-0.1-0.3-0.2
|
||||
c0-0.1,0.2,0,0.3-0.2C42.9,77.4,43.7,75,43.7,74.8 M43.9,75.2l-0.4,1.4l1,0.3L43.9,75.2z M69.1,35.8v41.7
|
||||
c0.5,24.9-19.9,33.8-33.4,33.8c-13.5,0-33.8-8.8-33.4-33.8V35.8h12.4c-0.1-0.8,0.1-1.3,0.2-1.3c17-3.4,25.2-3.6,42.2,0
|
||||
c0.4,0.4,0.4,0.9,0.4,1.3H69.1z M8.5,96.3l13-13.9v-4.1l-1.5,0c0,0-1-0.3-0.8-1.3c0.2-0.9,1.2-0.7,1.2-0.7s-0.2-0.8,0.6-1.2
|
||||
c0.2-0.1,0.3-0.1,0.4-0.1l0-2.7L5.3,89.6C6.1,92.1,7.2,94.3,8.5,96.3 M24.7,60.8c0.2-0.1,0.4-0.2,0.5-0.3c0.6-0.3,1.8-0.9,3-1.4
|
||||
c1.2-0.5,2.6-1,3.8-1c1.1,0,2.1,0.3,2.7,0.7c0.3,0.2,0.6,0.3,0.7,0.5l0.1,0.1c0,0,0-0.1,0.1-0.1c0.1-0.2,0.3-0.3,0.6-0.5
|
||||
c0.6-0.4,1.4-0.6,2.7-0.6c1.4,0,2.9,0.5,4.1,1.1l0.3,0.1L64.2,37h-9.5L36.2,56.7v-9.5L45.8,37H3.5v40.5c0,1.5,0,3,0.1,4.4l9.1-9.7
|
||||
h8.8v-7.7c-0.2,0.2-0.4,0.2-0.4,0.2s0.2-0.7-0.4-0.8c0,0-0.1,0-0.2,0c-0.3,0-0.5,0.2-0.7,0.3c-0.3,0.3-1.3,1.4-1.5,1.6
|
||||
c-0.2-0.2-1.1-1.3-1.5-1.6c-0.2-0.2-0.4-0.3-0.7-0.3c-0.1,0-0.1,0-0.2,0c-0.6,0.1-0.4,0.8-0.4,0.8s-0.6,0.1-0.6-0.7
|
||||
c0-0.6,0.5-0.9,0.9-1.1c0.6-0.1,1.3-0.2,1.4-1.2c0-0.2,0-0.3,0-0.3s-0.2,0.3-0.8,0.6c-0.7,0.3-2.4,0.3-2.4,1.3
|
||||
c0,0.4,0.4,0.4,0.4,0.4s0,0.2-0.3,0.2c-0.1,0-0.1,0-0.2,0c-0.4-0.1-0.5-0.5-0.5-1c0-0.3-0.2-0.8-0.6-0.7c-0.1,0-0.2,0-0.3,0.1
|
||||
c-0.3,0.2-0.2,0.5-0.2,0.5s-0.4-0.2-0.3-0.7c0.1-0.4,0.3-0.6,0.7-0.7c0,0,0.1,0,0.1,0c0.5-0.1,0.8,0.1,0.8,0.1s-0.1-0.3-0.1-0.7
|
||||
c0-0.3,0.2-0.6,0.6-0.7c0.7-0.1,0.8,0.3,0.7,0.6c0,0-0.2-0.2-0.3-0.1c0,0-0.1,0-0.1,0c-0.1,0.1-0.2,0.1-0.2,0.2
|
||||
c-0.1,0.3,0.1,0.6,0.1,0.7c0.1,0.2,0.5,0.3,1.1,0.2c0.6-0.1,1-0.5,1.2-0.9c0.1-0.2,0.2-0.3,0.1-0.5l0.3-3.6c0,0,0.1-0.9-0.5-1
|
||||
c-0.1,0-0.1,0-0.2,0c-0.5,0.1-1.1,0.8-0.9,1.7c0.1,0.7-0.2,1.2-0.5,1.3c-0.4,0.1-0.7,0-0.8-0.3c0.7,0,0.7-0.6,0.5-0.9
|
||||
c-0.1-0.1-0.2-0.1-0.4-0.1c-0.7,0.1-1.8,1.1-2,1.6c-0.2,0.5,0.2,0.4,0.4,0.8c0.1,0.3-0.2,0.6-0.2,0.6c0,0.1,0,0.2,0,0.3
|
||||
c-0.1,0.3-0.2,0.4-0.4,0.4c-0.1,0-0.2,0-0.3,0c0.2-0.1,0.2-0.3,0.3-0.4c0-0.1,0-0.2,0-0.2s-0.2,0-0.4-0.3c-0.2-0.3,0-0.4-0.2-0.8
|
||||
c-0.2-0.4-0.9-0.7-1.4-0.8c0,0-0.1,0-0.1,0c-0.1,0-0.2,0.1-0.3,0.1c0,0-0.1,0-0.1,0c-0.4,0-0.3-0.2-0.6-0.2c-0.2,0-0.3,0.2-0.2,0.4
|
||||
c0,0,0,0.1,0,0.1c-0.2-0.1-0.3-0.3-0.3-0.5c0-0.5,0.3-0.9,0.6-0.9c0.4,0,0.5,0.2,0.6,0.2c0.2-0.9-0.5-0.6-0.8-1
|
||||
c-0.2-0.3-0.1-0.4-0.1-0.5c0-0.2-0.2-0.2-0.4-0.1c-0.1,0-0.1,0-0.2,0c0,0,0.1-0.4,0.5-0.5c0.1,0,0.3,0,0.6,0.1
|
||||
c0.2-0.1,0.4,0,0.5,0.2c0.1,0.2,0,0.4,0,0.6c0.1,0.6,0.4,0.6,0.5,0.5c-0.3-0.8,0.1-1.1,0.1-1.2c0-0.1,0-0.3-0.2-0.4
|
||||
c0,0-0.1,0,0-0.1c0,0,0.8,0,0.9,0.5c0,0,0.3,0.2,0.3,0.6c0,0.5-0.3,0.6-0.4,0.7c0.1,0.6,0.4,0.6,0.7,0.6c0.3,0,0.6-0.2,0.6-0.2
|
||||
c0.5-0.2,1.6-0.9,1.3-1.4c-0.1-0.2-0.3-0.4-0.6-0.3c-0.1,0-0.2,0.1-0.3,0.1c-0.3,0.3-0.2,0.7-0.2,0.7c-0.5,0.1-0.7-0.7-0.4-1
|
||||
c0.2-0.2,0.5-0.3,0.7-0.4c0.3-0.1,0.6,0,1-0.1c0.4-0.1,0.7-0.3,0.9-0.8c0.2-0.3,0.2-0.8,0-1.2c-0.2-0.4-0.6-0.9-1.1-1
|
||||
c-0.1,0.9-0.6,1.6-1.2,2c-0.1,0.1-0.3,0.2-0.5,0.2c-0.1,0-0.2,0-0.1,0c0.8-0.9,0.6-1.9,0.6-2c-0.1,0.1-0.7,1.2-1.7,1.7
|
||||
c-0.1,0-0.2,0.1-0.3,0.1c-0.6,0.1-1.2-0.2-0.9-0.2c0.4-0.1,1.9-1,1.5-2.9c-0.1,0.1-0.7,1.3-1.6,1.9c-0.4,0.2-0.7,0.4-1.1,0.4
|
||||
c-0.7,0.1-1.2-0.1-1.1-0.2c0,0,1.8-0.9,1.9-1.7c-0.1,0-0.6,0.4-1.1,0.5c-0.1,0-0.2,0-0.2,0C6,52.2,6,51.1,6,51.1
|
||||
c0.1,0,1.6,0.1,2.8-2.4c0,0-0.8,0.3-1.7,0.4c-0.5,0.1-0.8-0.3-0.7-0.3c0.1,0,0.2,0,0.3,0c0.3,0,0.7-0.2,1.2-0.6
|
||||
c-0.1-0.1-2.1-0.9-1.3-2.2c0,0,0.5,0.5,1.2,0.5c0.5,0,1.3,0,1.5-0.5c0,0-1-0.1-2-0.7c-0.6-0.4-0.8-1.3-0.6-1
|
||||
c0.2,0.3,0.5,0.3,0.8,0.4c0.3,0.1,0.5,0,0.5,0s-1.5-1.4-0.5-2.5c0,0,0.5,1.4,1.7,1.4c0,0-0.6-0.6-0.7-1.3c-0.1-0.5-0.1-1.1,0-0.9
|
||||
c0.1,0.1,0.2,0.4,0.3,0.5c0.2,0.3,0.5,0.6,0.7,0.9c0,0-0.2-0.7,0.1-1.4c0-0.1,0.4-0.7,0.4-0.5c0,0,0,0.4,0,0.6
|
||||
c0.1,0.5,0.3,1.1,1.1,2c1.1,1.2,2.4,1.1,2.4,1.9c0,0.9-1.1,0.7-1.8,0.7c-0.2,0-0.2,0.4,0,0.6c0.6,0.8,3,1,3.8-0.3
|
||||
c0.3-0.4,0.3-1,0.2-1.5c-0.2-0.7-0.8-0.7-1.8-0.9c-0.7-0.2-0.5-0.5-0.4-0.5c0,0,0.2,0.1,0.4,0.1c0.5,0,0.2-0.7,0.2-0.7
|
||||
c-0.1,0-0.7,0.2-1.2,0.3c-0.6,0.1-1.4-0.2-1.4-0.6c0-0.5,0.6-0.7,0.6-0.5c0,0-0.4,0.7,0.8,0.7c0.4,0,1.1-0.1,1.1-0.1
|
||||
c0-0.2-0.4-0.5-0.6-0.5c-0.2,0-0.4,0.1-0.7,0c-0.1-0.3,0.2-0.6,0.4-0.7c0.2-0.1,0.4-0.1,0.5-0.1c0.1,0,0.2-0.5,1-0.5
|
||||
c0.4,0,1,0.3,1.3,0.3c0.3,0,0.7-0.2,0.8-0.1c0,0.1-0.2,0.4-0.1,0.6c0,0.6,0.9,2.8,2,3c1-0.2,2-2.4,2-3c0-0.2-0.2-0.5-0.1-0.6
|
||||
c0-0.1,0.5,0.1,0.8,0.1c0.3,0,0.8-0.3,1.3-0.3c0.8,0,0.8,0.4,1,0.5c0.1,0,0.3,0,0.5,0.1c0.2,0.1,0.6,0.4,0.4,0.7
|
||||
c-0.3,0-0.5,0-0.7,0c-0.3,0-0.6,0.3-0.6,0.5c0,0,0.7,0.1,1.1,0.1c1.1,0,0.8-0.7,0.8-0.7c0-0.1,0.6,0,0.6,0.5c0,0.4-0.7,0.7-1.4,0.6
|
||||
c-0.5,0-1.1-0.3-1.2-0.3c-0.1,0-0.4,0.7,0.1,0.7c0.2,0,0.4-0.1,0.4-0.1c0.1,0,0.3,0.3-0.4,0.5c-1,0.2-1.5,0.2-1.8,0.9
|
||||
c-0.2,0.5-0.1,1,0.2,1.5c0.8,1.3,3.2,1.1,3.8,0.3c0.2-0.3,0.2-0.6,0-0.6c-0.7,0.1-1.7,0.2-1.8-0.7c0-0.7,1.2-0.7,2.4-1.9
|
||||
c0.9-0.9,1.1-1.5,1.1-2c0-0.1,0-0.6,0-0.6c0-0.1,0.4,0.4,0.4,0.5c0.3,0.7,0.1,1.4,0.1,1.4c0.3-0.2,0.6-0.6,0.7-0.9
|
||||
c0.1-0.2,0.2-0.4,0.3-0.5c0.1-0.2,0.1,0.5,0,0.9c-0.1,0.7-0.7,1.3-0.7,1.3c1.2,0,1.7-1.4,1.7-1.4c0.9,1.1-0.5,2.5-0.5,2.5
|
||||
s0.2,0.1,0.5,0c0.3-0.1,0.6-0.2,0.8-0.4c0.2-0.3,0,0.6-0.6,1c-1,0.6-2,0.7-2,0.7c0.2,0.5,1,0.6,1.5,0.5c0.7-0.1,1.2-0.5,1.2-0.5
|
||||
c0.7,1.3-1.2,2.2-1.3,2.2c0.5,0.4,1,0.6,1.2,0.6c0.1,0,0.2,0,0.3,0c0.1,0-0.2,0.3-0.7,0.3C28.8,49,28,48.7,28,48.7
|
||||
c1.2,2.5,2.6,2.4,2.8,2.4c0,0,0,1.1-1.6,1.1c-0.1,0-0.2,0-0.2,0c-0.6-0.1-1.1-0.5-1.1-0.5c0,0.8,1.9,1.7,1.9,1.7
|
||||
c0.1,0.1-0.4,0.3-1.1,0.2c-0.3-0.1-0.7-0.2-1.1-0.4c-0.8-0.6-1.5-1.8-1.6-1.9c-0.5,1.9,1.1,2.8,1.5,2.9c0.2,0-0.4,0.3-0.9,0.2
|
||||
c-0.1,0-0.2,0-0.3-0.1c-1.1-0.5-1.7-1.6-1.7-1.7c0,0.1-0.2,1,0.6,2c0,0,0,0-0.1,0c-0.1,0-0.3-0.1-0.5-0.2c-0.6-0.4-1.1-1.1-1.2-2
|
||||
c-0.5,0.1-0.9,0.6-1.1,1c-0.2,0.4-0.2,0.8,0,1.2c0.3,0.5,0.6,0.7,0.9,0.8c0.3,0.1,0.6,0.1,1,0.1c0.3,0,0.5,0.1,0.7,0.4
|
||||
c0.3,0.3,0.1,1.2-0.4,1c0,0,0.2-0.4-0.2-0.7c-0.1-0.1-0.2-0.1-0.3-0.1c-0.2,0-0.5,0.1-0.6,0.3c-0.3,0.5,0.8,1.2,1.3,1.4
|
||||
c0,0,0.3,0.2,0.6,0.2c0.3,0,0.6,0,0.7-0.6c-0.1-0.1-0.4-0.2-0.4-0.7c0-0.4,0.3-0.6,0.3-0.6c0.1-0.5,0.9-0.5,0.9-0.5
|
||||
c0.1,0,0,0.1,0,0.1c-0.2,0.1-0.3,0.2-0.2,0.4c0,0.1,0.4,0.4,0.1,1.2c0.1,0,0.4,0,0.5-0.5c0-0.2-0.1-0.4,0-0.6
|
||||
c0.1-0.1,0.3-0.3,0.5-0.2c0.2-0.1,0.4-0.1,0.6-0.1c0.4,0.1,0.5,0.5,0.5,0.5s0,0,0,0c0,0-0.1,0-0.1,0c-0.2,0-0.5,0-0.4,0.1
|
||||
c0,0.1,0.1,0.2-0.1,0.5c-0.3,0.4-1,0.1-0.8,1c0,0,0.2-0.3,0.6-0.2c0.3,0,0.6,0.4,0.6,0.9c0,0.2-0.1,0.4-0.3,0.5c0,0,0,0,0-0.1
|
||||
c0.1-0.2,0-0.4-0.2-0.4c-0.3,0-0.2,0.2-0.6,0.2c-0.1,0-0.1,0-0.1,0c-0.2,0-0.2-0.1-0.3-0.1c0,0-0.1,0-0.1,0
|
||||
c-0.5,0.1-1.2,0.4-1.4,0.8c-0.2,0.4,0,0.5-0.2,0.8c-0.2,0.3-0.4,0.3-0.4,0.3s0,0.1,0,0.2C24.7,60.7,24.7,60.8,24.7,60.8 M23.4,61.3
|
||||
c0.3-0.1,0.7-0.2,1-0.4c0-0.1-0.1-0.1-0.1-0.3c0-0.1,0-0.2,0-0.3c0,0-0.3-0.3-0.2-0.6c0.2-0.4,0.5-0.3,0.4-0.8
|
||||
c-0.2-0.6-1.3-1.5-2-1.6c-0.2,0-0.3,0-0.4,0.1c-0.2,0.2-0.3,0.8,0.5,0.9c-0.2,0.3-0.4,0.4-0.8,0.3c-0.3-0.1-0.7-0.6-0.6-1.3
|
||||
c0.2-0.9-0.4-1.6-0.9-1.7c-0.1,0-0.1,0-0.2,0c-0.6,0.1-0.5,1-0.5,1l0.3,3.6c0,0.1,0,0.3,0.1,0.5c0.2,0.3,0.6,0.7,1.2,0.9
|
||||
c0.5,0.1,0.9,0,1.1-0.2c0-0.1,0.3-0.4,0.1-0.7c0-0.1-0.1-0.2-0.2-0.2c0,0-0.1,0-0.1,0c-0.2,0-0.3,0.1-0.3,0.1
|
||||
c-0.1-0.2,0-0.7,0.7-0.6c0.4,0.1,0.6,0.4,0.6,0.7c0,0.3-0.1,0.7-0.1,0.7S23.2,61.3,23.4,61.3 M21.6,62.6c0-0.1,0-0.2,0-0.3
|
||||
c-0.5-0.1-1-0.2-1.3-0.4c-0.6-0.3-0.8-0.6-0.8-0.6s0,0,0,0.3c0.1,1,0.7,1.1,1.4,1.2c0.3,0.1,0.6,0.3,0.8,0.5V62.6z M44.1,82.8
|
||||
c-0.1,0.2-0.1,0.6,0,0.8c0.5,0.7,2.6,0.9,3.5,0C46.5,83.4,45.3,83.1,44.1,82.8 M49.9,80.9c0.3,0.4,0.7,0.7,1,0.8c1-0.2,2-2.4,2-3
|
||||
c0-0.2-0.2-0.5-0.1-0.6c0-0.1,0.5,0.1,0.8,0.1c0.3,0,0.9-0.3,1.3-0.3c0.8,0,0.8,0.4,1,0.5c0.1,0,0.3,0,0.5,0.1
|
||||
c0.2,0.1,0.6,0.4,0.4,0.7c-0.4,0-0.5,0-0.7,0c-0.3,0-0.6,0.3-0.6,0.5c0,0,0.7,0.1,1.1,0.1c1.1,0,0.8-0.7,0.8-0.7
|
||||
c0-0.1,0.6,0,0.6,0.5c0,0.4-0.7,0.7-1.4,0.6c-0.5,0-1.1-0.3-1.2-0.3c-0.1,0-0.4,0.7,0.1,0.7c0.2,0,0.4-0.1,0.4-0.1
|
||||
c0.1,0,0.3,0.3-0.4,0.5c-1,0.2-1.5,0.2-1.8,0.9c-0.2,0.5-0.1,1,0.2,1.5c0.8,1.3,3.2,1.1,3.8,0.3c0.2-0.3,0.2-0.6,0-0.6
|
||||
c-0.7,0.1-1.7,0.2-1.8-0.7c0-0.7,1.2-0.7,2.4-1.9c0.9-0.9,1.1-1.5,1.1-2c0-0.1,0-0.6,0-0.6c0-0.1,0.4,0.4,0.4,0.5
|
||||
c0.3,0.7,0.1,1.4,0.1,1.4c0.3-0.2,0.6-0.6,0.7-0.9c0.1-0.2,0.2-0.4,0.3-0.5c0.1-0.2,0.1,0.5,0,0.9c-0.1,0.7-0.7,1.3-0.7,1.3
|
||||
c1.2,0,1.7-1.4,1.7-1.4c0.9,1.1-0.5,2.5-0.5,2.5s0.2,0.1,0.5,0c0.3-0.1,0.6-0.2,0.8-0.4c0.2-0.3,0,0.6-0.6,1c-1,0.6-2,0.7-2,0.7
|
||||
c0.2,0.5,1,0.6,1.5,0.5c0.7-0.1,1.2-0.5,1.2-0.5c0.7,1.3-1.2,2.2-1.3,2.2c0.5,0.4,1,0.6,1.2,0.6c0.1,0,0.2,0,0.3,0
|
||||
c0.1,0-0.2,0.3-0.7,0.3c-0.9-0.1-1.7-0.4-1.7-0.4c1.2,2.5,2.6,2.4,2.8,2.4c0,0,0,1.1-1.6,1.1c-0.1,0-0.2,0-0.2,0
|
||||
c-0.6-0.1-1.1-0.5-1.1-0.5c0,0.8,1.9,1.7,1.9,1.7c0.1,0.1-0.4,0.3-1.1,0.2c-0.3-0.1-0.7-0.2-1.1-0.4c-0.8-0.6-1.5-1.8-1.6-1.9
|
||||
c-0.5,1.9,1.1,2.8,1.5,2.9c0.2,0-0.4,0.3-0.9,0.2c-0.1,0-0.2,0-0.3-0.1c-1.1-0.5-1.7-1.6-1.7-1.7c0,0.1-0.2,1,0.6,2c0,0,0,0-0.1,0
|
||||
c-0.1,0-0.3-0.1-0.5-0.2c-0.6-0.4-1.1-1.1-1.2-2c-0.5,0.1-0.9,0.6-1.1,1c-0.2,0.4-0.2,0.8,0,1.2c0.3,0.5,0.6,0.7,0.9,0.8
|
||||
c0.3,0.1,0.6,0,1,0.1c0.3,0,0.5,0.1,0.7,0.4c0.3,0.3,0.1,1.2-0.4,1c0,0,0.2-0.4-0.2-0.7c-0.1-0.1-0.2-0.1-0.3-0.2
|
||||
c-0.2,0-0.5,0.1-0.6,0.3c-0.3,0.5,0.8,1.2,1.3,1.4c0,0,0.3,0.2,0.6,0.2c0.3,0,0.6,0,0.7-0.6c-0.1-0.1-0.4-0.2-0.4-0.7
|
||||
c0-0.4,0.3-0.6,0.3-0.6c0.1-0.5,0.9-0.5,0.9-0.5c0.1,0,0,0.1,0,0.1C59,92.7,58.9,92.9,59,93c0,0.1,0.4,0.4,0.1,1.2
|
||||
c0.1,0,0.4,0,0.5-0.5c0-0.2-0.1-0.4,0-0.6c0.1-0.2,0.3-0.3,0.5-0.2c0.2-0.1,0.4-0.1,0.6-0.1c0.4,0.1,0.5,0.5,0.5,0.5s0,0.1,0,0
|
||||
c0,0-0.1,0-0.1,0c-0.2,0-0.5,0-0.4,0.1c0,0.1,0.1,0.2-0.1,0.5c-0.3,0.4-1,0.1-0.8,1c0,0,0.2-0.3,0.6-0.2c0.3,0,0.6,0.4,0.6,0.9
|
||||
c0,0.2-0.1,0.4-0.3,0.5c0,0,0,0,0-0.1c0.1-0.2,0-0.4-0.2-0.4c-0.3,0-0.2,0.2-0.6,0.2c-0.1,0-0.1,0-0.1,0c-0.1,0-0.2-0.1-0.3-0.1
|
||||
c0,0-0.1,0-0.1,0c-0.5,0.1-1.2,0.4-1.4,0.8c-0.2,0.4,0,0.5-0.2,0.8c-0.2,0.3-0.4,0.3-0.4,0.3s0,0.1,0,0.2c0,0.1,0.1,0.3,0.3,0.4
|
||||
c0,0,0.1,0,0,0c-0.1,0-0.2,0.1-0.3,0c-0.1,0-0.3-0.1-0.4-0.4c0-0.1,0-0.2,0-0.3c0,0-0.3-0.3-0.2-0.6c0.2-0.4,0.5-0.3,0.4-0.8
|
||||
c-0.2-0.6-1.3-1.5-2-1.6c-0.2,0-0.3,0-0.4,0.1c-0.2,0.2-0.3,0.8,0.5,0.9c-0.1,0.3-0.4,0.4-0.8,0.3c-0.3-0.1-0.7-0.6-0.6-1.3
|
||||
c0.2-0.9-0.4-1.6-0.9-1.7c-0.1,0-0.2,0-0.2,0c-0.6,0.1-0.5,1-0.5,1l0.3,3.6c0,0.1,0,0.3,0.1,0.5c0.2,0.3,0.6,0.7,1.2,0.9
|
||||
c0.5,0.1,0.9,0,1.1-0.2c0-0.1,0.3-0.4,0.1-0.7c0-0.1-0.1-0.2-0.2-0.2c0,0-0.1,0-0.1,0c-0.2,0-0.3,0.1-0.3,0.1
|
||||
c-0.1-0.2,0-0.7,0.7-0.6c0.4,0.1,0.6,0.4,0.6,0.7c0,0.3-0.1,0.7-0.1,0.7s0.4-0.1,0.8-0.1c0,0,0.1,0,0.1,0c0.4,0.1,0.6,0.3,0.7,0.7
|
||||
c0.1,0.4-0.3,0.7-0.3,0.7s0.1-0.3-0.2-0.5c-0.1,0-0.2-0.1-0.3-0.1c-0.4-0.1-0.7,0.4-0.6,0.7c0,0.5-0.1,1-0.5,1c-0.1,0-0.2,0-0.2,0
|
||||
c-0.3,0-0.3-0.2-0.3-0.2s0.4,0,0.4-0.4c0-1-1.7-1-2.4-1.3c-0.6-0.3-0.8-0.6-0.8-0.6s0,0,0,0.3c0.1,1,0.7,1.1,1.4,1.2
|
||||
c0.4,0.1,0.9,0.5,0.9,1.1c0,0.8-0.6,0.7-0.6,0.7s0.2-0.7-0.4-0.8c0,0-0.1,0-0.2,0c-0.3,0-0.5,0.2-0.7,0.3c-0.3,0.3-1.3,1.4-1.5,1.6
|
||||
c-0.2-0.2-1.1-1.3-1.5-1.6c-0.2-0.2-0.4-0.3-0.7-0.3c-0.1,0-0.1,0-0.2,0c-0.6,0.1-0.4,0.8-0.4,0.8s-0.6,0.1-0.6-0.7
|
||||
c0-0.6,0.5-0.9,0.9-1.1c0.6-0.1,1.3-0.2,1.4-1.2c0-0.2,0-0.3,0-0.3s-0.2,0.3-0.8,0.6c-0.7,0.3-2.4,0.3-2.4,1.3
|
||||
c0,0.4,0.4,0.4,0.4,0.4s0,0.2-0.3,0.2c-0.1,0-0.1,0-0.2,0c-0.4-0.1-0.5-0.5-0.5-1c0-0.3-0.2-0.8-0.6-0.7c-0.1,0-0.2,0-0.3,0.1
|
||||
c-0.3,0.2-0.2,0.5-0.2,0.5s-0.4-0.2-0.3-0.7c0.1-0.4,0.3-0.6,0.7-0.7c0,0,0.1,0,0.1,0c0.5-0.1,0.8,0.1,0.8,0.1s-0.1-0.3-0.1-0.7
|
||||
c0-0.3,0.2-0.6,0.6-0.7c0.7-0.1,0.8,0.3,0.7,0.6c0,0-0.2-0.2-0.3-0.1c0,0-0.1,0-0.1,0c-0.1,0.1-0.2,0.1-0.2,0.2
|
||||
C46.8,98,47,98.3,47,98.3c0.1,0.2,0.5,0.3,1.1,0.2c0.6-0.1,1-0.5,1.2-0.9c0.1-0.2,0.2-0.3,0.1-0.5l0.3-3.6c0,0,0.1-0.9-0.5-1
|
||||
c-0.1,0-0.1,0-0.2,0c-0.5,0.1-1.1,0.8-0.9,1.7c0.1,0.7-0.2,1.2-0.6,1.3c-0.4,0.1-0.7,0-0.8-0.3c0.7-0.1,0.7-0.6,0.5-0.9
|
||||
c-0.1-0.1-0.2-0.1-0.4-0.1c-0.7,0.1-1.8,1.1-2,1.6c-0.2,0.5,0.2,0.4,0.4,0.8c0.1,0.3-0.2,0.6-0.2,0.6c0,0.1,0,0.2,0,0.3
|
||||
c-0.1,0.3-0.2,0.4-0.4,0.4c-0.1,0-0.2,0-0.3,0c0.2-0.1,0.2-0.3,0.3-0.4c0-0.1,0-0.2,0-0.2s-0.2,0-0.4-0.3c-0.2-0.3,0-0.4-0.2-0.8
|
||||
c-0.2-0.4-0.9-0.7-1.4-0.8c0,0-0.1,0-0.1,0c-0.1,0-0.2,0.1-0.3,0.1c0,0-0.1,0-0.1,0c-0.4,0-0.3-0.2-0.6-0.2c-0.2,0-0.3,0.2-0.2,0.4
|
||||
c0,0,0,0.1,0,0.1c-0.2-0.1-0.3-0.3-0.3-0.5c0-0.5,0.3-0.9,0.6-0.9c0.4,0,0.5,0.2,0.6,0.2c0.2-0.9-0.5-0.6-0.8-1
|
||||
c-0.2-0.3-0.1-0.4-0.1-0.5c0-0.2-0.2-0.2-0.4-0.1c-0.1,0-0.1,0-0.1,0c0,0,0.1-0.4,0.5-0.5c0.1,0,0.3,0,0.6,0.1
|
||||
c0.2-0.1,0.4,0,0.5,0.2c0.1,0.2,0,0.4,0,0.6c0.1,0.6,0.4,0.6,0.5,0.5c-0.3-0.8,0.1-1.1,0.1-1.2c0-0.1,0-0.3-0.2-0.4
|
||||
c0,0-0.1-0.1,0-0.1c0,0,0.8,0,0.9,0.5c0,0,0.3,0.2,0.3,0.6c0,0.5-0.3,0.6-0.4,0.7c0.1,0.6,0.4,0.6,0.7,0.6c0.3,0,0.6-0.2,0.6-0.2
|
||||
c0.5-0.2,1.6-0.9,1.3-1.4c-0.1-0.2-0.3-0.4-0.6-0.3c-0.1,0-0.2,0.1-0.3,0.2c-0.3,0.3-0.2,0.7-0.2,0.7c-0.5,0.1-0.7-0.7-0.4-1
|
||||
c0.2-0.2,0.5-0.3,0.7-0.4c0.3-0.1,0.6,0,1-0.1c0.4-0.1,0.7-0.3,0.9-0.8c0.2-0.3,0.2-0.8,0-1.2c-0.2-0.4-0.6-0.9-1.1-1
|
||||
c-0.1,0.9-0.6,1.6-1.2,2c-0.1,0.1-0.3,0.2-0.5,0.2c-0.1,0-0.2,0-0.1,0c0.8-0.9,0.6-1.9,0.6-2c-0.1,0.1-0.7,1.2-1.7,1.7
|
||||
c-0.1,0-0.2,0.1-0.3,0.1c-0.6,0.1-1.2-0.2-0.9-0.2c0.4-0.1,1.9-1,1.5-2.9c-0.1,0.1-0.7,1.3-1.6,1.9c-0.4,0.2-0.7,0.4-1.1,0.4
|
||||
c-0.7,0.1-1.2-0.1-1.1-0.2c0,0,1.8-0.9,1.9-1.7c-0.1,0-0.6,0.4-1.1,0.5c-0.1,0-0.2,0-0.2,0c-1.6,0-1.6-1.1-1.6-1.1
|
||||
c0.1,0,1.6,0.1,2.8-2.4c0,0-0.8,0.3-1.7,0.4c-0.5,0.1-0.8-0.3-0.7-0.3c0.1,0,0.2,0,0.3,0c0.3,0,0.7-0.2,1.2-0.6
|
||||
c-0.1-0.1-2.1-0.9-1.3-2.2c0,0,0.5,0.5,1.2,0.5c0.5,0,1.3-0.1,1.5-0.5c0,0-1-0.1-2-0.7c0,0-0.1,0-0.1-0.1c-0.5,0-0.9,0-1.4,0.1
|
||||
c-0.3,1.3-1.4,2.2-2.6,2.2c-1.3,0-2.3-0.9-2.6-2.2c-0.8-0.1-1.6-0.2-2.4-0.1l-17.9,19.1c1.7,1.6,3.6,3,5.6,4.1l16.8-17.9V97
|
||||
l-10.5,11.2c3.8,1.3,7.7,1.9,11.1,1.9c13.1,0,32.6-8.6,32.2-32.5V62.1L59.5,71h-8.9l17.3-18.4V42.6L49.7,61.8
|
||||
c0.1,0.1,0.1,0.1,0.1,0.2L49.9,80.9z M47.9,86.6h6v-2.4h-6L47.9,86.6z M50.9,91.3c2.7,0,2.9-2.5,2.9-2.5H48
|
||||
C48,88.8,48.2,91.3,50.9,91.3 M15.4,49.6h6v-2.4h-6L15.4,49.6z M18.4,54.3c2.7,0,2.9-2.5,2.9-2.5h-5.8
|
||||
C15.5,51.8,15.7,54.3,18.4,54.3 M34.4,81.8c0,0.7,0.6,1.3,1.3,1.3c0.7,0,1.3-0.6,1.3-1.3c0-0.7-0.6-1.3-1.3-1.3
|
||||
C35,80.6,34.4,81.1,34.4,81.8 M22.4,62.5v19.6c0,0,0.2,0.3,1.5-0.1c1.5-0.4,3.4-2.3,6-2.9c2-0.4,4.6,0.2,5.2,0.6V60.1
|
||||
c0,0-1.2-1.2-3.1-1.2c-1.9,0-5.1,1.7-6.4,2.3c-1.1,0.5-2.2,0.9-3,1C22.3,62.3,22.4,62.5,22.4,62.5 M39.6,79.1
|
||||
c3.4,0,5.2,2.1,6.3,2.6c2.7,1.1,3.1,0.5,3.1,0.5V62.5c0-0.2-0.3-0.2-0.3-0.2s-2.6-0.4-3.5-1c-0.9-0.5-4.1-2.4-6.4-2.4
|
||||
c-2.3,0-2.8,1-2.8,1v19.9C36.1,79.8,37.2,79.1,39.6,79.1"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 31 KiB |
@ -27,7 +27,7 @@ A column name of \code{x}, or \code{NULL} when no result is found.
|
||||
This tries to find a column name in a data set based on information from the \link{antibiotics} data set. Also supports WHONET abbreviations.
|
||||
}
|
||||
\details{
|
||||
You can look for an antibiotic (trade) name or abbreviation and it will search \code{x} and the \link{antibiotics} data set for any column containing a name or code of that antibiotic. \strong{Longer columns names take precedence over shorter column names.}
|
||||
You can look for an antibiotic (trade) name or abbreviation and it will search \code{x} and the \link{antibiotics} data set for any column containing a name or code of that antibiotic.
|
||||
}
|
||||
\examples{
|
||||
df <- data.frame(
|
||||
@ -36,13 +36,10 @@ df <- data.frame(
|
||||
)
|
||||
|
||||
guess_ab_col(df, "amoxicillin")
|
||||
# [1] "amox"
|
||||
guess_ab_col(df, "J01AA07") # ATC code of tetracycline
|
||||
# [1] "tetr"
|
||||
|
||||
guess_ab_col(df, "J01AA07", verbose = TRUE)
|
||||
# NOTE: Using column 'tetr' as input for J01AA07 (tetracycline).
|
||||
# [1] "tetr"
|
||||
|
||||
# WHONET codes
|
||||
df <- data.frame(
|
||||
@ -50,17 +47,6 @@ df <- data.frame(
|
||||
AMC_ED20 = "S"
|
||||
)
|
||||
guess_ab_col(df, "ampicillin")
|
||||
# [1] "AMP_ND10"
|
||||
guess_ab_col(df, "J01CR02")
|
||||
# [1] "AMC_ED20"
|
||||
guess_ab_col(df, as.ab("augmentin"))
|
||||
# [1] "AMC_ED20"
|
||||
|
||||
# Longer names take precendence:
|
||||
df <- data.frame(
|
||||
AMP_ED2 = "S",
|
||||
AMP_ED20 = "S"
|
||||
)
|
||||
guess_ab_col(df, "ampicillin")
|
||||
# [1] "AMP_ED20"
|
||||
}
|
||||
|
@ -5,7 +5,7 @@
|
||||
\alias{intrinsic_resistant}
|
||||
\title{Data Set with Bacterial Intrinsic Resistance}
|
||||
\format{
|
||||
A [tibble\link[tibble:tibble]{tibble::tibble} with 134,956 observations and 2 variables:
|
||||
A \link[tibble:tibble]{tibble} with 134,956 observations and 2 variables:
|
||||
\itemize{
|
||||
\item \code{mo}\cr Microorganism ID
|
||||
\item \code{ab}\cr Antibiotic ID
|
||||
|
91
man/mean_amr_distance.Rd
Normal file
91
man/mean_amr_distance.Rd
Normal file
@ -0,0 +1,91 @@
|
||||
% Generated by roxygen2: do not edit by hand
|
||||
% Please edit documentation in R/mean_amr_distance.R
|
||||
\name{mean_amr_distance}
|
||||
\alias{mean_amr_distance}
|
||||
\alias{mean_amr_distance.default}
|
||||
\alias{mean_amr_distance.mic}
|
||||
\alias{mean_amr_distance.disk}
|
||||
\alias{mean_amr_distance.rsi}
|
||||
\alias{mean_amr_distance.data.frame}
|
||||
\alias{distance_from_row}
|
||||
\title{Mean AMR Distance}
|
||||
\usage{
|
||||
mean_amr_distance(x, ...)
|
||||
|
||||
\method{mean_amr_distance}{default}(x, ...)
|
||||
|
||||
\method{mean_amr_distance}{mic}(x, ...)
|
||||
|
||||
\method{mean_amr_distance}{disk}(x, ...)
|
||||
|
||||
\method{mean_amr_distance}{rsi}(x, combine_SI = TRUE, ...)
|
||||
|
||||
\method{mean_amr_distance}{data.frame}(x, ..., combine_SI = TRUE)
|
||||
|
||||
distance_from_row(mean_distance, row)
|
||||
}
|
||||
\arguments{
|
||||
\item{x}{a vector of class \link[=as.rsi]{rsi}, \link[=as.rsi]{rsi} or \link[=as.rsi]{rsi}, or a \link{data.frame} containing columns of any of these classes}
|
||||
|
||||
\item{...}{variables to select (supports tidy selection such as \code{column1:column4} and \code{\link[tidyselect:language]{where(is.mic)}}), and can thus also be \link[=ab_selector]{antibiotic selectors}}
|
||||
|
||||
\item{combine_SI}{a \link{logical} to indicate whether all values of S and I must be merged into one, so the input only consists of S+I vs. R (susceptible vs. resistant), defaults to \code{TRUE}}
|
||||
|
||||
\item{mean_distance}{the outcome of \code{\link[=mean_amr_distance]{mean_amr_distance()}}}
|
||||
|
||||
\item{row}{an index, such as a row number}
|
||||
}
|
||||
\description{
|
||||
This function calculates a normalised mean for antimicrobial resistance between multiple observations.
|
||||
}
|
||||
\details{
|
||||
The mean AMR distance is a normalised numeric value to compare AMR test results and can help to identify similar isolates, without comparing antibiograms by hand. For common numeric data this distance is equal to \href{https://en.wikipedia.org/wiki/Standard_score}{Z scores} (the number of standard deviations from the mean).
|
||||
|
||||
MIC values (see \code{\link[=as.mic]{as.mic()}}) are transformed with \code{\link[=log2]{log2()}} first; their distance is calculated as \code{(log2(x) - mean(log2(x))) / sd(log2(x))}.
|
||||
|
||||
R/SI values (see \code{\link[=as.rsi]{as.rsi()}}) are transformed using \code{"S"} = 1, \code{"I"} = 2, and \code{"R"} = 3. If \code{combine_SI} is \code{TRUE} (default), the \code{"I"} will be considered to be 1.
|
||||
|
||||
For data sets, the mean AMR distance will be calculated per variable, after which the mean of all columns will returned per row (using \code{\link[=rowMeans]{rowMeans()}}), see \emph{Examples}.
|
||||
|
||||
Use \code{\link[=distance_from_row]{distance_from_row()}} to subtract distances from the distance of one row, see \emph{Examples}.
|
||||
}
|
||||
\section{Interpretation}{
|
||||
|
||||
Isolates with distances less than 0.01 difference from each other should be considered similar. Differences lower than 0.025 should be considered suspicious.
|
||||
}
|
||||
|
||||
\examples{
|
||||
x <- random_mic(10)
|
||||
x
|
||||
mean_amr_distance(x)
|
||||
|
||||
y <- data.frame(
|
||||
id = LETTERS[1:10],
|
||||
amox = random_mic(10, ab = "amox", mo = "Escherichia coli"),
|
||||
cipr = random_mic(10, ab = "cipr", mo = "Escherichia coli"),
|
||||
gent = random_mic(10, ab = "gent", mo = "Escherichia coli"),
|
||||
tobr = random_mic(10, ab = "tobr", mo = "Escherichia coli")
|
||||
)
|
||||
y
|
||||
mean_amr_distance(y)
|
||||
y$amr_distance <- mean_amr_distance(y, where(is.mic))
|
||||
y[order(y$amr_distance), ]
|
||||
|
||||
if (require("dplyr")) {
|
||||
y \%>\%
|
||||
mutate(
|
||||
amr_distance = mean_amr_distance(., where(is.mic)),
|
||||
check_id_C = distance_from_row(amr_distance, id == "C")
|
||||
) \%>\%
|
||||
arrange(check_id_C)
|
||||
}
|
||||
if (require("dplyr")) {
|
||||
# support for groups
|
||||
example_isolates \%>\%
|
||||
filter(mo_genus() == "Enterococcus" & mo_species() != "") \%>\%
|
||||
select(mo, TCY, carbapenems()) \%>\%
|
||||
group_by(mo) \%>\%
|
||||
mutate(d = mean_amr_distance(., where(is.rsi))) \%>\%
|
||||
arrange(mo, d)
|
||||
}
|
||||
}
|
@ -5,7 +5,7 @@
|
||||
\alias{microorganisms}
|
||||
\title{Data Set with 70,764 Microorganisms}
|
||||
\format{
|
||||
A [tibble\link[tibble:tibble]{tibble::tibble} with 70,764 observations and 16 variables:
|
||||
A \link[tibble:tibble]{tibble} with 70,764 observations and 16 variables:
|
||||
\itemize{
|
||||
\item \code{mo}\cr ID of microorganism as used by this package
|
||||
\item \code{fullname}\cr Full name, like \code{"Escherichia coli"}
|
||||
|
@ -5,7 +5,7 @@
|
||||
\alias{microorganisms.codes}
|
||||
\title{Data Set with 5,604 Common Microorganism Codes}
|
||||
\format{
|
||||
A [tibble\link[tibble:tibble]{tibble::tibble} with 5,604 observations and 2 variables:
|
||||
A \link[tibble:tibble]{tibble} with 5,604 observations and 2 variables:
|
||||
\itemize{
|
||||
\item \code{code}\cr Commonly used code of a microorganism
|
||||
\item \code{mo}\cr ID of the microorganism in the \link{microorganisms} data set
|
||||
|
@ -5,7 +5,7 @@
|
||||
\alias{microorganisms.old}
|
||||
\title{Data Set with Previously Accepted Taxonomic Names}
|
||||
\format{
|
||||
A [tibble\link[tibble:tibble]{tibble::tibble} with 14,338 observations and 4 variables:
|
||||
A \link[tibble:tibble]{tibble} with 14,338 observations and 4 variables:
|
||||
\itemize{
|
||||
\item \code{fullname}\cr Old full taxonomic name of the microorganism
|
||||
\item \code{fullname_new}\cr New full taxonomic name of the microorganism
|
||||
|
@ -54,5 +54,5 @@ mo_matching_score(
|
||||
)
|
||||
}
|
||||
\author{
|
||||
Dr Matthijs Berends
|
||||
Dr. Matthijs Berends
|
||||
}
|
||||
|
@ -147,7 +147,11 @@ plot(some_disk_values, mo = "Escherichia coli", ab = "cipro", language = "uk")
|
||||
\donttest{
|
||||
if (require("ggplot2")) {
|
||||
autoplot(some_mic_values)
|
||||
}
|
||||
if (require("ggplot2")) {
|
||||
autoplot(some_disk_values, mo = "Escherichia coli", ab = "cipro")
|
||||
}
|
||||
if (require("ggplot2")) {
|
||||
autoplot(some_rsi_values)
|
||||
}
|
||||
}
|
||||
|
@ -5,7 +5,7 @@
|
||||
\alias{rsi_translation}
|
||||
\title{Data Set for R/SI Interpretation}
|
||||
\format{
|
||||
A [tibble\link[tibble:tibble]{tibble::tibble} with 20,369 observations and 11 variables:
|
||||
A \link[tibble:tibble]{tibble} with 20,369 observations and 11 variables:
|
||||
\itemize{
|
||||
\item \code{guideline}\cr Name of the guideline
|
||||
\item \code{method}\cr Either "DISK" or "MIC"
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 9.4 KiB |
274
pkgdown/logos/logo_rug.svg
Normal file
274
pkgdown/logos/logo_rug.svg
Normal file
@ -0,0 +1,274 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 25.2.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 400 120" style="enable-background:new 0 0 400 120;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#E3032E;}
|
||||
</style>
|
||||
<g>
|
||||
<path class="st0" d="M333.6,73.8h1.3c1.4,0,1.6,0.3,1.6,2.7v8.8c0,1.7-0.2,2.3-2,2.3h-1.2v1.8h10.1v-1.8H343c-1.8,0-2-0.6-2-2.3
|
||||
v-5.9c0-3.4,1.8-5.2,4.4-5.2c1.9,0,3.2,1.1,3.2,3.7v7.4c0,1.7-0.2,2.3-2,2.3H346v1.8h9.9v-1.8H355c-1.8,0-2-0.6-2-2.3v-8.5
|
||||
c0-3.9-2.7-5.5-6.3-5.5c-2.9,0-5,1.2-6.2,4.1h-0.1v-4c-1.8,0.2-5,0.4-6.8,0.4V73.8z M330.8,80.9v-0.8c0-6-2.4-8.7-8.2-8.7
|
||||
c-6,0-8.6,4-8.6,9.3c0,5.3,2.6,9.3,8.6,9.3c6,0,7.8-3.1,7.8-6.2h-3.7c0,2.7-1.1,4.1-3.7,4.1c-4.4,0-4.5-4.5-4.5-6.9H330.8z
|
||||
M318.6,78.8c0-3,0.9-5.5,4-5.5c3.1,0,3.8,2.6,3.8,5.5H318.6z M304.8,77.6c0,3.1-0.9,4.6-2.8,4.6c-1.9,0-3.1-1.4-3.1-4.6
|
||||
c0-3.1,1.1-4.3,3.1-4.3C303.7,73.3,304.8,74.3,304.8,77.6 M306.4,92.4c0,1.7-1.1,3.4-4.5,3.4c-3,0-4.2-1.4-4.2-3.2
|
||||
c0-1.9,1.1-3.5,4.3-3.5C305.1,89.1,306.4,90.5,306.4,92.4 M311.6,71.7l-5.3,0.5c-1-0.3-2.7-0.8-4.2-0.8c-4.7,0-7.8,2.7-7.8,6.2
|
||||
c0,3.3,2.1,4.9,4.7,5.8v0.1c-2.5,0.2-3.5,1.1-3.5,2.3c0,1.2,0.8,1.8,3.2,2.3V88c-2.5,0.3-5.5,1.6-5.5,4.5c0,2.9,2.5,5.2,8.2,5.2
|
||||
c6,0,9.4-2,9.4-5.3c0-4.2-3.4-4.7-6.8-5c-4-0.3-4.6-0.6-4.6-1.7c0-1.2,1.6-1.4,2.8-1.5l0.9-0.1c5-0.8,6.6-3.5,6.6-6.4
|
||||
c0-1.5-0.7-2.9-1.6-3.6V74h3.5V71.7z M269.1,73.8h1.3c1.4,0,1.6,0.3,1.6,2.7v8.8c0,1.7-0.2,2.3-2,2.3h-1.2v1.8h10.1v-1.8h-0.5
|
||||
c-1.8,0-2-0.6-2-2.3v-5.9c0-3.4,1.8-5.2,4.4-5.2c1.9,0,3.2,1.1,3.2,3.7v7.4c0,1.7-0.2,2.3-2,2.3h-0.5v1.8h9.9v-1.8h-0.9
|
||||
c-1.8,0-2-0.6-2-2.3v-8.5c0-3.9-2.7-5.5-6.3-5.5c-2.9,0-5,1.2-6.2,4.1h-0.1v-4c-1.8,0.2-5,0.4-6.8,0.4V73.8z M259.3,65.8
|
||||
c0,1.5,0.9,2.7,2.6,2.7c1.7,0,2.6-1.2,2.6-2.7c0-1.5-0.9-2.7-2.6-2.7C260.3,63.1,259.3,64.2,259.3,65.8 M256.9,73.8h1.3
|
||||
c1.4,0,1.6,0.3,1.6,2.7v8.8c0,1.7-0.2,2.3-2,2.3h-1.2v1.8h10.5v-1.8h-0.9c-1.8,0-2-0.6-2-2.3V71.5c-2.3,0.2-5.5,0.4-7.3,0.4V73.8z
|
||||
M232.7,73.8h1.3c1.4,0,1.6,0.3,1.6,2.7v8.8c0,1.7-0.2,2.3-2,2.3h-1.2v1.8h10.1v-1.8h-0.5c-1.8,0-2-0.6-2-2.3v-5.9
|
||||
c0-3.4,1.8-5.2,4.4-5.2c1.9,0,3.2,1.1,3.2,3.7v7.4c0,1.7-0.2,2.3-2,2.3h-0.5v1.8h9.9v-1.8H254c-1.8,0-2-0.6-2-2.3v-8.5
|
||||
c0-3.9-2.7-5.5-6.3-5.5c-2.9,0-5,1.2-6.2,4.1h-0.1v-4c-1.8,0.2-5,0.4-6.8,0.4V73.8z M213,80.6c0,5.3,2.6,9.3,8.6,9.3
|
||||
c6,0,8.6-4,8.6-9.3c0-5.3-2.6-9.3-8.6-9.3C215.6,71.4,213,75.3,213,80.6 M217.6,80.6c0-4.9,1.1-7.2,4-7.2c2.9,0,4,2.3,4,7.2
|
||||
c0,4.9-1.1,7.2-4,7.2C218.7,87.8,217.6,85.5,217.6,80.6 M195.2,73.8h1.5c1.4,0,1.6,0.3,1.6,2.7v8.8c0,1.7-0.2,2.3-2,2.3h-1.2v1.8
|
||||
h11.5v-1.8h-1.9c-1.8,0-2-0.6-2-2.3v-5.9c0-3,1.7-5.2,3.3-5.2c1.4,0,1.8,1,1.8,2.8h3.5v-5.2c-0.8-0.3-1.8-0.4-2.9-0.4
|
||||
c-2.9,0-5,1.2-6.2,4.1h-0.1v-4c-1.8,0.2-5,0.4-7,0.4V73.8z M186.8,77.6c0,3.1-0.9,4.6-2.8,4.6c-1.9,0-3.1-1.4-3.1-4.6
|
||||
c0-3.1,1.1-4.3,3.1-4.3C185.7,73.3,186.8,74.3,186.8,77.6 M188.3,92.4c0,1.7-1.1,3.4-4.5,3.4c-3,0-4.2-1.4-4.2-3.2
|
||||
c0-1.9,1.1-3.5,4.3-3.5C187,89.1,188.3,90.5,188.3,92.4 M193.6,71.7l-5.3,0.5c-1-0.3-2.7-0.8-4.2-0.8c-4.7,0-7.8,2.7-7.8,6.2
|
||||
c0,3.3,2,4.9,4.8,5.8v0.1c-2.5,0.2-3.5,1.1-3.5,2.3c0,1.2,0.8,1.8,3.2,2.3V88c-2.5,0.3-5.5,1.6-5.5,4.5c0,2.9,2.5,5.2,8.2,5.2
|
||||
c6,0,9.4-2,9.4-5.3c0-4.2-3.4-4.7-6.8-5c-4-0.3-4.6-0.6-4.6-1.7c0-1.2,1.6-1.4,2.8-1.5l0.9-0.1c5-0.8,6.6-3.5,6.6-6.4
|
||||
c0-1.5-0.7-2.9-1.6-3.6V74h3.5V71.7z"/>
|
||||
<path class="st0" d="M383.3,38h3.2v11.3c0,1.7-0.2,2.3-2,2.3h-1.1v1.8h11.5v-1.8h-1.9c-1.8,0-2-0.6-2-2.3V38h4.7V36h-4.7v-3.6
|
||||
c0-2.2,0.9-3.2,2.3-3.2c1.3,0,1.8,0.8,1.8,3.2h3v-4.7c-1.4-0.3-3-0.5-4.8-0.5c-6.5,0-6.8,4-6.8,8.9h-3.2V38z M363.9,44.7
|
||||
c0,5.3,2.6,9.3,8.6,9.3c6,0,8.6-4,8.6-9.3c0-5.3-2.6-9.3-8.6-9.3C366.4,35.4,363.9,39.3,363.9,44.7 M368.5,44.7
|
||||
c0-4.9,1.1-7.2,4-7.2c2.9,0,4,2.3,4,7.2c0,4.9-1.1,7.2-4,7.2C369.5,51.9,368.5,49.6,368.5,44.7 M346.2,52.9l-1.7,4.4
|
||||
c-0.5,1.3-0.9,2-2.3,2h-1.6v1.8h9.6v-1.8H349c-1.4,0-1.8-0.3-1.8-1.1c0-0.6,0.4-1.4,0.6-1.9l7.1-16.9c0.5-1.2,0.8-1.8,1.6-1.8h0.8
|
||||
V36h-7.6v1.8h1.5c0.6,0,0.9,0.1,0.9,0.6c0,0.3-0.2,0.8-0.4,1.3l-3.3,8.4l-3-8c-0.2-0.6-0.5-1.1-0.5-1.6c0-0.5,0.4-0.6,1-0.6h1.3V36
|
||||
h-8.9v1.8h0.5c0.9,0,1.3,0.5,2,2.3L346.2,52.9z M322.1,38h3.2v10.3c0,4.5,2,5.6,5.6,5.6c3.5,0,5.5-1.7,5.5-5.6v-0.8h-3v1.8
|
||||
c0,1.5-0.6,2.2-1.9,2.2c-1.3,0-1.9-0.7-1.9-2.2V38h5.8V36h-5.8v-5.1h-3.1c-0.3,3.6-1.1,4.7-4.4,5.1V38z M312.6,29.8
|
||||
c0,1.5,0.9,2.7,2.6,2.7c1.7,0,2.6-1.2,2.6-2.7c0-1.5-0.9-2.7-2.6-2.7C313.5,27.1,312.6,28.3,312.6,29.8 M310.1,37.8h1.3
|
||||
c1.4,0,1.6,0.3,1.6,2.7v8.8c0,1.7-0.2,2.3-2,2.3h-1.2v1.8h10.5v-1.8h-0.9c-1.8,0-2-0.6-2-2.3V35.5c-2.3,0.2-5.5,0.4-7.3,0.4V37.8z
|
||||
M292.9,52.8c1,0.4,3.7,1.1,6.6,1.1c3.8,0,7.8-1.6,7.8-5.8c0-2.7-1.4-3.8-4.5-4.8l-2.9-1c-1.7-0.5-2.6-1.5-2.6-2.9
|
||||
c0-1.4,1-2.1,2.7-2.1c2.6,0,3.3,1.2,3.3,3.9h3v-4.9c-1-0.5-3.5-1-6.2-1c-4.2,0-7.2,2-7.2,5.3c0,2.8,2,4.3,6.2,5.6
|
||||
c3.3,1,3.8,1.8,3.8,3.1c0,1.7-1.5,2.6-3.8,2.6c-2.5,0-3.2-1.7-3.2-4.2h-3V52.8z M274.2,37.8h1.5c1.4,0,1.6,0.3,1.6,2.7v8.8
|
||||
c0,1.7-0.2,2.3-2,2.3h-1.2v1.8h11.5v-1.8h-1.9c-1.8,0-2-0.6-2-2.3v-5.9c0-3,1.7-5.3,3.3-5.3c1.4,0,1.8,1,1.8,2.8h3.5v-5.2
|
||||
c-0.8-0.3-1.8-0.4-2.9-0.4c-2.9,0-5,1.2-6.2,4.1h-0.1v-4c-1.8,0.2-5,0.4-7,0.4V37.8z M271.6,45v-0.8c0-6-2.4-8.7-8.2-8.7
|
||||
c-6,0-8.6,4-8.6,9.3c0,5.3,2.6,9.3,8.6,9.3c6,0,7.8-3.1,7.8-6.2h-3.7c0,2.7-1.1,4.1-3.7,4.1c-4.4,0-4.5-4.5-4.5-6.9H271.6z
|
||||
M259.4,42.9c0-3,0.9-5.5,4-5.5c3.1,0,3.8,2.6,3.8,5.5H259.4z M246.1,37.7h1.5c0.8,0,1,0.2,1,0.5c0,0.3-0.1,0.6-0.2,0.9l-3.7,10.7
|
||||
h-0.1l-3.5-10.1c-0.1-0.4-0.3-0.8-0.3-1.3c0-0.4,0.4-0.6,1.4-0.6h1.2V36h-9v1.8h0.4c0.8,0,1,0.2,1.5,1.4l5.6,14.5h4.2l5.6-14.6
|
||||
c0.4-0.9,0.7-1.2,1.4-1.2h0.5V36h-7.6V37.7z M226,29.8c0,1.5,0.9,2.7,2.6,2.7c1.7,0,2.6-1.2,2.6-2.7c0-1.5-0.9-2.7-2.6-2.7
|
||||
C227,27.1,226,28.3,226,29.8 M223.6,37.8h1.3c1.4,0,1.6,0.3,1.6,2.7v8.8c0,1.7-0.2,2.3-2,2.3h-1.2v1.8h10.5v-1.8H233
|
||||
c-1.8,0-2-0.6-2-2.3V35.5c-2.3,0.2-5.5,0.4-7.3,0.4V37.8z M199.4,37.8h1.3c1.4,0,1.6,0.3,1.6,2.7v8.8c0,1.7-0.2,2.3-2,2.3h-1.2v1.8
|
||||
h10.1v-1.8h-0.5c-1.8,0-2-0.6-2-2.3v-5.9c0-3.4,1.8-5.3,4.4-5.3c1.9,0,3.2,1.2,3.2,3.7v7.4c0,1.7-0.2,2.3-2,2.3h-0.5v1.8h9.9v-1.8
|
||||
h-0.9c-1.8,0-2-0.6-2-2.3v-8.5c0-3.9-2.7-5.5-6.3-5.5c-2.9,0-5,1.2-6.2,4.1h-0.1v-4c-1.8,0.2-5,0.4-6.8,0.4V37.8z M190.7,53.4h6.8
|
||||
v-1.8h-0.9c-1.8,0-2-0.6-2-2.3V35.5c-2.3,0.2-5.5,0.4-7.3,0.4v1.9h1.3c1.4,0,1.6,0.3,1.6,2.7v4.9c0,3.7-1.3,5.6-4.4,5.6
|
||||
c-2,0-3.2-1-3.2-3.2V35.5c-2.3,0.2-5.5,0.4-7.3,0.4v1.9h1.3c1.4,0,1.6,0.3,1.6,2.7V49c0,3.3,2.2,5,5.7,5c3.6,0,5.9-1.6,6.7-4h0.1
|
||||
V53.4z"/>
|
||||
</g>
|
||||
<polygon class="st0" points="150.7,35.7 86.8,114.5 91.9,114.6 155.8,35.7 "/>
|
||||
<g>
|
||||
<path class="st0" d="M32.5,20.3c-0.5,0.1-1.1,0.3-1.5-0.6c-0.3-0.8,1-2,1.4-2.4c0.6-0.5-0.2-1.1-0.6-0.5c-0.1,0.2-1.1,1.6-1.9,1.6
|
||||
c-1.2,0-1.2-1.5-1.2-1.5s-1.4-0.9-1.4-3.7c0-2.5,1.6-3.7,1.6-3.7s0-1.4,1.1-1.4c1.1,0,1.8,1.6,1.9,1.7c0.6,0.8,1.3,0.1,0.8-0.5
|
||||
c-1.2-1.4-1.4-2.5-0.1-3.1c0.5-1.1,1.9-1.8,3.4-1.9l0.1,0l0,0c1.5,0.1,2.9,0.9,3.4,1.9c1.3,0.6,1,1.7-0.1,3.1
|
||||
c-0.5,0.6,0.2,1.3,0.8,0.5c0.1-0.1,0.8-1.6,1.9-1.7c1.1,0,1.1,1.4,1.1,1.4s1.6,1.2,1.6,3.7c0,2.8-1.4,3.7-1.4,3.7s0.1,1.5-1.2,1.5
|
||||
c-0.8,0-1.8-1.4-1.9-1.6c-0.4-0.6-1.1,0-0.6,0.5c0.4,0.4,1.7,1.6,1.4,2.4c-0.4,0.8-1,0.6-1.5,0.6c0,0-0.4,0.7-1.1,0.7
|
||||
c3.2,2.4,8.3,1,8.9-0.7c0,0-0.9,0.2-0.8-0.7c0-0.5,0.6-0.8,1.3-0.9c-0.2-0.3-0.2-0.8-0.2-1.2c0.1-1.3,0.9-2.3,1.9-2.4
|
||||
c1,0,1.8,0.9,1.7,2.2c0,0.6-0.3,1.2-0.6,1.6c0.7,0.3,1.2,0.6,1.2,1.1c-0.2,1.2-1.2,0.9-1.2,0.9c-0.1,2.6,3.9,3.2,4.9,2.5
|
||||
c-0.4-1.5,0.2-2,0.7-2.4c0.3-0.3,1.3-0.9,1.5-1c0.3-0.2,0.5-0.6,0.3-0.8c-0.2-0.1-0.6,0.1-0.8,0.3c-0.3,0.3-0.8,1-1.5,0.8
|
||||
c-0.9-0.2-0.5-1.3-0.7-1.8c-1-3.5-0.1-6,3.4-7.5c0,0,1.3-1.4,2.5-0.8c1.2,0.6,0.4,2.5,0.4,2.5l0.4,0.2c1.3-2.3,3.2-4,5.8-4.1
|
||||
c1.9,0,2.8,1.1,2.9,2.6c0.2,3.4-3.3,2.1-3,0.9c0,0-0.8,0.1-1.3,0.8c0-0.2,0-2.2-1.8-1.2c-0.5,0.3-1.4,1.8-1.5,2
|
||||
c-0.2,0.7,0.1,0.8-0.3,1.4c-0.3,0.5-0.7,0.6-0.8,1c-0.2,0.4,0.1,1.1-0.2,1.5c-0.3,0.6-0.7,0.6-0.9,1.1c-0.2,0.4-2.7,6.8-2.7,6.8
|
||||
s1,0.6,0.8,1.6c-0.3,1.3-1.1,1-1.5,1.8c-13.7-3.5-27.8-3.5-42.5-0.1c-0.4-0.8-1.2-0.5-1.5-1.8c-0.2-1,0.8-1.6,0.8-1.6
|
||||
s-2.5-6.4-2.7-6.8c-0.2-0.5-0.6-0.5-0.9-1.1c-0.2-0.5,0-1.2-0.2-1.5c-0.2-0.4-0.5-0.5-0.8-1c-0.4-0.7,0-0.8-0.3-1.4
|
||||
c-0.1-0.2-1-1.7-1.5-2c-1.8-1.1-1.8,1-1.8,1.2c-0.5-0.7-1.3-0.8-1.3-0.8c0.3,1.3-3.2,2.5-3-0.9c0.1-1.5,1-2.6,2.9-2.6
|
||||
C7.2,8.9,9,10.6,10.3,13l0.4-0.2c0,0-0.7-1.9,0.4-2.5c1.2-0.6,2.5,0.8,2.5,0.8c3.5,1.5,4.4,3.9,3.4,7.5c-0.2,0.6,0.2,1.6-0.7,1.8
|
||||
c-0.8,0.2-1.2-0.5-1.5-0.8c-0.2-0.2-0.6-0.5-0.8-0.3c-0.2,0.2,0,0.6,0.3,0.8c0.1,0.1,1.1,0.7,1.5,1c0.5,0.4,1.1,0.9,0.7,2.4
|
||||
c1,0.7,5.1,0.2,4.9-2.5c0,0-1.1,0.3-1.3-0.9c-0.1-0.4,0.4-0.8,1.2-1.1c-0.4-0.4-0.6-1-0.6-1.6c-0.1-1.3,0.7-2.2,1.7-2.2
|
||||
c1,0,1.9,1.1,1.9,2.4c0,0.4-0.1,0.9-0.2,1.2c0.7,0.1,1.3,0.4,1.3,0.9c0,0.9-0.8,0.7-0.8,0.7c0.7,1.8,5.7,3.1,8.9,0.7
|
||||
C32.9,21.1,32.5,20.3,32.5,20.3 M33.6,13.8c0,1.3,1.1,2.4,2.4,2.4c1.3,0,2.4-1.1,2.4-2.4c0-1.3-1.1-2.4-2.4-2.4
|
||||
C34.7,11.4,33.6,12.5,33.6,13.8 M46.7,24c1,0,3,0.4,3,0.4s-0.8-0.9-1.2-1.6c0,0-0.5,0.4-0.7,0.6C47.5,23.6,46.7,24,46.7,24
|
||||
M36,21.9c-0.4,0.4-1.2,1.2-2,1.5c0,0,1.4,0,2,0H36c0.6,0,2,0,2,0C37.2,23.1,36.4,22.4,36,21.9 M25.3,24c0,0-0.8-0.4-1-0.6
|
||||
c-0.3-0.2-0.7-0.6-0.7-0.6c-0.4,0.6-1.2,1.6-1.2,1.6S24.3,24,25.3,24 M56.6,30.4c0.7,0.2,1.6,0.8,1.3,1.8c-0.3,0.9-1.4,1-2,0.9
|
||||
c-0.7-0.2-1.6-0.8-1.3-1.8C54.8,30.3,56,30.2,56.6,30.4 M48,30.1l-2,1.7l-1.7-2l2-1.7L48,30.1z M16.3,33c-0.7,0.2-1.8,0.1-2-0.9
|
||||
c-0.3-0.9,0.7-1.6,1.3-1.8c0.7-0.2,1.8-0.1,2,0.9C17.9,32.2,17,32.9,16.3,33 M34,29.5c0-0.8,0.9-1.4,2.1-1.4c1.1,0,2.1,0.6,2.1,1.4
|
||||
c0,0.8-0.9,1.4-2.1,1.4C35,30.9,34,30.3,34,29.5 M24.2,30.1l1.7-2l2,1.7l-1.7,2L24.2,30.1z M7.1,90.3c0.2-0.9,1.2-0.7,1.2-0.7
|
||||
S8.1,88.8,9,88.4C9.9,88,10.4,89,10.4,89l0.4,2.7l-2.9-0.1C7.9,91.6,6.9,91.4,7.1,90.3 M11.2,85.9c0.2-0.9,1.2-0.7,1.2-0.7
|
||||
S12.2,84.4,13,84c0.9-0.4,1.4,0.6,1.4,0.6l0.4,2.7L12,87.2C12,87.2,10.9,86.9,11.2,85.9 M15.3,81.5c0.2-0.9,1.2-0.7,1.2-0.7
|
||||
s-0.2-0.8,0.6-1.2c0.9-0.4,1.4,0.6,1.4,0.6l0.4,2.7L16,82.7C16,82.7,15,82.5,15.3,81.5 M36,40.3c0.2-0.9,1.2-0.7,1.2-0.7
|
||||
s-0.2-0.8,0.6-1.2c0.9-0.4,1.4,0.6,1.4,0.6l0.4,2.7l-2.9-0.1C36.8,41.6,35.8,41.3,36,40.3 M40,55.5c0.2-0.9,1.2-0.7,1.2-0.7
|
||||
s-0.2-0.8,0.6-1.2c0.9-0.4,1.4,0.6,1.4,0.6l0.4,2.7l-2.9-0.1C40.7,56.8,39.7,56.5,40,55.5 M44.7,50.4c0.2-0.9,1.2-0.7,1.2-0.7
|
||||
s-0.2-0.8,0.6-1.2c0.9-0.4,1.4,0.6,1.4,0.6l0.4,2.7l-2.9-0.1C45.5,51.7,44.5,51.4,44.7,50.4 M49.5,45.4c0.2-0.9,1.2-0.7,1.2-0.7
|
||||
s-0.2-0.8,0.6-1.2c0.9-0.4,1.4,0.6,1.4,0.6l0.4,2.7l-2.9-0.1C50.3,46.7,49.2,46.4,49.5,45.4 M54.3,40.4c0.2-0.9,1.2-0.7,1.2-0.7
|
||||
s-0.2-0.8,0.6-1.2c0.9-0.4,1.4,0.6,1.4,0.6l0.4,2.7L55,41.6C55,41.6,54,41.4,54.3,40.4 M4.5,74.3c0.2-0.9,1.2-0.7,1.2-0.7
|
||||
s-0.2-0.8,0.6-1.2C7.2,71.9,7.7,73,7.7,73l0.4,2.7l-2.9-0.1C5.2,75.5,4.2,75.3,4.5,74.3 M15.5,101.2c0.2-0.9,1.2-0.7,1.2-0.7
|
||||
s-0.2-0.8,0.6-1.2c0.9-0.4,1.4,0.6,1.4,0.6l0.4,2.7l-2.9-0.1C16.3,102.5,15.2,102.2,15.5,101.2 M20.2,96.1c0.2-0.9,1.2-0.7,1.2-0.7
|
||||
s-0.2-0.8,0.6-1.2c0.9-0.4,1.4,0.6,1.4,0.6l0.4,2.7L21,97.4C21,97.4,20,97.1,20.2,96.1 M24.9,91c0.2-0.9,1.2-0.7,1.2-0.7
|
||||
s-0.2-0.8,0.6-1.2c0.9-0.4,1.4,0.6,1.4,0.6l0.4,2.7l-2.9-0.1C25.7,92.3,24.7,92,24.9,91 M29.6,85.9c0.2-0.9,1.2-0.7,1.2-0.7
|
||||
s-0.2-0.8,0.6-1.2c0.9-0.4,1.4,0.6,1.4,0.6l0.4,2.7l-2.9-0.1C30.4,87.2,29.4,86.9,29.6,85.9 M50.3,64.1c0.2-0.9,1.2-0.7,1.2-0.7
|
||||
s-0.2-0.8,0.6-1.2c0.9-0.4,1.4,0.6,1.4,0.6l0.4,2.7l-2.9-0.1C51.1,65.4,50.1,65.1,50.3,64.1 M54.6,59.5c0.2-0.9,1.2-0.7,1.2-0.7
|
||||
s-0.2-0.8,0.6-1.2c0.9-0.4,1.4,0.6,1.4,0.6l0.4,2.7l-2.9-0.1C55.3,60.8,54.3,60.5,54.6,59.5 M58.8,54.9C59,54,60,54.2,60,54.2
|
||||
s-0.2-0.8,0.6-1.2c0.9-0.4,1.4,0.6,1.4,0.6l0.4,2.7l-2.9-0.1C59.6,56.2,58.6,55.9,58.8,54.9 M63.1,50.2c0.2-0.9,1.2-0.7,1.2-0.7
|
||||
s-0.2-0.8,0.6-1.2c0.9-0.4,1.4,0.6,1.4,0.6l0.4,2.7l-2.9-0.1C63.8,51.5,62.8,51.3,63.1,50.2 M30.1,105.8c0.2-0.9,1.2-0.7,1.2-0.7
|
||||
s-0.2-0.8,0.6-1.2c0.9-0.4,1.4,0.6,1.4,0.6l0.4,2.7l-2.9-0.1C30.9,107,29.9,106.8,30.1,105.8 M63.1,69.3c0.2-0.9,1.2-0.7,1.2-0.7
|
||||
s-0.2-0.8,0.6-1.2c0.9-0.4,1.4,0.6,1.4,0.6l0.4,2.7l-2.9-0.1C63.8,70.6,62.8,70.3,63.1,69.3 M31.2,73c0-0.1,0.2-0.1,0.7-0.2
|
||||
c0.4-0.1,0.8-0.2,0.8-0.1c0,0.2-0.3,0-0.3,0.4v3.3c0,0.2,0.2,0,0.2,0.2c0,0.2-0.4,0.1-0.7,0.1c-0.3,0-0.7,0.1-0.7-0.1
|
||||
c0-0.2,0.3,0,0.3-0.2v-3.2C31.5,72.9,31.2,73.2,31.2,73 M27.6,74.4c0-0.1,0.1-0.1,0.3-0.2c0.2-0.1,0.3-0.2,0.5-0.1
|
||||
c0.2,0.2,1.2,1.4,1.2,1.4v-1.7c0-0.2-0.3,0.1-0.3-0.1c0-0.1,0.1-0.1,0.4-0.2c0.2-0.1,0.6-0.4,0.6-0.2c0,0.2-0.2,0.1-0.2,0.4v3.3
|
||||
c0,0.3,0,0.3-0.1,0.3c-0.1,0-1.7-2.1-1.7-2.1v2.2c0,0.2,0.4-0.1,0.4,0.1c0,0.1-0.2,0.2-0.5,0.3c-0.2,0.1-0.6,0.3-0.6,0.1
|
||||
c0-0.2,0.3-0.1,0.3-0.3v-2.9C27.8,74.4,27.6,74.6,27.6,74.4 M26.3,76.4c0-1.4-0.9-0.9-0.9-0.9v2.8C25.4,78.4,26.3,78.4,26.3,76.4
|
||||
M24.2,75.9c0-0.1,0.4-0.3,0.7-0.4c0.5-0.2,2.2-1.1,2.2,1c0,1.9-1.3,2.2-1.7,2.4c-0.4,0.2-1,0.5-1,0.4c-0.1-0.1,0.2-0.2,0.2-0.5
|
||||
v-2.3C24.6,75.8,24.2,76.1,24.2,75.9 M30,67.4c0-0.1,0.3-0.1,0.5-0.2c0.3-0.1,0.5-0.1,0.6,0c0.1,0.1,0.7,1.1,0.7,1.1
|
||||
s0.8-1.1,0.8-1.2c0.1-0.1,0.1-0.2,0.4-0.2c0.4,0,0.5,0,0.5,0c0,0.1-0.2,0.1-0.2,0.4c0,0.2,0,2.9,0,3c0,0.3,0.2,0.2,0.2,0.3
|
||||
c0,0.1-0.2,0.1-0.7,0.1c-0.4,0-0.7,0.1-0.7,0c0-0.2,0.2,0,0.2-0.3v-2c0,0-0.8,1.1-0.8,1.1c0,0-1-1.4-1-1.4v2.4
|
||||
c0,0.4,0.4,0.2,0.4,0.3c0,0.1-0.3,0.1-0.5,0.2c-0.2,0.1-0.5,0.2-0.5,0.1c-0.1-0.2,0.3-0.1,0.3-0.5c0-0.4,0-2.6,0-2.8
|
||||
C30.3,67.4,30,67.6,30,67.4 M28.9,67.9c0.1-0.1,0.5-0.2,0.5-0.2c0.1,0.1-0.1,0.1-0.3,0.7c-0.1,0.2-0.7,3.6-0.9,3.7
|
||||
c-0.1,0-1.2-2.7-1.3-2.9c-0.2-0.4-0.4-0.1-0.4-0.3c0-0.1,0.3-0.2,0.5-0.3c0.1-0.1,0.6-0.4,0.7-0.3c0.1,0.1-0.3,0.1-0.1,0.5
|
||||
c0.1,0.3,0.7,1.6,0.7,1.6s0.4-1.5,0.5-2c0.1-0.5-0.3-0.3-0.3-0.4C28.5,68,28.7,67.9,28.9,67.9L28.9,67.9z M24.7,71.4v1.8
|
||||
c0,0,1-0.2,1-1.4C25.7,70.9,24.7,71.4,24.7,71.4 M24.7,69.8V71c0,0,0.7-0.3,0.7-0.9C25.4,69.4,24.7,69.8,24.7,69.8 M24.8,69.5
|
||||
c0.4-0.2,1.5-0.4,1.5,0.5c0,0.7-0.4,0.8-0.4,0.8s0.8,0.1,0.8,0.8c0,0.7-0.4,1.2-0.8,1.5c-0.2,0.1-1.5,0.7-1.6,0.8
|
||||
c-0.1,0.1-0.4,0.2-0.4,0.2c-0.1-0.2,0.2-0.1,0.2-0.6v-3c0-0.6-0.3-0.4-0.3-0.5C23.7,69.8,24.4,69.6,24.8,69.5 M31.4,61.1v1.5
|
||||
c0,0,0.7,0,0.7-0.9C32.1,60.8,31.4,61.1,31.4,61.1 M33.3,64.5c0.2,0,0.3-0.1,0.3-0.1s-0.1,0.5-0.6,0.5c-0.8,0-0.7-1.3-1-1.7
|
||||
c-0.2-0.4-0.6-0.2-0.6-0.2v1.3c0,0.4,0.3,0.2,0.3,0.4c0,0.1-0.2,0.1-0.2,0.1s-0.6,0.2-0.8,0.2c-0.2,0-0.3,0.1-0.3,0
|
||||
c0-0.2,0.2-0.1,0.2-0.5v-2.8c0-0.5-0.3-0.4-0.3-0.5c0-0.1,0.2-0.1,0.4-0.2c0.4-0.1,0.5-0.2,1-0.3c0.5-0.1,1.4,0.1,1.4,0.8
|
||||
c0,0.8-0.4,0.9-0.7,1.1C33.3,63.2,32.9,64.4,33.3,64.5 M27.5,62.5c0.4-0.1,1-0.4,1.7-0.8c0.1-0.1,0.4-0.2,0.5,0
|
||||
c0.1,0.3,0.2,0.6,0.2,0.6c-0.1,0.1-0.2,0-0.4-0.1c-0.1-0.1-0.3-0.2-0.5-0.1c-0.2,0-0.4,0.1-0.4,0.1l0,1.2c0,0,0.4,0,0.5-0.2
|
||||
c0-0.2,0.1-0.4,0.2-0.5c0.1,0,0.1,0.2,0.1,0.6c0,0.1,0,0.2,0,0.2c0,0.4,0,0.6-0.1,0.6c-0.1,0-0.2-0.3-0.2-0.4c0-0.1-0.5,0-0.5,0.1
|
||||
v1.7c0,0,0.3-0.2,0.5-0.3c0.2-0.1,0.5-0.5,0.6-0.7c0.1-0.2,0.2-0.4,0.3-0.4c0.1,0-0.1,0.7-0.1,0.7s0,0.3-0.2,0.4
|
||||
c-0.2,0.1-1.6,0.7-1.7,0.8c-0.2,0.1-0.5,0.3-0.5,0.2c0-0.2,0.2-0.1,0.2-0.6l0-2.8c0,0,0-0.2-0.2-0.3C27.3,62.7,27.2,62.6,27.5,62.5
|
||||
M24.4,63.8c0.2-0.1,0.7-0.3,0.8-0.2c0.1,0.2-0.3,0.1-0.2,0.5c0.1,0.3,0.7,1.8,0.7,1.8l0.5-2.1c0.1-0.5-0.3-0.3-0.3-0.4
|
||||
c0-0.1,0.3-0.2,0.4-0.2c0.1-0.1,0.6-0.3,0.6-0.2c0.1,0.2-0.2,0.2-0.3,0.6c-0.1,0.5-1,3.8-1.2,4c-0.1,0.1-1.3-2.8-1.4-3
|
||||
c-0.1-0.2-0.4-0.1-0.4-0.3C23.7,64,24.2,63.9,24.4,63.8 M39.4,73.1c0-0.1,0.1-0.1,0.3,0c0.2,0.1,0.4,0.1,0.6,0.4
|
||||
c0.2,0.3,1.4,2.4,1.4,2.4l0-1.9c0-0.3-0.2-0.3-0.2-0.4c0-0.1,0.2,0,0.4,0.1c0.2,0.1,0.4,0.1,0.4,0.2c0,0.1-0.2,0-0.2,0.2v3.6
|
||||
c0,0,0,0.2-0.1,0c-0.1-0.1-2-3.1-2-3.1s0,1.9,0,2.1c0,0.2,0.2,0.2,0.2,0.3c0,0.1-0.3,0.1-0.4,0c-0.2,0-0.4,0-0.4-0.2
|
||||
c0-0.1,0.2,0.1,0.2-0.3v-3.1C39.7,73.2,39.4,73.2,39.4,73.1 M41.2,67.5c0-0.1,0.6,0.1,1.1,0.2c0.5,0.1,1.4,0.3,1.4,0.6
|
||||
c0,0.4,0.1,0.7,0,0.7c-0.1,0-0.2-0.4-0.4-0.6c-0.2-0.2-0.7-0.3-0.8-0.3c-0.1,0-0.1,0-0.1,0.1v1.1c0,0,0.3,0.1,0.5,0.1
|
||||
C43,69.3,43,69,43.1,69c0.1,0,0.1,0.2,0,0.6c0,0.4,0,0.7-0.1,0.7c-0.1,0-0.1-0.4-0.3-0.6c-0.2-0.2-0.4-0.2-0.4-0.2v1.8
|
||||
c0,0,0.2,0.2,0.7,0.1c0.5-0.2,0.8-0.5,0.9-0.4c0.1,0.1,0,0.2-0.2,0.5c-0.2,0.4-0.3,0.6-0.6,0.5c-0.2-0.1-0.7-0.3-1.1-0.4
|
||||
c-0.3-0.1-1-0.3-1-0.4c0-0.1,0.3,0.1,0.3-0.3v-3.2C41.5,67.6,41.2,67.6,41.2,67.5 M40.4,66.9c0.2,0,0.1,0.6,0.2,0.8
|
||||
c0,0.4,0.2,0.7,0,0.7c-0.2,0-0.4-0.6-0.7-0.9c-0.3-0.3-1.3-0.8-1.3,1.3c0,1.8,0.8,1.8,1.2,1.6c0.4-0.1,0.6-0.5,0.6-0.4
|
||||
c0.1,0-0.4,0.9-1.2,1c-0.9,0.1-1.7-0.8-1.7-2.1c0-1.4,0.7-2.2,1.5-2.2c0.7,0,0.9,0.5,1.2,0.5C40.4,67.3,40.2,66.9,40.4,66.9
|
||||
M42.7,62.1c0-0.2,0.3,0,0.8,0.2c0.5,0.2,0.9,0.3,0.8,0.4c0,0.1-0.4-0.1-0.3,0.2c0,0.2,0.6,2.1,0.6,2.1s0.6-1.5,0.7-1.6
|
||||
c0-0.2-0.2-0.2-0.2-0.3c0-0.1,0.2,0,0.4,0.1c0.2,0.1,0.4,0.2,0.4,0.3c0,0.1-0.2-0.1-0.3,0c-0.1,0.2-1.4,3.1-1.4,3.1l-1.3-4.2
|
||||
C42.8,62.2,42.7,62.2,42.7,62.1 M39.7,61c0-0.1,0.2,0,0.2,0l1.2,0.4c0,0,0.2,0.1,0.2,0.2c0,0.1-0.4-0.1-0.4,0.2V65
|
||||
c0,0,0.1,0.2,0.5,0.1c0.4-0.2,1-0.5,1-0.5s0.3-0.1,0.2,0.1c-0.1,0.2-0.3,0.8-0.3,0.8s-0.1,0.2-0.4,0.2c-0.3-0.1-1.1-0.3-1.3-0.3
|
||||
c-0.2-0.1-0.8-0.2-0.8-0.2s-0.1,0-0.1-0.1c0-0.1,0.4,0,0.4-0.3v-3.2C40,61.1,39.7,61.1,39.7,61 M44.2,72.5c0-0.2,0.3,0.1,0.3-0.3
|
||||
v-3.1c0-0.4-0.2-0.4-0.2-0.5c0-0.2,0.3,0.1,0.4,0.1c0.1,0,1,0.5,1.1,0.5c0.1,0,1.1,0.4,1.1,1.5c0,0.7-0.6,0.6-0.6,0.6
|
||||
s0.6,0.4,0.6,0.9c0,0.5,0.1,1,0.1,1.1c0,0.1,0.1,0.4,0.4,0.1c0,0,0,0.6-0.7,0.4c-0.5-0.2-0.6-0.6-0.6-0.9c0-0.3-0.2-1.7-0.8-1.7
|
||||
v1.4c0,0.4,0.2,0.3,0.2,0.5c0,0.1-0.3-0.1-0.6-0.2C44.5,72.7,44.2,72.6,44.2,72.5 M45.3,69.3v1.5c0.1,0,0.8,0.5,0.8-0.4
|
||||
C46.1,69.4,45.3,69.3,45.3,69.3 M43.7,74.8c0.1-0.2-0.1-0.3-0.1-0.4c0-0.1,0.3,0.1,0.5,0.2c0.2,0.1,0.5,0.2,0.5,0.4
|
||||
c0.1,0.2,1,3.4,1.1,3.7c0.1,0.3,0.3,0.2,0.2,0.4c0,0.1-0.3-0.1-0.8-0.3c-0.5-0.2-0.7-0.2-0.7-0.3c0-0.1,0.5,0.1,0.3-0.2
|
||||
c-0.1-0.2-0.2-0.8-0.2-0.8l-1.3-0.4l-0.2,0.6c-0.1,0.3,0.2,0.3,0.1,0.4c0,0.1-0.2,0-0.4-0.1c-0.2-0.1-0.3-0.1-0.3-0.2
|
||||
c0-0.1,0.2,0,0.3-0.2C42.9,77.4,43.7,75,43.7,74.8 M43.9,75.2l-0.4,1.4l1,0.3L43.9,75.2z M69.1,35.8v41.7
|
||||
c0.5,24.9-19.9,33.8-33.4,33.8c-13.5,0-33.8-8.8-33.4-33.8V35.8h12.4c-0.1-0.8,0.1-1.3,0.2-1.3c17-3.4,25.2-3.6,42.2,0
|
||||
c0.4,0.4,0.4,0.9,0.4,1.3H69.1z M8.5,96.3l13-13.9v-4.1l-1.5,0c0,0-1-0.3-0.8-1.3c0.2-0.9,1.2-0.7,1.2-0.7s-0.2-0.8,0.6-1.2
|
||||
c0.2-0.1,0.3-0.1,0.4-0.1l0-2.7L5.3,89.6C6.1,92.1,7.2,94.3,8.5,96.3 M24.7,60.8c0.2-0.1,0.4-0.2,0.5-0.3c0.6-0.3,1.8-0.9,3-1.4
|
||||
c1.2-0.5,2.6-1,3.8-1c1.1,0,2.1,0.3,2.7,0.7c0.3,0.2,0.6,0.3,0.7,0.5l0.1,0.1c0,0,0-0.1,0.1-0.1c0.1-0.2,0.3-0.3,0.6-0.5
|
||||
c0.6-0.4,1.4-0.6,2.7-0.6c1.4,0,2.9,0.5,4.1,1.1l0.3,0.1L64.2,37h-9.5L36.2,56.7v-9.5L45.8,37H3.5v40.5c0,1.5,0,3,0.1,4.4l9.1-9.7
|
||||
h8.8v-7.7c-0.2,0.2-0.4,0.2-0.4,0.2s0.2-0.7-0.4-0.8c0,0-0.1,0-0.2,0c-0.3,0-0.5,0.2-0.7,0.3c-0.3,0.3-1.3,1.4-1.5,1.6
|
||||
c-0.2-0.2-1.1-1.3-1.5-1.6c-0.2-0.2-0.4-0.3-0.7-0.3c-0.1,0-0.1,0-0.2,0c-0.6,0.1-0.4,0.8-0.4,0.8s-0.6,0.1-0.6-0.7
|
||||
c0-0.6,0.5-0.9,0.9-1.1c0.6-0.1,1.3-0.2,1.4-1.2c0-0.2,0-0.3,0-0.3s-0.2,0.3-0.8,0.6c-0.7,0.3-2.4,0.3-2.4,1.3
|
||||
c0,0.4,0.4,0.4,0.4,0.4s0,0.2-0.3,0.2c-0.1,0-0.1,0-0.2,0c-0.4-0.1-0.5-0.5-0.5-1c0-0.3-0.2-0.8-0.6-0.7c-0.1,0-0.2,0-0.3,0.1
|
||||
c-0.3,0.2-0.2,0.5-0.2,0.5s-0.4-0.2-0.3-0.7c0.1-0.4,0.3-0.6,0.7-0.7c0,0,0.1,0,0.1,0c0.5-0.1,0.8,0.1,0.8,0.1s-0.1-0.3-0.1-0.7
|
||||
c0-0.3,0.2-0.6,0.6-0.7c0.7-0.1,0.8,0.3,0.7,0.6c0,0-0.2-0.2-0.3-0.1c0,0-0.1,0-0.1,0c-0.1,0.1-0.2,0.1-0.2,0.2
|
||||
c-0.1,0.3,0.1,0.6,0.1,0.7c0.1,0.2,0.5,0.3,1.1,0.2c0.6-0.1,1-0.5,1.2-0.9c0.1-0.2,0.2-0.3,0.1-0.5l0.3-3.6c0,0,0.1-0.9-0.5-1
|
||||
c-0.1,0-0.1,0-0.2,0c-0.5,0.1-1.1,0.8-0.9,1.7c0.1,0.7-0.2,1.2-0.5,1.3c-0.4,0.1-0.7,0-0.8-0.3c0.7,0,0.7-0.6,0.5-0.9
|
||||
c-0.1-0.1-0.2-0.1-0.4-0.1c-0.7,0.1-1.8,1.1-2,1.6c-0.2,0.5,0.2,0.4,0.4,0.8c0.1,0.3-0.2,0.6-0.2,0.6c0,0.1,0,0.2,0,0.3
|
||||
c-0.1,0.3-0.2,0.4-0.4,0.4c-0.1,0-0.2,0-0.3,0c0.2-0.1,0.2-0.3,0.3-0.4c0-0.1,0-0.2,0-0.2s-0.2,0-0.4-0.3c-0.2-0.3,0-0.4-0.2-0.8
|
||||
c-0.2-0.4-0.9-0.7-1.4-0.8c0,0-0.1,0-0.1,0c-0.1,0-0.2,0.1-0.3,0.1c0,0-0.1,0-0.1,0c-0.4,0-0.3-0.2-0.6-0.2c-0.2,0-0.3,0.2-0.2,0.4
|
||||
c0,0,0,0.1,0,0.1c-0.2-0.1-0.3-0.3-0.3-0.5c0-0.5,0.3-0.9,0.6-0.9c0.4,0,0.5,0.2,0.6,0.2c0.2-0.9-0.5-0.6-0.8-1
|
||||
c-0.2-0.3-0.1-0.4-0.1-0.5c0-0.2-0.2-0.2-0.4-0.1c-0.1,0-0.1,0-0.2,0c0,0,0.1-0.4,0.5-0.5c0.1,0,0.3,0,0.6,0.1
|
||||
c0.2-0.1,0.4,0,0.5,0.2c0.1,0.2,0,0.4,0,0.6c0.1,0.6,0.4,0.6,0.5,0.5c-0.3-0.8,0.1-1.1,0.1-1.2c0-0.1,0-0.3-0.2-0.4
|
||||
c0,0-0.1,0,0-0.1c0,0,0.8,0,0.9,0.5c0,0,0.3,0.2,0.3,0.6c0,0.5-0.3,0.6-0.4,0.7c0.1,0.6,0.4,0.6,0.7,0.6c0.3,0,0.6-0.2,0.6-0.2
|
||||
c0.5-0.2,1.6-0.9,1.3-1.4c-0.1-0.2-0.3-0.4-0.6-0.3c-0.1,0-0.2,0.1-0.3,0.1c-0.3,0.3-0.2,0.7-0.2,0.7c-0.5,0.1-0.7-0.7-0.4-1
|
||||
c0.2-0.2,0.5-0.3,0.7-0.4c0.3-0.1,0.6,0,1-0.1c0.4-0.1,0.7-0.3,0.9-0.8c0.2-0.3,0.2-0.8,0-1.2c-0.2-0.4-0.6-0.9-1.1-1
|
||||
c-0.1,0.9-0.6,1.6-1.2,2c-0.1,0.1-0.3,0.2-0.5,0.2c-0.1,0-0.2,0-0.1,0c0.8-0.9,0.6-1.9,0.6-2c-0.1,0.1-0.7,1.2-1.7,1.7
|
||||
c-0.1,0-0.2,0.1-0.3,0.1c-0.6,0.1-1.2-0.2-0.9-0.2c0.4-0.1,1.9-1,1.5-2.9c-0.1,0.1-0.7,1.3-1.6,1.9c-0.4,0.2-0.7,0.4-1.1,0.4
|
||||
c-0.7,0.1-1.2-0.1-1.1-0.2c0,0,1.8-0.9,1.9-1.7c-0.1,0-0.6,0.4-1.1,0.5c-0.1,0-0.2,0-0.2,0C6,52.2,6,51.1,6,51.1
|
||||
c0.1,0,1.6,0.1,2.8-2.4c0,0-0.8,0.3-1.7,0.4c-0.5,0.1-0.8-0.3-0.7-0.3c0.1,0,0.2,0,0.3,0c0.3,0,0.7-0.2,1.2-0.6
|
||||
c-0.1-0.1-2.1-0.9-1.3-2.2c0,0,0.5,0.5,1.2,0.5c0.5,0,1.3,0,1.5-0.5c0,0-1-0.1-2-0.7c-0.6-0.4-0.8-1.3-0.6-1
|
||||
c0.2,0.3,0.5,0.3,0.8,0.4c0.3,0.1,0.5,0,0.5,0s-1.5-1.4-0.5-2.5c0,0,0.5,1.4,1.7,1.4c0,0-0.6-0.6-0.7-1.3c-0.1-0.5-0.1-1.1,0-0.9
|
||||
c0.1,0.1,0.2,0.4,0.3,0.5c0.2,0.3,0.5,0.6,0.7,0.9c0,0-0.2-0.7,0.1-1.4c0-0.1,0.4-0.7,0.4-0.5c0,0,0,0.4,0,0.6
|
||||
c0.1,0.5,0.3,1.1,1.1,2c1.1,1.2,2.4,1.1,2.4,1.9c0,0.9-1.1,0.7-1.8,0.7c-0.2,0-0.2,0.4,0,0.6c0.6,0.8,3,1,3.8-0.3
|
||||
c0.3-0.4,0.3-1,0.2-1.5c-0.2-0.7-0.8-0.7-1.8-0.9c-0.7-0.2-0.5-0.5-0.4-0.5c0,0,0.2,0.1,0.4,0.1c0.5,0,0.2-0.7,0.2-0.7
|
||||
c-0.1,0-0.7,0.2-1.2,0.3c-0.6,0.1-1.4-0.2-1.4-0.6c0-0.5,0.6-0.7,0.6-0.5c0,0-0.4,0.7,0.8,0.7c0.4,0,1.1-0.1,1.1-0.1
|
||||
c0-0.2-0.4-0.5-0.6-0.5c-0.2,0-0.4,0.1-0.7,0c-0.1-0.3,0.2-0.6,0.4-0.7c0.2-0.1,0.4-0.1,0.5-0.1c0.1,0,0.2-0.5,1-0.5
|
||||
c0.4,0,1,0.3,1.3,0.3c0.3,0,0.7-0.2,0.8-0.1c0,0.1-0.2,0.4-0.1,0.6c0,0.6,0.9,2.8,2,3c1-0.2,2-2.4,2-3c0-0.2-0.2-0.5-0.1-0.6
|
||||
c0-0.1,0.5,0.1,0.8,0.1c0.3,0,0.8-0.3,1.3-0.3c0.8,0,0.8,0.4,1,0.5c0.1,0,0.3,0,0.5,0.1c0.2,0.1,0.6,0.4,0.4,0.7
|
||||
c-0.3,0-0.5,0-0.7,0c-0.3,0-0.6,0.3-0.6,0.5c0,0,0.7,0.1,1.1,0.1c1.1,0,0.8-0.7,0.8-0.7c0-0.1,0.6,0,0.6,0.5c0,0.4-0.7,0.7-1.4,0.6
|
||||
c-0.5,0-1.1-0.3-1.2-0.3c-0.1,0-0.4,0.7,0.1,0.7c0.2,0,0.4-0.1,0.4-0.1c0.1,0,0.3,0.3-0.4,0.5c-1,0.2-1.5,0.2-1.8,0.9
|
||||
c-0.2,0.5-0.1,1,0.2,1.5c0.8,1.3,3.2,1.1,3.8,0.3c0.2-0.3,0.2-0.6,0-0.6c-0.7,0.1-1.7,0.2-1.8-0.7c0-0.7,1.2-0.7,2.4-1.9
|
||||
c0.9-0.9,1.1-1.5,1.1-2c0-0.1,0-0.6,0-0.6c0-0.1,0.4,0.4,0.4,0.5c0.3,0.7,0.1,1.4,0.1,1.4c0.3-0.2,0.6-0.6,0.7-0.9
|
||||
c0.1-0.2,0.2-0.4,0.3-0.5c0.1-0.2,0.1,0.5,0,0.9c-0.1,0.7-0.7,1.3-0.7,1.3c1.2,0,1.7-1.4,1.7-1.4c0.9,1.1-0.5,2.5-0.5,2.5
|
||||
s0.2,0.1,0.5,0c0.3-0.1,0.6-0.2,0.8-0.4c0.2-0.3,0,0.6-0.6,1c-1,0.6-2,0.7-2,0.7c0.2,0.5,1,0.6,1.5,0.5c0.7-0.1,1.2-0.5,1.2-0.5
|
||||
c0.7,1.3-1.2,2.2-1.3,2.2c0.5,0.4,1,0.6,1.2,0.6c0.1,0,0.2,0,0.3,0c0.1,0-0.2,0.3-0.7,0.3C28.8,49,28,48.7,28,48.7
|
||||
c1.2,2.5,2.6,2.4,2.8,2.4c0,0,0,1.1-1.6,1.1c-0.1,0-0.2,0-0.2,0c-0.6-0.1-1.1-0.5-1.1-0.5c0,0.8,1.9,1.7,1.9,1.7
|
||||
c0.1,0.1-0.4,0.3-1.1,0.2c-0.3-0.1-0.7-0.2-1.1-0.4c-0.8-0.6-1.5-1.8-1.6-1.9c-0.5,1.9,1.1,2.8,1.5,2.9c0.2,0-0.4,0.3-0.9,0.2
|
||||
c-0.1,0-0.2,0-0.3-0.1c-1.1-0.5-1.7-1.6-1.7-1.7c0,0.1-0.2,1,0.6,2c0,0,0,0-0.1,0c-0.1,0-0.3-0.1-0.5-0.2c-0.6-0.4-1.1-1.1-1.2-2
|
||||
c-0.5,0.1-0.9,0.6-1.1,1c-0.2,0.4-0.2,0.8,0,1.2c0.3,0.5,0.6,0.7,0.9,0.8c0.3,0.1,0.6,0.1,1,0.1c0.3,0,0.5,0.1,0.7,0.4
|
||||
c0.3,0.3,0.1,1.2-0.4,1c0,0,0.2-0.4-0.2-0.7c-0.1-0.1-0.2-0.1-0.3-0.1c-0.2,0-0.5,0.1-0.6,0.3c-0.3,0.5,0.8,1.2,1.3,1.4
|
||||
c0,0,0.3,0.2,0.6,0.2c0.3,0,0.6,0,0.7-0.6c-0.1-0.1-0.4-0.2-0.4-0.7c0-0.4,0.3-0.6,0.3-0.6c0.1-0.5,0.9-0.5,0.9-0.5
|
||||
c0.1,0,0,0.1,0,0.1c-0.2,0.1-0.3,0.2-0.2,0.4c0,0.1,0.4,0.4,0.1,1.2c0.1,0,0.4,0,0.5-0.5c0-0.2-0.1-0.4,0-0.6
|
||||
c0.1-0.1,0.3-0.3,0.5-0.2c0.2-0.1,0.4-0.1,0.6-0.1c0.4,0.1,0.5,0.5,0.5,0.5s0,0,0,0c0,0-0.1,0-0.1,0c-0.2,0-0.5,0-0.4,0.1
|
||||
c0,0.1,0.1,0.2-0.1,0.5c-0.3,0.4-1,0.1-0.8,1c0,0,0.2-0.3,0.6-0.2c0.3,0,0.6,0.4,0.6,0.9c0,0.2-0.1,0.4-0.3,0.5c0,0,0,0,0-0.1
|
||||
c0.1-0.2,0-0.4-0.2-0.4c-0.3,0-0.2,0.2-0.6,0.2c-0.1,0-0.1,0-0.1,0c-0.2,0-0.2-0.1-0.3-0.1c0,0-0.1,0-0.1,0
|
||||
c-0.5,0.1-1.2,0.4-1.4,0.8c-0.2,0.4,0,0.5-0.2,0.8c-0.2,0.3-0.4,0.3-0.4,0.3s0,0.1,0,0.2C24.7,60.7,24.7,60.8,24.7,60.8 M23.4,61.3
|
||||
c0.3-0.1,0.7-0.2,1-0.4c0-0.1-0.1-0.1-0.1-0.3c0-0.1,0-0.2,0-0.3c0,0-0.3-0.3-0.2-0.6c0.2-0.4,0.5-0.3,0.4-0.8
|
||||
c-0.2-0.6-1.3-1.5-2-1.6c-0.2,0-0.3,0-0.4,0.1c-0.2,0.2-0.3,0.8,0.5,0.9c-0.2,0.3-0.4,0.4-0.8,0.3c-0.3-0.1-0.7-0.6-0.6-1.3
|
||||
c0.2-0.9-0.4-1.6-0.9-1.7c-0.1,0-0.1,0-0.2,0c-0.6,0.1-0.5,1-0.5,1l0.3,3.6c0,0.1,0,0.3,0.1,0.5c0.2,0.3,0.6,0.7,1.2,0.9
|
||||
c0.5,0.1,0.9,0,1.1-0.2c0-0.1,0.3-0.4,0.1-0.7c0-0.1-0.1-0.2-0.2-0.2c0,0-0.1,0-0.1,0c-0.2,0-0.3,0.1-0.3,0.1
|
||||
c-0.1-0.2,0-0.7,0.7-0.6c0.4,0.1,0.6,0.4,0.6,0.7c0,0.3-0.1,0.7-0.1,0.7S23.2,61.3,23.4,61.3 M21.6,62.6c0-0.1,0-0.2,0-0.3
|
||||
c-0.5-0.1-1-0.2-1.3-0.4c-0.6-0.3-0.8-0.6-0.8-0.6s0,0,0,0.3c0.1,1,0.7,1.1,1.4,1.2c0.3,0.1,0.6,0.3,0.8,0.5V62.6z M44.1,82.8
|
||||
c-0.1,0.2-0.1,0.6,0,0.8c0.5,0.7,2.6,0.9,3.5,0C46.5,83.4,45.3,83.1,44.1,82.8 M49.9,80.9c0.3,0.4,0.7,0.7,1,0.8c1-0.2,2-2.4,2-3
|
||||
c0-0.2-0.2-0.5-0.1-0.6c0-0.1,0.5,0.1,0.8,0.1c0.3,0,0.9-0.3,1.3-0.3c0.8,0,0.8,0.4,1,0.5c0.1,0,0.3,0,0.5,0.1
|
||||
c0.2,0.1,0.6,0.4,0.4,0.7c-0.4,0-0.5,0-0.7,0c-0.3,0-0.6,0.3-0.6,0.5c0,0,0.7,0.1,1.1,0.1c1.1,0,0.8-0.7,0.8-0.7
|
||||
c0-0.1,0.6,0,0.6,0.5c0,0.4-0.7,0.7-1.4,0.6c-0.5,0-1.1-0.3-1.2-0.3c-0.1,0-0.4,0.7,0.1,0.7c0.2,0,0.4-0.1,0.4-0.1
|
||||
c0.1,0,0.3,0.3-0.4,0.5c-1,0.2-1.5,0.2-1.8,0.9c-0.2,0.5-0.1,1,0.2,1.5c0.8,1.3,3.2,1.1,3.8,0.3c0.2-0.3,0.2-0.6,0-0.6
|
||||
c-0.7,0.1-1.7,0.2-1.8-0.7c0-0.7,1.2-0.7,2.4-1.9c0.9-0.9,1.1-1.5,1.1-2c0-0.1,0-0.6,0-0.6c0-0.1,0.4,0.4,0.4,0.5
|
||||
c0.3,0.7,0.1,1.4,0.1,1.4c0.3-0.2,0.6-0.6,0.7-0.9c0.1-0.2,0.2-0.4,0.3-0.5c0.1-0.2,0.1,0.5,0,0.9c-0.1,0.7-0.7,1.3-0.7,1.3
|
||||
c1.2,0,1.7-1.4,1.7-1.4c0.9,1.1-0.5,2.5-0.5,2.5s0.2,0.1,0.5,0c0.3-0.1,0.6-0.2,0.8-0.4c0.2-0.3,0,0.6-0.6,1c-1,0.6-2,0.7-2,0.7
|
||||
c0.2,0.5,1,0.6,1.5,0.5c0.7-0.1,1.2-0.5,1.2-0.5c0.7,1.3-1.2,2.2-1.3,2.2c0.5,0.4,1,0.6,1.2,0.6c0.1,0,0.2,0,0.3,0
|
||||
c0.1,0-0.2,0.3-0.7,0.3c-0.9-0.1-1.7-0.4-1.7-0.4c1.2,2.5,2.6,2.4,2.8,2.4c0,0,0,1.1-1.6,1.1c-0.1,0-0.2,0-0.2,0
|
||||
c-0.6-0.1-1.1-0.5-1.1-0.5c0,0.8,1.9,1.7,1.9,1.7c0.1,0.1-0.4,0.3-1.1,0.2c-0.3-0.1-0.7-0.2-1.1-0.4c-0.8-0.6-1.5-1.8-1.6-1.9
|
||||
c-0.5,1.9,1.1,2.8,1.5,2.9c0.2,0-0.4,0.3-0.9,0.2c-0.1,0-0.2,0-0.3-0.1c-1.1-0.5-1.7-1.6-1.7-1.7c0,0.1-0.2,1,0.6,2c0,0,0,0-0.1,0
|
||||
c-0.1,0-0.3-0.1-0.5-0.2c-0.6-0.4-1.1-1.1-1.2-2c-0.5,0.1-0.9,0.6-1.1,1c-0.2,0.4-0.2,0.8,0,1.2c0.3,0.5,0.6,0.7,0.9,0.8
|
||||
c0.3,0.1,0.6,0,1,0.1c0.3,0,0.5,0.1,0.7,0.4c0.3,0.3,0.1,1.2-0.4,1c0,0,0.2-0.4-0.2-0.7c-0.1-0.1-0.2-0.1-0.3-0.2
|
||||
c-0.2,0-0.5,0.1-0.6,0.3c-0.3,0.5,0.8,1.2,1.3,1.4c0,0,0.3,0.2,0.6,0.2c0.3,0,0.6,0,0.7-0.6c-0.1-0.1-0.4-0.2-0.4-0.7
|
||||
c0-0.4,0.3-0.6,0.3-0.6c0.1-0.5,0.9-0.5,0.9-0.5c0.1,0,0,0.1,0,0.1C59,92.7,58.9,92.9,59,93c0,0.1,0.4,0.4,0.1,1.2
|
||||
c0.1,0,0.4,0,0.5-0.5c0-0.2-0.1-0.4,0-0.6c0.1-0.2,0.3-0.3,0.5-0.2c0.2-0.1,0.4-0.1,0.6-0.1c0.4,0.1,0.5,0.5,0.5,0.5s0,0.1,0,0
|
||||
c0,0-0.1,0-0.1,0c-0.2,0-0.5,0-0.4,0.1c0,0.1,0.1,0.2-0.1,0.5c-0.3,0.4-1,0.1-0.8,1c0,0,0.2-0.3,0.6-0.2c0.3,0,0.6,0.4,0.6,0.9
|
||||
c0,0.2-0.1,0.4-0.3,0.5c0,0,0,0,0-0.1c0.1-0.2,0-0.4-0.2-0.4c-0.3,0-0.2,0.2-0.6,0.2c-0.1,0-0.1,0-0.1,0c-0.1,0-0.2-0.1-0.3-0.1
|
||||
c0,0-0.1,0-0.1,0c-0.5,0.1-1.2,0.4-1.4,0.8c-0.2,0.4,0,0.5-0.2,0.8c-0.2,0.3-0.4,0.3-0.4,0.3s0,0.1,0,0.2c0,0.1,0.1,0.3,0.3,0.4
|
||||
c0,0,0.1,0,0,0c-0.1,0-0.2,0.1-0.3,0c-0.1,0-0.3-0.1-0.4-0.4c0-0.1,0-0.2,0-0.3c0,0-0.3-0.3-0.2-0.6c0.2-0.4,0.5-0.3,0.4-0.8
|
||||
c-0.2-0.6-1.3-1.5-2-1.6c-0.2,0-0.3,0-0.4,0.1c-0.2,0.2-0.3,0.8,0.5,0.9c-0.1,0.3-0.4,0.4-0.8,0.3c-0.3-0.1-0.7-0.6-0.6-1.3
|
||||
c0.2-0.9-0.4-1.6-0.9-1.7c-0.1,0-0.2,0-0.2,0c-0.6,0.1-0.5,1-0.5,1l0.3,3.6c0,0.1,0,0.3,0.1,0.5c0.2,0.3,0.6,0.7,1.2,0.9
|
||||
c0.5,0.1,0.9,0,1.1-0.2c0-0.1,0.3-0.4,0.1-0.7c0-0.1-0.1-0.2-0.2-0.2c0,0-0.1,0-0.1,0c-0.2,0-0.3,0.1-0.3,0.1
|
||||
c-0.1-0.2,0-0.7,0.7-0.6c0.4,0.1,0.6,0.4,0.6,0.7c0,0.3-0.1,0.7-0.1,0.7s0.4-0.1,0.8-0.1c0,0,0.1,0,0.1,0c0.4,0.1,0.6,0.3,0.7,0.7
|
||||
c0.1,0.4-0.3,0.7-0.3,0.7s0.1-0.3-0.2-0.5c-0.1,0-0.2-0.1-0.3-0.1c-0.4-0.1-0.7,0.4-0.6,0.7c0,0.5-0.1,1-0.5,1c-0.1,0-0.2,0-0.2,0
|
||||
c-0.3,0-0.3-0.2-0.3-0.2s0.4,0,0.4-0.4c0-1-1.7-1-2.4-1.3c-0.6-0.3-0.8-0.6-0.8-0.6s0,0,0,0.3c0.1,1,0.7,1.1,1.4,1.2
|
||||
c0.4,0.1,0.9,0.5,0.9,1.1c0,0.8-0.6,0.7-0.6,0.7s0.2-0.7-0.4-0.8c0,0-0.1,0-0.2,0c-0.3,0-0.5,0.2-0.7,0.3c-0.3,0.3-1.3,1.4-1.5,1.6
|
||||
c-0.2-0.2-1.1-1.3-1.5-1.6c-0.2-0.2-0.4-0.3-0.7-0.3c-0.1,0-0.1,0-0.2,0c-0.6,0.1-0.4,0.8-0.4,0.8s-0.6,0.1-0.6-0.7
|
||||
c0-0.6,0.5-0.9,0.9-1.1c0.6-0.1,1.3-0.2,1.4-1.2c0-0.2,0-0.3,0-0.3s-0.2,0.3-0.8,0.6c-0.7,0.3-2.4,0.3-2.4,1.3
|
||||
c0,0.4,0.4,0.4,0.4,0.4s0,0.2-0.3,0.2c-0.1,0-0.1,0-0.2,0c-0.4-0.1-0.5-0.5-0.5-1c0-0.3-0.2-0.8-0.6-0.7c-0.1,0-0.2,0-0.3,0.1
|
||||
c-0.3,0.2-0.2,0.5-0.2,0.5s-0.4-0.2-0.3-0.7c0.1-0.4,0.3-0.6,0.7-0.7c0,0,0.1,0,0.1,0c0.5-0.1,0.8,0.1,0.8,0.1s-0.1-0.3-0.1-0.7
|
||||
c0-0.3,0.2-0.6,0.6-0.7c0.7-0.1,0.8,0.3,0.7,0.6c0,0-0.2-0.2-0.3-0.1c0,0-0.1,0-0.1,0c-0.1,0.1-0.2,0.1-0.2,0.2
|
||||
C46.8,98,47,98.3,47,98.3c0.1,0.2,0.5,0.3,1.1,0.2c0.6-0.1,1-0.5,1.2-0.9c0.1-0.2,0.2-0.3,0.1-0.5l0.3-3.6c0,0,0.1-0.9-0.5-1
|
||||
c-0.1,0-0.1,0-0.2,0c-0.5,0.1-1.1,0.8-0.9,1.7c0.1,0.7-0.2,1.2-0.6,1.3c-0.4,0.1-0.7,0-0.8-0.3c0.7-0.1,0.7-0.6,0.5-0.9
|
||||
c-0.1-0.1-0.2-0.1-0.4-0.1c-0.7,0.1-1.8,1.1-2,1.6c-0.2,0.5,0.2,0.4,0.4,0.8c0.1,0.3-0.2,0.6-0.2,0.6c0,0.1,0,0.2,0,0.3
|
||||
c-0.1,0.3-0.2,0.4-0.4,0.4c-0.1,0-0.2,0-0.3,0c0.2-0.1,0.2-0.3,0.3-0.4c0-0.1,0-0.2,0-0.2s-0.2,0-0.4-0.3c-0.2-0.3,0-0.4-0.2-0.8
|
||||
c-0.2-0.4-0.9-0.7-1.4-0.8c0,0-0.1,0-0.1,0c-0.1,0-0.2,0.1-0.3,0.1c0,0-0.1,0-0.1,0c-0.4,0-0.3-0.2-0.6-0.2c-0.2,0-0.3,0.2-0.2,0.4
|
||||
c0,0,0,0.1,0,0.1c-0.2-0.1-0.3-0.3-0.3-0.5c0-0.5,0.3-0.9,0.6-0.9c0.4,0,0.5,0.2,0.6,0.2c0.2-0.9-0.5-0.6-0.8-1
|
||||
c-0.2-0.3-0.1-0.4-0.1-0.5c0-0.2-0.2-0.2-0.4-0.1c-0.1,0-0.1,0-0.1,0c0,0,0.1-0.4,0.5-0.5c0.1,0,0.3,0,0.6,0.1
|
||||
c0.2-0.1,0.4,0,0.5,0.2c0.1,0.2,0,0.4,0,0.6c0.1,0.6,0.4,0.6,0.5,0.5c-0.3-0.8,0.1-1.1,0.1-1.2c0-0.1,0-0.3-0.2-0.4
|
||||
c0,0-0.1-0.1,0-0.1c0,0,0.8,0,0.9,0.5c0,0,0.3,0.2,0.3,0.6c0,0.5-0.3,0.6-0.4,0.7c0.1,0.6,0.4,0.6,0.7,0.6c0.3,0,0.6-0.2,0.6-0.2
|
||||
c0.5-0.2,1.6-0.9,1.3-1.4c-0.1-0.2-0.3-0.4-0.6-0.3c-0.1,0-0.2,0.1-0.3,0.2c-0.3,0.3-0.2,0.7-0.2,0.7c-0.5,0.1-0.7-0.7-0.4-1
|
||||
c0.2-0.2,0.5-0.3,0.7-0.4c0.3-0.1,0.6,0,1-0.1c0.4-0.1,0.7-0.3,0.9-0.8c0.2-0.3,0.2-0.8,0-1.2c-0.2-0.4-0.6-0.9-1.1-1
|
||||
c-0.1,0.9-0.6,1.6-1.2,2c-0.1,0.1-0.3,0.2-0.5,0.2c-0.1,0-0.2,0-0.1,0c0.8-0.9,0.6-1.9,0.6-2c-0.1,0.1-0.7,1.2-1.7,1.7
|
||||
c-0.1,0-0.2,0.1-0.3,0.1c-0.6,0.1-1.2-0.2-0.9-0.2c0.4-0.1,1.9-1,1.5-2.9c-0.1,0.1-0.7,1.3-1.6,1.9c-0.4,0.2-0.7,0.4-1.1,0.4
|
||||
c-0.7,0.1-1.2-0.1-1.1-0.2c0,0,1.8-0.9,1.9-1.7c-0.1,0-0.6,0.4-1.1,0.5c-0.1,0-0.2,0-0.2,0c-1.6,0-1.6-1.1-1.6-1.1
|
||||
c0.1,0,1.6,0.1,2.8-2.4c0,0-0.8,0.3-1.7,0.4c-0.5,0.1-0.8-0.3-0.7-0.3c0.1,0,0.2,0,0.3,0c0.3,0,0.7-0.2,1.2-0.6
|
||||
c-0.1-0.1-2.1-0.9-1.3-2.2c0,0,0.5,0.5,1.2,0.5c0.5,0,1.3-0.1,1.5-0.5c0,0-1-0.1-2-0.7c0,0-0.1,0-0.1-0.1c-0.5,0-0.9,0-1.4,0.1
|
||||
c-0.3,1.3-1.4,2.2-2.6,2.2c-1.3,0-2.3-0.9-2.6-2.2c-0.8-0.1-1.6-0.2-2.4-0.1l-17.9,19.1c1.7,1.6,3.6,3,5.6,4.1l16.8-17.9V97
|
||||
l-10.5,11.2c3.8,1.3,7.7,1.9,11.1,1.9c13.1,0,32.6-8.6,32.2-32.5V62.1L59.5,71h-8.9l17.3-18.4V42.6L49.7,61.8
|
||||
c0.1,0.1,0.1,0.1,0.1,0.2L49.9,80.9z M47.9,86.6h6v-2.4h-6L47.9,86.6z M50.9,91.3c2.7,0,2.9-2.5,2.9-2.5H48
|
||||
C48,88.8,48.2,91.3,50.9,91.3 M15.4,49.6h6v-2.4h-6L15.4,49.6z M18.4,54.3c2.7,0,2.9-2.5,2.9-2.5h-5.8
|
||||
C15.5,51.8,15.7,54.3,18.4,54.3 M34.4,81.8c0,0.7,0.6,1.3,1.3,1.3c0.7,0,1.3-0.6,1.3-1.3c0-0.7-0.6-1.3-1.3-1.3
|
||||
C35,80.6,34.4,81.1,34.4,81.8 M22.4,62.5v19.6c0,0,0.2,0.3,1.5-0.1c1.5-0.4,3.4-2.3,6-2.9c2-0.4,4.6,0.2,5.2,0.6V60.1
|
||||
c0,0-1.2-1.2-3.1-1.2c-1.9,0-5.1,1.7-6.4,2.3c-1.1,0.5-2.2,0.9-3,1C22.3,62.3,22.4,62.5,22.4,62.5 M39.6,79.1
|
||||
c3.4,0,5.2,2.1,6.3,2.6c2.7,1.1,3.1,0.5,3.1,0.5V62.5c0-0.2-0.3-0.2-0.3-0.2s-2.6-0.4-3.5-1c-0.9-0.5-4.1-2.4-6.4-2.4
|
||||
c-2.3,0-2.8,1-2.8,1v19.9C36.1,79.8,37.2,79.1,39.6,79.1"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 31 KiB |
@ -27,8 +27,9 @@
|
||||
if (identical(Sys.getenv("R_RUN_TINYTEST"), "true")) {
|
||||
# env var 'R_LIBS_USER' got overwritten during 'R CMD check' in GitHub Actions, so:
|
||||
.libPaths(c(Sys.getenv("R_LIBS_USER_GH_ACTIONS"), .libPaths()))
|
||||
if (AMR:::pkg_is_available("tinytest")) {
|
||||
if (AMR:::pkg_is_available("tinytest", also_load = TRUE)) {
|
||||
library(AMR)
|
||||
set_AMR_locale("English")
|
||||
out <- test_package("AMR",
|
||||
testdir = ifelse(AMR:::dir.exists("inst/tinytest"),
|
||||
"inst/tinytest",
|
||||
@ -37,7 +38,7 @@ if (identical(Sys.getenv("R_RUN_TINYTEST"), "true")) {
|
||||
verbose = 99,
|
||||
color = FALSE
|
||||
)
|
||||
cat("SUMMARY:\n")
|
||||
cat("\n\nSUMMARY:\n")
|
||||
print(summary(out))
|
||||
}
|
||||
}
|
||||
|
@ -569,7 +569,8 @@ plot(disk_values, mo = "E. coli", ab = "cipro")
|
||||
And when using the `ggplot2` package, but now choosing the latest implemented CLSI guideline (notice that the EUCAST-specific term "Susceptible, incr. exp." has changed to "Intermediate"):
|
||||
|
||||
```{r disk_plots_mo_ab, message = FALSE, warning = FALSE}
|
||||
autoplot(disk_values,
|
||||
autoplot(
|
||||
disk_values,
|
||||
mo = "E. coli",
|
||||
ab = "cipro",
|
||||
guideline = "CLSI"
|
||||
@ -580,22 +581,22 @@ autoplot(disk_values,
|
||||
|
||||
The next example uses the `example_isolates` data set. This is a data set included with this package and contains 2,000 microbial isolates with their full antibiograms. It reflects reality and can be used to practise AMR data analysis.
|
||||
|
||||
We will compare the resistance to fosfomycin (column `FOS`) in hospital A and D. The input for the `fisher.test()` can be retrieved with a transformation like this:
|
||||
We will compare the resistance to amoxicillin/clavulanic acid (column `FOS`) between an ICU and other clinical wards. The input for the `fisher.test()` can be retrieved with a transformation like this:
|
||||
|
||||
```{r, results = 'markup'}
|
||||
# use package 'tidyr' to pivot data:
|
||||
library(tidyr)
|
||||
|
||||
check_FOS <- example_isolates %>%
|
||||
filter(ward %in% c("A", "D")) %>% # filter on only hospitals A and D
|
||||
select(ward, FOS) %>% # select the hospitals and fosfomycin
|
||||
group_by(ward) %>% # group on the hospitals
|
||||
filter(ward %in% c("ICU", "Clinical")) %>% # filter on only these wards
|
||||
select(ward, AMC) %>% # select the wards and amoxi/clav
|
||||
group_by(ward) %>% # group on the wards
|
||||
count_df(combine_SI = TRUE) %>% # count all isolates per group (ward)
|
||||
pivot_wider(
|
||||
names_from = ward, # transform output so A and D are columns
|
||||
names_from = ward, # transform output so "ICU" and "Clinical" are columns
|
||||
values_from = value
|
||||
) %>%
|
||||
select(A, D) %>% # and only select these columns
|
||||
select(ICU, Clinical) %>% # and only select these columns
|
||||
as.matrix() # transform to a good old matrix for fisher.test()
|
||||
|
||||
check_FOS
|
||||
@ -608,4 +609,4 @@ We can apply the test now with:
|
||||
fisher.test(check_FOS)
|
||||
```
|
||||
|
||||
As can be seen, the p value is `r round(fisher.test(check_FOS)$p.value, 3)`, which means that the fosfomycin resistance found in isolates from patients in hospital A and D are really different.
|
||||
As can be seen, the p value is practically zero (`r format(fisher.test(check_FOS)$p.value, scientific = FALSE)`), which means that the amoxicillin/clavulanic acid resistance found in isolates between patients in ICUs and other clinical wards are really different.
|
||||
|
Reference in New Issue
Block a user