You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
2.0 KiB
70 lines
2.0 KiB
#' Spell check ggplot2 plot labels
|
|
#'
|
|
#' Due to the way ggplot2 objects are created, this has to be used in a
|
|
#' standalone context.
|
|
#'
|
|
#' Current functionality only looks for misspelled words in the labels of ggplot2 objects.
|
|
#' When misspelled words are found, a message is printed with the words and the
|
|
#' label that they are in. No messages will be printed if there are no misspelled
|
|
#' words.
|
|
#'
|
|
#' @md
|
|
#' @param gg ggplot2 object
|
|
#' @param dict a dictionary object or string which can be passed to [hunspell::dictionary].
|
|
#' Defaults to `hunspell::dictionary("en_US")`
|
|
#' @param ignore character vector with additional approved words added to the dictionary.
|
|
#' Defaults to `hunspell::en_stats`
|
|
#' @return the object that was passed in
|
|
#' @export
|
|
#' @examples
|
|
#' library(ggplot2)
|
|
#'
|
|
#' df <- data.frame(x=c(20, 25, 30), y=c(4, 4, 4), txt=c("One", "Two", "Three"))
|
|
#'
|
|
#' # not piping
|
|
#' ggplot(mtcars, aes(mpg, wt)) +
|
|
#' geom_point() +
|
|
#' labs(x="This is some txt", y="This is more text",
|
|
#' title="Thisy is a titlle",
|
|
#' subtitle="This is a subtitley",
|
|
#' caption="This is a captien") -> gg
|
|
#'
|
|
#' gg_check(gg)
|
|
gg_check <- function(gg, dict, ignore) {
|
|
|
|
try_require("hunspell", "hunspell")
|
|
try_require("stringi", "stri_extract_all_words")
|
|
|
|
if (missing(dict)) dict <- hunspell::dictionary("en_US")
|
|
if (missing(ignore)) ignore <- hunspell::en_stats
|
|
|
|
if (inherits(gg, "labels")) {
|
|
lbl <- gg
|
|
} else if ("labels" %in% names(gg)) {
|
|
lbl <- gg$labels
|
|
} else {
|
|
return(gg)
|
|
}
|
|
|
|
if (length(lbl) > 0) {
|
|
|
|
tmp <- lapply(names(lbl), function(lab) {
|
|
|
|
if (length(lbl[[lab]]) > 0) {
|
|
words <- stringi::stri_extract_all_words(lbl[[lab]])
|
|
words <- unlist(words)
|
|
w_tmp <- hunspell::hunspell(words, "text", dict = dict, ignore = ignore)
|
|
words <- w_tmp[which(sapply(w_tmp, length) > 0)]
|
|
if (length(words) > 0) {
|
|
message(sprintf("Possible misspelled words in [%s]: (%s)",
|
|
lab, paste0(words, collapse=", ")))
|
|
}
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
gg
|
|
|
|
}
|
|
|