.
#' - **WHONET** as a source for machine-reading the clinical breakpoints ([read more here](https://msberends.github.io/AMR/reference/clinical_breakpoints.html#imported-from-whonet)), 1989-`r max(as.integer(gsub("[^0-9]", "", AMR::clinical_breakpoints$guideline)))`, *WHO Collaborating Centre for Surveillance of Antimicrobial Resistance*. .
#'
@@ -621,7 +626,7 @@ as.sir.data.frame <- function(x,
if (missing(breakpoint_type) && any(host %in% AMR_env$host_preferred_order, na.rm = TRUE)) {
message_("Assuming `breakpoint_type = \"animal\"` since `host` contains animal species.")
breakpoint_type <- "animal"
- } else if (any(!convert_host(host) %in% c("human", "ECOFF"), na.rm = TRUE)) {
+ } else if (any(!suppressMessages(convert_host(host)) %in% c("human", "ECOFF"), na.rm = TRUE)) {
message_("Assuming `breakpoint_type = \"animal\"`.")
breakpoint_type <- "animal"
}
@@ -915,6 +920,7 @@ as_sir_method <- function(method_short,
guideline_coerced <- get_guideline(guideline, reference_data)
if (message_not_thrown_before("as.sir", "sir_interpretation_history")) {
+ message()
message_("Run `sir_interpretation_history()` afterwards to retrieve a logbook with all the details of the breakpoint interpretations.\n\n", add_fn = font_green)
}
@@ -938,6 +944,7 @@ as_sir_method <- function(method_short,
host <- breakpoint_type
}
}
+
if (!is.null(host) && !all(toupper(as.character(host)) %in% c("HUMAN", "ECOFF"))) {
if (!is.null(current_df) && length(host) == 1 && host %in% colnames(current_df) && any(current_df[[host]] %like% "[A-Z]", na.rm = TRUE)) {
host <- current_df[[host]]
@@ -954,8 +961,14 @@ as_sir_method <- function(method_short,
}
host.bak <- host
host <- convert_host(host)
- if (breakpoint_type == "animal" && message_not_thrown_before("as.sir", "host_preferred_order")) {
- message_("Please note that in the absence of specific veterinary breakpoints for certain animal hosts, breakpoints for dogs, cattle, swine, cats, horse, aquatic, and poultry, in that order, are used as substitutes.\n\n")
+ if (any(is.na(host) & !is.na(host.bak)) && message_not_thrown_before("as.sir", "missing_hosts")) {
+ warning_("The following animal host(s) could not be coerced: ", vector_and(host.bak[is.na(host) & !is.na(host.bak)]), immediate = TRUE)
+ message() # new line
+ }
+ if (breakpoint_type == "animal" && message_not_thrown_before("as.sir", "host_missing_breakpoints")) {
+ if (guideline_coerced %like% "CLSI") {
+ message_("Please note that in the absence of specific veterinary breakpoints for certain animal hosts, the CLSI guideline VET09 will be applied where possible.\n\n")
+ }
}
# get ab
@@ -1081,6 +1094,7 @@ as_sir_method <- function(method_short,
}
}
+ # format agents ----
agent_formatted <- paste0("'", font_bold(ab.bak, collapse = NULL), "'")
agent_name <- ab_name(ab, tolower = TRUE, language = NULL)
same_ab <- generalise_antibiotic_name(ab) == generalise_antibiotic_name(agent_name)
@@ -1101,6 +1115,7 @@ as_sir_method <- function(method_short,
""),
"... ")
+ # prepare used arguments ----
method <- method_short
metadata_mo <- get_mo_uncertainties()
@@ -1133,7 +1148,6 @@ as_sir_method <- function(method_short,
host = host,
stringsAsFactors = FALSE
)
-
if (method == "mic") {
# when as.sir.mic is called directly
df$values <- as.mic(df$values)
@@ -1141,11 +1155,16 @@ as_sir_method <- function(method_short,
# when as.sir.disk is called directly
df$values <- as.disk(df$values)
}
+
df_unique <- unique(df[ , c("mo", "ab", "uti", "host"), drop = FALSE])
- # get all breakpoints
+ # get all breakpoints, use humans as backup for animals
+ breakpoint_type_lookup <- breakpoint_type
+ if (breakpoint_type == "animal") {
+ breakpoint_type_lookup <- c(breakpoint_type, "human")
+ }
breakpoints <- breakpoints %pm>%
- subset(type == breakpoint_type)
+ subset(type %in% breakpoint_type_lookup)
if (isFALSE(include_screening)) {
# remove screening rules from the breakpoints table
@@ -1193,16 +1212,12 @@ as_sir_method <- function(method_short,
}
}
- # run the rules (df_unique is a row combination per mo/ab/uti/host)
+ # run the rules (df_unique is a row combination per mo/ab/uti/host) ----
for (i in seq_len(nrow(df_unique))) {
p$tick()
mo_current <- df_unique[i, "mo", drop = TRUE]
ab_current <- df_unique[i, "ab", drop = TRUE]
host_current <- df_unique[i, "host", drop = TRUE]
- if (is.na(host_current)) {
- # fall back to human
- host_current <- "human"
- }
uti_current <- df_unique[i, "uti", drop = TRUE]
notes_current <- character(0)
if (isFALSE(uti_current)) {
@@ -1212,9 +1227,7 @@ as_sir_method <- function(method_short,
rows <- which(df$mo == mo_current & df$ab == ab_current & df$host == host_current & df$uti == uti_current)
}
if (length(rows) == 0) {
- notes_current <- c(notes_current, font_red("Returned an empty result, which is unexpected. Are all of `mo`, `ab`, and `host` set and available?"))
- notes <- c(notes, notes_current)
- rise_warning <- TRUE
+ # this can happen if a host is unavailable, just continue with the next one, since a note about hosts having NA are already given at this point
next
}
values <- df[rows, "values", drop = TRUE]
@@ -1254,6 +1267,72 @@ as_sir_method <- function(method_short,
mo_current_other
))
+ ## fall-back methods for veterinary guidelines ----
+ if (breakpoint_type == "animal" && !host_current %in% breakpoints_current$host) {
+ if (guideline_coerced %like% "CLSI") {
+ # VET09 says that staph/strep/enterococcus BP can be extrapolated to all Gr+ cocci except for intrinsic resistance, so take all Gr+ cocci:
+ all_gram_pos_genera <- c("B_STPHY", "B_STRPT", "B_ENTRC", "B_PPTST", "B_AERCC", "B_MCRCCC", "B_TRPRL")
+
+ # HUMAN SUBSTITUTES
+ if (ab_current == "AZM" && mo_current_genus %in% all_gram_pos_genera && host_current %in% c("dogs", "cats", "horse")) {
+ # azithro can take human breakpoints for these agents
+ breakpoints_current <- breakpoints_current %pm>% subset(host == "human")
+ notes_current <- c(notes_current, paste0("Using ", font_bold("human"), " breakpoints for ", ab_formatted, " in Gram-positive cocci based on CLSI VET09."))
+ } else if (ab_current == "CTX" && mo_current_order == "B_[ORD]_ENTRBCTR" && host_current %in% c("dogs", "cats", "horse")) {
+ # cefotax can take human breakpoints for these agents
+ breakpoints_current <- breakpoints_current %pm>% subset(host == "human")
+ notes_current <- c(notes_current, paste0("Using ", font_bold("human"), " breakpoints for ", ab_formatted, " in Enterobacterales based on CLSI VET09."))
+ } else if (ab_current == "CAZ" && (mo_current_order == "B_[ORD]_ENTRBCTR" | mo_current == "B_PSDMN_AERG") && host_current %in% c("dogs", "cats", "horse")) {
+ # cefta can take human breakpoints for these agents
+ breakpoints_current <- breakpoints_current %pm>% subset(host == "human")
+ notes_current <- c(notes_current, paste0("Using ", font_bold("human"), " breakpoints for ", ab_formatted, " in Enterobacterales and ", font_italic("P. aeruginosa"), " based on CLSI VET09."))
+ } else if (ab_current == "ERY" && mo_current_genus %in% all_gram_pos_genera && host_current %in% c("dogs", "cats", "horse")) {
+ # erythro can take human breakpoints for these agents
+ breakpoints_current <- breakpoints_current %pm>% subset(host == "human")
+ notes_current <- c(notes_current, paste0("Using ", font_bold("human"), " breakpoints for ", ab_formatted, " in Gram-positive cocci based on CLSI VET09."))
+ } else if (ab_current == "IPM" && (mo_current_order == "B_[ORD]_ENTRBCTR" | mo_current == "B_PSDMN_AERG") && host_current %in% c("dogs", "cats", "horse")) {
+ # imipenem can take human breakpoints for these agents
+ breakpoints_current <- breakpoints_current %pm>% subset(host == "human")
+ notes_current <- c(notes_current, paste0("Using ", font_bold("human"), " breakpoints for ", ab_formatted, " in Enterobacterales and ", font_italic("P. aeruginosa"), " based on CLSI VET09."))
+ } else if (ab_current == "LNZ" && mo_current_genus %in% all_gram_pos_genera && host_current %in% c("dogs", "cats")) {
+ # linezolid can take human breakpoints for these agents
+ breakpoints_current <- breakpoints_current %pm>% subset(host == "human")
+ notes_current <- c(notes_current, paste0("Using ", font_bold("human"), " breakpoints for ", ab_formatted, " in staphylococci/enterococci based on CLSI VET09."))
+ } else if (ab_current == "NIT" && host_current %in% c("dogs", "cats")) {
+ # nitro can take human breakpoints for these agents
+ breakpoints_current <- breakpoints_current %pm>% subset(host == "human")
+ notes_current <- c(notes_current, paste0("Using ", font_bold("human"), " breakpoints for ", ab_formatted, " based on CLSI VET09."))
+ } else if (ab_current == "PEN" && mo_current_genus %in% all_gram_pos_genera && host_current %in% c("dogs", "cats")) {
+ # penicillin can take human breakpoints for these agents
+ breakpoints_current <- breakpoints_current %pm>% subset(host == "human")
+ notes_current <- c(notes_current, paste0("Using ", font_bold("human"), " breakpoints for ", ab_formatted, " in Gram-positive cocci based on CLSI VET09."))
+ } else if (ab_current == "RIF" && mo_current_genus %in% all_gram_pos_genera && host_current %in% c("dogs", "cats")) {
+ # rifampicin can take human breakpoints for staphylococci
+ breakpoints_current <- breakpoints_current %pm>% subset(host == "human")
+ notes_current <- c(notes_current, paste0("Using ", font_bold("human"), " breakpoints for ", ab_formatted, " in staphylococci based on CLSI VET09."))
+ } else if (ab_current == "SXT" && host_current %in% c("dogs", "cats", "horse")) {
+ # trimethoprim-sulfamethoxazole (TMS) can take human breakpoints for these agents
+ breakpoints_current <- breakpoints_current %pm>% subset(host == "human")
+ notes_current <- c(notes_current, paste0("Using ", font_bold("human"), " breakpoints for ", ab_formatted, " based on CLSI VET09."))
+ } else if (ab_current == "VAN" && host_current %in% c("dogs", "cats", "horse")) {
+ # vancomycin can take human breakpoints in these hosts
+ breakpoints_current <- breakpoints_current %pm>% subset(host == "human")
+ notes_current <- c(notes_current, paste0("Using ", font_bold("human"), " breakpoints for ", ab_formatted, " based on CLSI VET09."))
+
+ } else if (host_current %in% c("dogs", "cats") && (mo_current_genus %in% c("B_AMYCS", "B_NOCRD", "B_CMPYL", "B_CRYNB", "B_ENTRC", "B_MYCBC", "B_PSDMN", "B_AERMN") | mo_current_class == "B_[CLS]_BTPRTBCT" | mo_current == "B_LISTR_MNCY")) {
+ # human breakpoints if no canine/feline
+ breakpoints_current <- breakpoints_current %pm>% subset(host == "human")
+ notes_current <- c(notes_current, paste0("Using ", font_bold("human"), " breakpoints for ", mo_formatted, " based on CLSI VET09."))
+
+ } else {
+ # no specific CLSI solution for this, so only filter on current host (if no breakpoints available -> too bad)
+ breakpoints_current <- breakpoints_current %pm>%
+ subset(host == host_current)
+ }
+ }
+
+ }
+
if (NROW(breakpoints_current) == 0) {
AMR_env$sir_interpretation_history <- rbind_AMR(
AMR_env$sir_interpretation_history,
@@ -1282,9 +1361,6 @@ as_sir_method <- function(method_short,
next
}
- # set the host index according to most available breakpoints (see R/zzz.R where this is set in the pkg environment)
- breakpoints_current$host_index <- match(breakpoints_current$host, c("human", "ECOFF", AMR_env$host_preferred_order))
-
# sort on host and taxonomic rank
# (this will e.g. prefer 'species' breakpoints over 'order' breakpoints)
if (all(uti_current == FALSE, na.rm = TRUE)) {
@@ -1295,25 +1371,12 @@ as_sir_method <- function(method_short,
ifelse(is.na(uti), 2,
3))) %pm>%
# be as specific as possible (i.e. prefer species over genus):
- pm_arrange(host_index, rank_index, uti_index)
+ pm_arrange(rank_index, uti_index)
} else if (all(uti_current == TRUE, na.rm = TRUE)) {
breakpoints_current <- breakpoints_current %pm>%
subset(uti == TRUE) %pm>%
# be as specific as possible (i.e. prefer species over genus):
- pm_arrange(host_index, rank_index)
- }
-
- # veterinary host check
- host_current <- unique(df_unique[i, "host", drop = TRUE])[1]
- breakpoints_current$host_match <- breakpoints_current$host == host_current
- if (breakpoint_type == "animal") {
- if (any(breakpoints_current$host_match == TRUE, na.rm = TRUE)) {
- breakpoints_current <- breakpoints_current %pm>%
- subset(host_match == TRUE)
- } else {
- # no breakpoint found for this host, so sort on mostly available guidelines
- notes_current <- c(notes_current, paste0("Using ", font_bold(breakpoints_current$host[1]), " breakpoints since ", font_bold(host_current), " for ", ab_formatted, " in ", mo_formatted, " are not available."))
- }
+ pm_arrange(rank_index)
}
# throw messages for different body sites
diff --git a/R/sysdata.rda b/R/sysdata.rda
index 15432181..a13f05b8 100755
Binary files a/R/sysdata.rda and b/R/sysdata.rda differ
diff --git a/R/zzz.R b/R/zzz.R
index 5347a040..2dcb0bf4 100755
--- a/R/zzz.R
+++ b/R/zzz.R
@@ -84,6 +84,9 @@ AMR_env$chin <- import_fn("%chin%", "data.table", error_on_fail = FALSE)
# take cli symbols and error function if available
AMR_env$info_icon <- import_fn("symbol", "cli", error_on_fail = FALSE)$info %or% "i"
AMR_env$bullet_icon <- import_fn("symbol", "cli", error_on_fail = FALSE)$bullet %or% "*"
+
+AMR_env$cross_icon <- if (isTRUE(base::l10n_info()$`UTF-8`)) "\u00d7" else "x"
+
AMR_env$dots <- import_fn("symbol", "cli", error_on_fail = FALSE)$ellipsis %or% "..."
AMR_env$sup_1_icon <- import_fn("symbol", "cli", error_on_fail = FALSE)$sup_1 %or% "*"
AMR_env$cli_abort <- import_fn("cli_abort", "cli", error_on_fail = FALSE)
diff --git a/data-raw/ab.md5 b/data-raw/ab.md5
index bd526cae..08dc761e 100644
--- a/data-raw/ab.md5
+++ b/data-raw/ab.md5
@@ -1 +1 @@
-92d3e2f8deac335c92841d2ded974dee
+5ad894790ad048110f8eb9207b89501f
diff --git a/data-raw/antibiotics.dta b/data-raw/antibiotics.dta
index 5dac66eb..bc71486a 100644
Binary files a/data-raw/antibiotics.dta and b/data-raw/antibiotics.dta differ
diff --git a/data-raw/antibiotics.feather b/data-raw/antibiotics.feather
index 4f34469a..7538d60c 100644
Binary files a/data-raw/antibiotics.feather and b/data-raw/antibiotics.feather differ
diff --git a/data-raw/antibiotics.parquet b/data-raw/antibiotics.parquet
index e69de29b..a1b717e6 100644
Binary files a/data-raw/antibiotics.parquet and b/data-raw/antibiotics.parquet differ
diff --git a/data-raw/antibiotics.rds b/data-raw/antibiotics.rds
index 84a3edd0..7fefdf51 100644
Binary files a/data-raw/antibiotics.rds and b/data-raw/antibiotics.rds differ
diff --git a/data-raw/antibiotics.sav b/data-raw/antibiotics.sav
index ad373ddf..213a2342 100644
Binary files a/data-raw/antibiotics.sav and b/data-raw/antibiotics.sav differ
diff --git a/data-raw/antibiotics.txt b/data-raw/antibiotics.txt
index 8c5ebd54..5924e20f 100644
--- a/data-raw/antibiotics.txt
+++ b/data-raw/antibiotics.txt
@@ -468,7 +468,7 @@
"TOH" "Tobramycin-high" "Aminoglycosides" "NA" "tobra high,tobramycin high,tohl" "" ""
"TFX" 5517 "Tosufloxacin" "Quinolones" "J01MA22,S01AE09" "" "tosufloxacin" 0.45 "g" "100061-1,76146-0"
"TMP" 5578 "Trimethoprim" "Trimethoprims" "J01EA01" "Sulfonamides and trimethoprim" "Trimethoprim and derivatives" "t,tmp,tr,tri,trim,w" "abaprim,alprim,anitrim,antrima,antrimox,bacdan,bacidal,bacide,bacterial,bacticel,bactifor,bactin,bactoprim,bactramin,bactrim,bencole,bethaprim,biosulten,briscotrim,chemotrin,colizole,colizole ds,conprim,cotrimel,cotrimoxizole,deprim,dosulfin,duocide,esbesul,espectrin,euctrim,exbesul,fermagex,fortrim,idotrim,ikaprim,infectotrimet,instalac,kombinax,lagatrim,lagatrim forte,lastrim,lescot,methoprim,metoprim,monoprim,monotrim,monotrimin,novotrimel,omstat,oraprim,pancidim,polytrim,priloprim,primosept,primsol,proloprim,protrin,purbal,resprim,resprim forte,roubac,roubal,salvatrim,septrin ds,septrin forte,septrin s,setprin,sinotrim,stopan,streptoplus,sugaprim,sulfamar,sulfamethoprim,sulfoxaprim,sulthrim,sultrex,syraprim,tiempe,tmp smx,toprim,trimanyl,trimethioprim,trimethopim,trimethoprim,trimethoprime,trimethoprimum,trimethopriom,trimetoprim,trimetoprima,trimexazole,trimexol,trimezol,trimogal,trimono,trimopan,trimpex,triprim,trisul,trisulcom,trisulfam,trisural,uretrim,urobactrim,utetrin,velaten,wellcoprim,wellcoprin,xeroprim,zamboprim" 0.4 "g" 0.4 "g" "101495-0,11005-6,17747-7,18997-7,18998-5,20387-7,23614-1,23631-5,25273-4,32342-8,4079-0,4080-8,4081-6,511-6,512-4,513-2,514-0,515-7,516-5,517-3,518-1,55584-7,7056-5,7057-3,80552-3,80973-1"
-"SXT" 358641 "Trimethoprim/sulfamethoxazole" "Trimethoprims" "J01EE01" "Sulfonamides and trimethoprim" "Combinations of sulfonamides and trimethoprim, incl. derivatives" "cot,cotrim,sxt,t/s,trsu,trsx,ts" "abacin,abactrim,agoprim,alfatrim,aposulfatrim,bacteral,bacterial forte,bactilen,bactiver,bacton,bactoreduct,bactrim,bactrim ds,bactrim forte,bactrim pediatric,bactrimel,bactrizol,bactromin,bactropin,baktar,belcomycine,berlocid,bibacrim,biseptol,chemitrim,chemotrim,ciplin,colimycin,colimycin sulphate,colisticin,colistimethate,colistimethate sodium,colistin sulfate,colistin sulphate,colomycin,coly-mycin,cotribene,cotrim d.s.,cotrim eu rho,cotrim holsen,cotrim.l.u.t.,cotrimaxazol,cotrimazole,cotrimhexal,cotrimoxazol,cotrimoxazol al,cotrimoxazole,cotrimstada,cotriver,dibaprim,drylin,duratrimet,eltrianyl,escoprim,esteprim,eusaprim,fectrim,gantaprim,gantaprin,gantrim,groprim,helveprim,imexim,jenamoxazol,kemoprim,kepinol,kepinol forte,laratrim,linaris,maxtrim,microtrim,microtrim forte,mikrosid,momentol,oecotrim,oriprim,oxaprim,pantoprim,polymyxin e,polymyxin e. sulfate,primazole,promixin,septra,septra ds,septra grape,septrim,septrin,servitrim,sigaprim,sigaprin,sulfatrim pediatric,sulfotrim,sulfotrimin,sulmeprim pediatric,sulprim,sumetrolim,supracombin,suprim,tacumil,teleprim,teleprin,thiocuran,totazina,tribakin,trifen,trigonyl,trimesulf,trimetho comp,trimethoprimsulfa,trimetoger,trimexazol,trimforte,trimosulfa,uroplus,uroplus ds,uroplus ss" "101495-0,18998-5,20387-7,23631-5,25273-4,32342-8,4081-6,515-7,516-5,517-3,518-1,7057-3"
+"SXT" 358641 "Trimethoprim/sulfamethoxazole" "Trimethoprims" "J01EE01" "Sulfonamides and trimethoprim" "Combinations of sulfonamides and trimethoprim, incl. derivatives" "cot,cotrim,sxt,t/s,tms,trsu,trsx,ts" "abacin,abactrim,agoprim,alfatrim,aposulfatrim,bacteral,bacterial forte,bactilen,bactiver,bacton,bactoreduct,bactrim,bactrim ds,bactrim forte,bactrim pediatric,bactrimel,bactrizol,bactromin,bactropin,baktar,belcomycine,berlocid,bibacrim,biseptol,chemitrim,chemotrim,ciplin,colimycin,colimycin sulphate,colisticin,colistimethate,colistimethate sodium,colistin sulfate,colistin sulphate,colomycin,coly-mycin,cotribene,cotrim d.s.,cotrim eu rho,cotrim holsen,cotrim.l.u.t.,cotrimaxazol,cotrimazole,cotrimhexal,cotrimoxazol,cotrimoxazol al,cotrimoxazole,cotrimstada,cotriver,dibaprim,drylin,duratrimet,eltrianyl,escoprim,esteprim,eusaprim,fectrim,gantaprim,gantaprin,gantrim,groprim,helveprim,imexim,jenamoxazol,kemoprim,kepinol,kepinol forte,laratrim,linaris,maxtrim,microtrim,microtrim forte,mikrosid,momentol,oecotrim,oriprim,oxaprim,pantoprim,polymyxin e,polymyxin e. sulfate,primazole,promixin,septra,septra ds,septra grape,septrim,septrin,servitrim,sigaprim,sigaprin,sulfatrim pediatric,sulfotrim,sulfotrimin,sulmeprim pediatric,sulprim,sumetrolim,supracombin,suprim,tacumil,teleprim,teleprin,thiocuran,totazina,tribakin,trifen,trigonyl,trimesulf,trimetho comp,trimethoprimsulfa,trimetoger,trimexazol,trimforte,trimosulfa,uroplus,uroplus ds,uroplus ss" "101495-0,18998-5,20387-7,23631-5,25273-4,32342-8,4081-6,515-7,516-5,517-3,518-1,7057-3"
"TRL" 202225 "Troleandomycin" "Macrolides/lincosamides" "J01FA08" "Macrolides, lincosamides and streptogramins" "Macrolides" "" "acetyloleandomycin,aovine,cyclamycin,evramicina,matromicina,matromycin t,micotil,oleandocetine,oleandomycin,t.a.o.,treolmicina,tribiocillina,triocetin,triolan,troleandomicina,troleandomycin,troleandomycine,troleandomycinum,viamicina,wytrion" 1 "g" "18999-3,519-9,520-7,521-5,522-3"
"TRO" 55886 "Trospectomycin" "Other antibacterials" "NA" "" "rubidiumnitrate,trospectinomycin,trospectomicina,trospectomycin,trospectomycine,trospectomycinum" ""
"TVA" 62959 "Trovafloxacin" "Quinolones" "J01MA13" "Quinolone antibacterials" "Fluoroquinolones" "trov" "trovafloxacin,trovan" 0.2 "g" 0.2 "g" "23642-2,23643-0,35855-6,7058-1"
diff --git a/data-raw/antibiotics.xlsx b/data-raw/antibiotics.xlsx
index 9b2245c7..0797db9f 100644
Binary files a/data-raw/antibiotics.xlsx and b/data-raw/antibiotics.xlsx differ
diff --git a/data-raw/antibiotics.xpt b/data-raw/antibiotics.xpt
index e76b9d35..b8704770 100644
Binary files a/data-raw/antibiotics.xpt and b/data-raw/antibiotics.xpt differ
diff --git a/data-raw/reproduction_of_microorganisms.R b/data-raw/reproduction_of_microorganisms.R
index 38828ca1..b7275367 100644
--- a/data-raw/reproduction_of_microorganisms.R
+++ b/data-raw/reproduction_of_microorganisms.R
@@ -736,6 +736,8 @@ taxonomy_mycobank <- taxonomy_mycobank %>%
# Combine the datasets ----------------------------------------------------
+# TODO !! check why e.g. Clavispora lusitaniae is gotten from GBIF, not MycoBank !!
+
taxonomy <- taxonomy_lpsn %>%
# add fungi
bind_rows(taxonomy_mycobank) %>%
@@ -1237,9 +1239,9 @@ saveRDS(taxonomy, "data-raw/taxonomy2.rds")
# taxonomy <- readRDS("data-raw/taxonomy2.rds")
-# Remove unwanted taxonomic entries from Protoza/Fungi --------------------
+# Remove unwanted taxonomic entries ---------------------------------------
-taxonomy <- taxonomy %>%
+part1 <- taxonomy %>%
filter(
# keep all we added ourselves:
source == "manually added" |
@@ -1259,10 +1261,7 @@ taxonomy <- taxonomy %>%
# kingdom of Protozoa:
(phylum %in% c("Choanozoa", "Mycetozoa") & prevalence < 2) |
# Fungi:
- (kingdom == "Fungi" & (!rank %in% c("genus", "species", "subspecies") | prevalence < 2)) |
- # !(phylum %in% c("Ascomycota", "Zygomycota", "Basidiomycota") & prevalence == 2 & rank %in% c("genus", "species", "subspecies")),
- # !(genus %in% c("Leptosphaeria", "Physarum") & rank %in% c("species", "subspecies")), # keep only genus of this rare fungus, with resp. 850 and 500 species
- # # (leave Alternaria in there, part of human mycobiome and opportunistic pathogen)
+ (kingdom == "Fungi" & (!rank %in% c("genus", "species", "subspecies") | prevalence < 2 | class == "Pichiomycetes")) |
# Animalia:
genus %in% c("Lucilia", "Lumbricus") |
(class == "Insecta" & !rank %in% c("species", "subspecies")) | # keep only genus of insects, not all of their (sub)species
@@ -1272,6 +1271,29 @@ taxonomy <- taxonomy %>%
filter(kingdom != "Plantae",
!(genus %in% c("Aedes", "Anopheles") & rank %in% c("species", "subspecies")))
+# now get the parents and old names
+part2 <- taxonomy %>%
+ filter(gbif %in% c(part1$gbif_parent[!is.na(part1$gbif_parent)], part1$gbif_renamed_to[!is.na(part1$gbif_renamed_to)]) |
+ mycobank %in% c(part1$mycobank_parent[!is.na(part1$mycobank_parent)], part1$mycobank_renamed_to[!is.na(part1$mycobank_renamed_to)]) |
+ lpsn %in% c(part1$lpsn_parent[!is.na(part1$lpsn_parent)], part1$lpsn_renamed_to[!is.na(part1$lpsn_renamed_to)]))
+parts <- bind_rows(part1, part2)
+
+part3 <- taxonomy %>%
+ filter(gbif %in% c(parts$gbif_parent[!is.na(parts$gbif_parent)], parts$gbif_renamed_to[!is.na(parts$gbif_renamed_to)]) |
+ mycobank %in% c(parts$mycobank_parent[!is.na(parts$mycobank_parent)], parts$mycobank_renamed_to[!is.na(parts$mycobank_renamed_to)]) |
+ lpsn %in% c(parts$lpsn_parent[!is.na(parts$lpsn_parent)], parts$lpsn_renamed_to[!is.na(parts$lpsn_renamed_to)]))
+parts <- bind_rows(part1, part2, part3)
+
+part4 <- taxonomy %>%
+ filter(gbif %in% c(parts$gbif_parent[!is.na(parts$gbif_parent)], parts$gbif_renamed_to[!is.na(parts$gbif_renamed_to)]) |
+ mycobank %in% c(parts$mycobank_parent[!is.na(parts$mycobank_parent)], parts$mycobank_renamed_to[!is.na(parts$mycobank_renamed_to)]) |
+ lpsn %in% c(parts$lpsn_parent[!is.na(parts$lpsn_parent)], parts$lpsn_renamed_to[!is.na(parts$lpsn_renamed_to)]))
+parts <- bind_rows(part1, part2, part3, part4)
+
+taxonomy <- bind_rows(part1, part2, part3, part4) %>%
+ arrange(fullname) %>%
+ distinct(fullname, .keep_all = TRUE)
+
# no ghost families, orders classes, phyla
taxonomy <- taxonomy %>%
group_by(kingdom, family) %>%
@@ -2005,7 +2027,7 @@ taxonomy <- taxonomy %>%
filter(!mo %in% groups$mo) %>%
bind_rows(groups)
-# we added MO code, so make sure everything is still unique
+# we added an MO code, so make sure everything is still unique
any(duplicated(taxonomy$mo))
any(duplicated(taxonomy$fullname))
@@ -2018,13 +2040,17 @@ AMR::clinical_breakpoints %>% filter(!mo %in% taxonomy$mo)
AMR::example_isolates %>% filter(!mo %in% taxonomy$mo)
AMR::intrinsic_resistant %>% filter(!mo %in% taxonomy$mo)
+# all our previously manually added names should be in it
+all(microorganisms$fullname[microorganisms$source == "manually added"] %in% taxonomy$fullname)
+microorganisms$fullname[!microorganisms$fullname[microorganisms$source == "manually added"] %in% taxonomy$fullname]
+
# put this one back
taxonomy <- taxonomy %>%
bind_rows(microorganisms %>%
filter(fullname == "Blastocystis hominis") %>%
mutate(mo = as.character(mo)))
-# we added MO code, so make sure everything is still unique
+# we added an MO code, so make sure everything is still unique
any(duplicated(taxonomy$mo))
any(duplicated(taxonomy$fullname))
diff --git a/data/antibiotics.rda b/data/antibiotics.rda
index 94b2199f..73ca2909 100755
Binary files a/data/antibiotics.rda and b/data/antibiotics.rda differ
diff --git a/man/as.mo.Rd b/man/as.mo.Rd
index d682b001..fcc81263 100644
--- a/man/as.mo.Rd
+++ b/man/as.mo.Rd
@@ -20,6 +20,7 @@ as.mo(
reference_df = get_mo_source(),
ignore_pattern = getOption("AMR_ignore_pattern", NULL),
cleaning_regex = getOption("AMR_cleaning_regex", mo_cleaning_regex()),
+ only_fungi = getOption("AMR_only_fungi", FALSE),
language = get_AMR_locale(),
info = interactive(),
...
@@ -58,9 +59,11 @@ This excludes enterococci at default (who are in group D), use \code{Lancefield
\item{cleaning_regex}{a Perl-compatible \link[base:regex]{regular expression} (case-insensitive) to clean the input of \code{x}. Every matched part in \code{x} will be removed. At default, this is the outcome of \code{\link[=mo_cleaning_regex]{mo_cleaning_regex()}}, which removes texts between brackets and texts such as "species" and "serovar". The default can be set with the \link[=AMR-options]{package option} \code{\link[=AMR-options]{AMR_cleaning_regex}}.}
+\item{only_fungi}{a \link{logical} to indicate if only fungi must be found, making sure that e.g. misspellings always return records from the kingdom of Fungi. This can be set globally for \link[=mo_property]{all microorganism functions} with the \link[=AMR-options]{package option} \code{\link[=AMR-options]{AMR_only_fungi}}, i.e. \code{options(AMR_only_fungi = TRUE)}.}
+
\item{language}{language to translate text like "no growth", which defaults to the system language (see \code{\link[=get_AMR_locale]{get_AMR_locale()}})}
-\item{info}{a \link{logical} to indicate if a progress bar should be printed if more than 25 items are to be coerced - the default is \code{TRUE} only in interactive mode}
+\item{info}{a \link{logical} to indicate that info must be printed, e.g. a progress bar when more than 25 items are to be coerced, or a list with old taxonomic names. The default is \code{TRUE} only in interactive mode.}
\item{...}{other arguments passed on to functions}
}
@@ -87,15 +90,11 @@ A microorganism (MO) code from this package (class: \code{\link{mo}}) is human r
F (Fungi), PL (Plantae), P (Protozoa)
}\if{html}{\out{}}
-Values that cannot be coerced will be considered 'unknown' and will be returned as the MO code \code{UNKNOWN} with a warning.
+Values that cannot be coerced will be considered 'unknown' and will return the MO code \code{UNKNOWN} with a warning.
Use the \code{\link[=mo_property]{mo_*}} functions to get properties based on the returned code, see \emph{Examples}.
-The \code{\link[=as.mo]{as.mo()}} function uses a novel \link[=mo_matching_score]{matching score algorithm} (see \emph{Matching Score for Microorganisms} below) to match input against the \link[=microorganisms]{available microbial taxonomy} in this package. This will lead to the effect that e.g. \code{"E. coli"} (a microorganism highly prevalent in humans) will return the microbial ID of \emph{Escherichia coli} and not \emph{Entamoeba coli} (a microorganism less prevalent in humans), although the latter would alphabetically come first.
-
-With \code{Becker = TRUE}, the following 89 staphylococci will be converted to the \strong{coagulase-negative group}: \emph{S. americanisciuri}, \emph{S. argensis}, \emph{S. arlettae}, \emph{S. auricularis}, \emph{S. borealis}, \emph{S. brunensis}, \emph{S. caeli}, \emph{S. caledonicus}, \emph{S. canis}, \emph{S. capitis}, \emph{S. capitis capitis}, \emph{S. capitis urealyticus}, \emph{S. capitis ureolyticus}, \emph{S. caprae}, \emph{S. carnosus}, \emph{S. carnosus carnosus}, \emph{S. carnosus utilis}, \emph{S. casei}, \emph{S. caseolyticus}, \emph{S. chromogenes}, \emph{S. cohnii}, \emph{S. cohnii cohnii}, \emph{S. cohnii urealyticum}, \emph{S. cohnii urealyticus}, \emph{S. condimenti}, \emph{S. croceilyticus}, \emph{S. debuckii}, \emph{S. devriesei}, \emph{S. durrellii}, \emph{S. edaphicus}, \emph{S. epidermidis}, \emph{S. equorum}, \emph{S. equorum equorum}, \emph{S. equorum linens}, \emph{S. felis}, \emph{S. fleurettii}, \emph{S. gallinarum}, \emph{S. haemolyticus}, \emph{S. hominis}, \emph{S. hominis hominis}, \emph{S. hominis novobiosepticus}, \emph{S. jettensis}, \emph{S. kloosii}, \emph{S. lentus}, \emph{S. lloydii}, \emph{S. lugdunensis}, \emph{S. marylandisciuri}, \emph{S. massiliensis}, \emph{S. microti}, \emph{S. muscae}, \emph{S. nepalensis}, \emph{S. pasteuri}, \emph{S. petrasii}, \emph{S. petrasii croceilyticus}, \emph{S. petrasii jettensis}, \emph{S. petrasii petrasii}, \emph{S. petrasii pragensis}, \emph{S. pettenkoferi}, \emph{S. piscifermentans}, \emph{S. pragensis}, \emph{S. pseudoxylosus}, \emph{S. pulvereri}, \emph{S. ratti}, \emph{S. rostri}, \emph{S. saccharolyticus}, \emph{S. saprophyticus}, \emph{S. saprophyticus bovis}, \emph{S. saprophyticus saprophyticus}, \emph{S. schleiferi}, \emph{S. schleiferi schleiferi}, \emph{S. sciuri}, \emph{S. sciuri carnaticus}, \emph{S. sciuri lentus}, \emph{S. sciuri rodentium}, \emph{S. sciuri sciuri}, \emph{S. shinii}, \emph{S. simulans}, \emph{S. stepanovicii}, \emph{S. succinus}, \emph{S. succinus casei}, \emph{S. succinus succinus}, \emph{S. taiwanensis}, \emph{S. urealyticus}, \emph{S. ureilyticus}, \emph{S. veratri}, \emph{S. vitulinus}, \emph{S. vitulus}, \emph{S. warneri}, and \emph{S. xylosus}.\cr The following 16 staphylococci will be converted to the \strong{coagulase-positive group}: \emph{S. agnetis}, \emph{S. argenteus}, \emph{S. coagulans}, \emph{S. cornubiensis}, \emph{S. delphini}, \emph{S. hyicus}, \emph{S. hyicus chromogenes}, \emph{S. hyicus hyicus}, \emph{S. intermedius}, \emph{S. lutrae}, \emph{S. pseudintermedius}, \emph{S. roterodami}, \emph{S. schleiferi coagulans}, \emph{S. schweitzeri}, \emph{S. simiae}, and \emph{S. singaporensis}.
-
-With \code{Lancefield = TRUE}, the following streptococci will be converted to their corresponding Lancefield group: \emph{S. agalactiae} (Group B), \emph{S. anginosus anginosus} (Group F), \emph{S. anginosus whileyi} (Group F), \emph{S. anginosus} (Group F), \emph{S. canis} (Group G), \emph{S. dysgalactiae dysgalactiae} (Group C), \emph{S. dysgalactiae equisimilis} (Group C), \emph{S. dysgalactiae} (Group C), \emph{S. equi equi} (Group C), \emph{S. equi ruminatorum} (Group C), \emph{S. equi zooepidemicus} (Group C), \emph{S. equi} (Group C), \emph{S. pyogenes} (Group A), \emph{S. salivarius salivarius} (Group K), \emph{S. salivarius thermophilus} (Group K), \emph{S. salivarius} (Group K), and \emph{S. sanguinis} (Group H).
+The \code{\link[=as.mo]{as.mo()}} function uses a novel and scientifically validated (\doi{10.18637/jss.v104.i03}) matching score algorithm (see \emph{Matching Score for Microorganisms} below) to match input against the \link[=microorganisms]{available microbial taxonomy} in this package. This implicates that e.g. \code{"E. coli"} (a microorganism highly prevalent in humans) will return the microbial ID of \emph{Escherichia coli} and not \emph{Entamoeba coli} (a microorganism less prevalent in humans), although the latter would alphabetically come first.
\subsection{Coping with Uncertain Results}{
Results of non-exact taxonomic input are based on their \link[=mo_matching_score]{matching score}. The lowest allowed score can be set with the \code{minimum_matching_score} argument. At default this will be determined based on the character length of the input, and the \link[=microorganisms]{taxonomic kingdom} and \link[=mo_matching_score]{human pathogenicity} of the taxonomic outcome. If values are matched with uncertainty, a message will be shown to suggest the user to evaluate the results with \code{\link[=mo_uncertainties]{mo_uncertainties()}}, which returns a \link{data.frame} with all specifications.
@@ -110,9 +109,40 @@ There are three helper functions that can be run after using the \code{\link[=as
}
}
-\subsection{Microbial Prevalence of Pathogens in Humans}{
+\subsection{For Mycologists}{
-The coercion rules consider the prevalence of microorganisms in humans, which is available as the \code{prevalence} column in the \link{microorganisms} data set. The grouping into human pathogenic prevalence is explained in the section \emph{Matching Score for Microorganisms} below.
+The \link[=mo_matching_score]{matching score algorithm} gives precedence to bacteria over fungi. If you are only analysing fungi, be sure to use \code{only_fungi = TRUE}, or better yet, add this to your code and run it once every session:
+
+\if{html}{\out{}}\preformatted{options(AMR_only_fungi = TRUE)
+}\if{html}{\out{
}}
+
+This will make sure that no bacteria or other 'non-fungi' will be returned by \code{\link[=as.mo]{as.mo()}}, or any of the \code{\link[=mo_property]{mo_*}} functions.
+}
+
+\subsection{Coagulase-negative and Coagulase-positive Staphylococci}{
+
+With \code{Becker = TRUE}, the following staphylococci will be converted to their corresponding coagulase group:
+\itemize{
+\item Coagulase-negative: \emph{S. americanisciuri}, \emph{S. argensis}, \emph{S. arlettae}, \emph{S. auricularis}, \emph{S. borealis}, \emph{S. brunensis}, \emph{S. caeli}, \emph{S. caledonicus}, \emph{S. canis}, \emph{S. capitis}, \emph{S. capitis capitis}, \emph{S. capitis urealyticus}, \emph{S. capitis ureolyticus}, \emph{S. caprae}, \emph{S. carnosus}, \emph{S. carnosus carnosus}, \emph{S. carnosus utilis}, \emph{S. casei}, \emph{S. caseolyticus}, \emph{S. chromogenes}, \emph{S. cohnii}, \emph{S. cohnii cohnii}, \emph{S. cohnii urealyticum}, \emph{S. cohnii urealyticus}, \emph{S. condimenti}, \emph{S. croceilyticus}, \emph{S. debuckii}, \emph{S. devriesei}, \emph{S. durrellii}, \emph{S. edaphicus}, \emph{S. epidermidis}, \emph{S. equorum}, \emph{S. equorum equorum}, \emph{S. equorum linens}, \emph{S. felis}, \emph{S. fleurettii}, \emph{S. gallinarum}, \emph{S. haemolyticus}, \emph{S. hominis}, \emph{S. hominis hominis}, \emph{S. hominis novobiosepticus}, \emph{S. jettensis}, \emph{S. kloosii}, \emph{S. lentus}, \emph{S. lloydii}, \emph{S. lugdunensis}, \emph{S. marylandisciuri}, \emph{S. massiliensis}, \emph{S. microti}, \emph{S. muscae}, \emph{S. nepalensis}, \emph{S. pasteuri}, \emph{S. petrasii}, \emph{S. petrasii croceilyticus}, \emph{S. petrasii jettensis}, \emph{S. petrasii petrasii}, \emph{S. petrasii pragensis}, \emph{S. pettenkoferi}, \emph{S. piscifermentans}, \emph{S. pragensis}, \emph{S. pseudoxylosus}, \emph{S. pulvereri}, \emph{S. ratti}, \emph{S. rostri}, \emph{S. saccharolyticus}, \emph{S. saprophyticus}, \emph{S. saprophyticus bovis}, \emph{S. saprophyticus saprophyticus}, \emph{S. schleiferi}, \emph{S. schleiferi schleiferi}, \emph{S. sciuri}, \emph{S. sciuri carnaticus}, \emph{S. sciuri lentus}, \emph{S. sciuri rodentium}, \emph{S. sciuri sciuri}, \emph{S. shinii}, \emph{S. simulans}, \emph{S. stepanovicii}, \emph{S. succinus}, \emph{S. succinus casei}, \emph{S. succinus succinus}, \emph{S. taiwanensis}, \emph{S. urealyticus}, \emph{S. ureilyticus}, \emph{S. veratri}, \emph{S. vitulinus}, \emph{S. vitulus}, \emph{S. warneri}, and \emph{S. xylosus}
+\item Coagulase-positive: \emph{S. agnetis}, \emph{S. argenteus}, \emph{S. coagulans}, \emph{S. cornubiensis}, \emph{S. delphini}, \emph{S. hyicus}, \emph{S. hyicus chromogenes}, \emph{S. hyicus hyicus}, \emph{S. intermedius}, \emph{S. lutrae}, \emph{S. pseudintermedius}, \emph{S. roterodami}, \emph{S. schleiferi coagulans}, \emph{S. schweitzeri}, \emph{S. simiae}, and \emph{S. singaporensis}
+}
+
+For newly named staphylococcal species, such as \emph{S. brunensis} (2024) and \emph{S. shinii} (2023), we look up the scientific reference to make sure the species are considered for the correct coagulase group.
+}
+
+\subsection{Lancefield Groups in Streptococci}{
+
+With \code{Lancefield = TRUE}, the following streptococci will be converted to their corresponding Lancefield group:
+\itemize{
+\item Streptococcus Group A: \emph{S. pyogenes}
+\item Streptococcus Group B: \emph{S. agalactiae}
+\item Streptococcus Group C: \emph{S. dysgalactiae}, \emph{S. dysgalactiae dysgalactiae}, \emph{S. dysgalactiae equisimilis}, \emph{S. equi}, \emph{S. equi equi}, \emph{S. equi ruminatorum}, and \emph{S. equi zooepidemicus}
+\item Streptococcus Group F: \emph{S. anginosus}, \emph{S. anginosus anginosus}, \emph{S. anginosus whileyi}, \emph{S. constellatus}, \emph{S. constellatus constellatus}, \emph{S. constellatus pharyngis}, \emph{S. constellatus viborgensis}, and \emph{S. intermedius}
+\item Streptococcus Group G: \emph{S. canis}, \emph{S. dysgalactiae}, \emph{S. dysgalactiae dysgalactiae}, and \emph{S. dysgalactiae equisimilis}
+\item Streptococcus Group H: \emph{S. sanguinis}
+\item Streptococcus Group K: \emph{S. salivarius}, \emph{S. salivarius salivarius}, and \emph{S. salivarius thermophilus}
+\item Streptococcus Group L: \emph{S. dysgalactiae}, \emph{S. dysgalactiae dysgalactiae}, and \emph{S. dysgalactiae equisimilis}
+}
}
}
\section{Source}{
diff --git a/pkgdown/logos/AMR_intro.png b/pkgdown/assets/AMR_intro.png
similarity index 100%
rename from pkgdown/logos/AMR_intro.png
rename to pkgdown/assets/AMR_intro.png
diff --git a/pkgdown/logos/AMR_intro.svg b/pkgdown/assets/AMR_intro.svg
similarity index 100%
rename from pkgdown/logos/AMR_intro.svg
rename to pkgdown/assets/AMR_intro.svg
diff --git a/pkgdown/logos/countries.png b/pkgdown/assets/countries.png
similarity index 100%
rename from pkgdown/logos/countries.png
rename to pkgdown/assets/countries.png
diff --git a/pkgdown/logos/countries_large.png b/pkgdown/assets/countries_large.png
similarity index 100%
rename from pkgdown/logos/countries_large.png
rename to pkgdown/assets/countries_large.png
diff --git a/pkgdown/logos/endorsement_clsi_eucast.jpg b/pkgdown/assets/endorsement_clsi_eucast.jpg
similarity index 100%
rename from pkgdown/logos/endorsement_clsi_eucast.jpg
rename to pkgdown/assets/endorsement_clsi_eucast.jpg
diff --git a/pkgdown/logos/lang_cs.svg b/pkgdown/assets/lang_cs.svg
similarity index 100%
rename from pkgdown/logos/lang_cs.svg
rename to pkgdown/assets/lang_cs.svg
diff --git a/pkgdown/logos/lang_da.svg b/pkgdown/assets/lang_da.svg
similarity index 100%
rename from pkgdown/logos/lang_da.svg
rename to pkgdown/assets/lang_da.svg
diff --git a/pkgdown/logos/lang_de.svg b/pkgdown/assets/lang_de.svg
similarity index 100%
rename from pkgdown/logos/lang_de.svg
rename to pkgdown/assets/lang_de.svg
diff --git a/pkgdown/logos/lang_el.svg b/pkgdown/assets/lang_el.svg
similarity index 100%
rename from pkgdown/logos/lang_el.svg
rename to pkgdown/assets/lang_el.svg
diff --git a/pkgdown/logos/lang_en.svg b/pkgdown/assets/lang_en.svg
similarity index 100%
rename from pkgdown/logos/lang_en.svg
rename to pkgdown/assets/lang_en.svg
diff --git a/pkgdown/logos/lang_es.svg b/pkgdown/assets/lang_es.svg
similarity index 100%
rename from pkgdown/logos/lang_es.svg
rename to pkgdown/assets/lang_es.svg
diff --git a/pkgdown/logos/lang_fi.svg b/pkgdown/assets/lang_fi.svg
similarity index 100%
rename from pkgdown/logos/lang_fi.svg
rename to pkgdown/assets/lang_fi.svg
diff --git a/pkgdown/logos/lang_fr.svg b/pkgdown/assets/lang_fr.svg
similarity index 100%
rename from pkgdown/logos/lang_fr.svg
rename to pkgdown/assets/lang_fr.svg
diff --git a/pkgdown/logos/lang_it.svg b/pkgdown/assets/lang_it.svg
similarity index 100%
rename from pkgdown/logos/lang_it.svg
rename to pkgdown/assets/lang_it.svg
diff --git a/pkgdown/logos/lang_ja.svg b/pkgdown/assets/lang_ja.svg
similarity index 100%
rename from pkgdown/logos/lang_ja.svg
rename to pkgdown/assets/lang_ja.svg
diff --git a/pkgdown/logos/lang_nl.svg b/pkgdown/assets/lang_nl.svg
similarity index 100%
rename from pkgdown/logos/lang_nl.svg
rename to pkgdown/assets/lang_nl.svg
diff --git a/pkgdown/logos/lang_no.svg b/pkgdown/assets/lang_no.svg
similarity index 100%
rename from pkgdown/logos/lang_no.svg
rename to pkgdown/assets/lang_no.svg
diff --git a/pkgdown/logos/lang_pl.svg b/pkgdown/assets/lang_pl.svg
similarity index 100%
rename from pkgdown/logos/lang_pl.svg
rename to pkgdown/assets/lang_pl.svg
diff --git a/pkgdown/logos/lang_pt.svg b/pkgdown/assets/lang_pt.svg
similarity index 100%
rename from pkgdown/logos/lang_pt.svg
rename to pkgdown/assets/lang_pt.svg
diff --git a/pkgdown/logos/lang_ro.svg b/pkgdown/assets/lang_ro.svg
similarity index 100%
rename from pkgdown/logos/lang_ro.svg
rename to pkgdown/assets/lang_ro.svg
diff --git a/pkgdown/logos/lang_ru.svg b/pkgdown/assets/lang_ru.svg
similarity index 100%
rename from pkgdown/logos/lang_ru.svg
rename to pkgdown/assets/lang_ru.svg
diff --git a/pkgdown/logos/lang_sv.svg b/pkgdown/assets/lang_sv.svg
similarity index 100%
rename from pkgdown/logos/lang_sv.svg
rename to pkgdown/assets/lang_sv.svg
diff --git a/pkgdown/logos/lang_tr.svg b/pkgdown/assets/lang_tr.svg
similarity index 100%
rename from pkgdown/logos/lang_tr.svg
rename to pkgdown/assets/lang_tr.svg
diff --git a/pkgdown/logos/lang_uk.svg b/pkgdown/assets/lang_uk.svg
similarity index 100%
rename from pkgdown/logos/lang_uk.svg
rename to pkgdown/assets/lang_uk.svg
diff --git a/pkgdown/logos/lang_zh.svg b/pkgdown/assets/lang_zh.svg
similarity index 100%
rename from pkgdown/logos/lang_zh.svg
rename to pkgdown/assets/lang_zh.svg
diff --git a/pkgdown/logos/logo.svg b/pkgdown/assets/logo.svg
similarity index 100%
rename from pkgdown/logos/logo.svg
rename to pkgdown/assets/logo.svg
diff --git a/pkgdown/logos/logo_certe.svg b/pkgdown/assets/logo_certe.svg
similarity index 100%
rename from pkgdown/logos/logo_certe.svg
rename to pkgdown/assets/logo_certe.svg
diff --git a/pkgdown/logos/logo_eh1h.png b/pkgdown/assets/logo_eh1h.png
similarity index 100%
rename from pkgdown/logos/logo_eh1h.png
rename to pkgdown/assets/logo_eh1h.png
diff --git a/pkgdown/logos/logo_interreg.png b/pkgdown/assets/logo_interreg.png
similarity index 100%
rename from pkgdown/logos/logo_interreg.png
rename to pkgdown/assets/logo_interreg.png
diff --git a/pkgdown/logos/logo_rug.svg b/pkgdown/assets/logo_rug.svg
similarity index 100%
rename from pkgdown/logos/logo_rug.svg
rename to pkgdown/assets/logo_rug.svg
diff --git a/pkgdown/logos/logo_umcg.svg b/pkgdown/assets/logo_umcg.svg
similarity index 100%
rename from pkgdown/logos/logo_umcg.svg
rename to pkgdown/assets/logo_umcg.svg