Use Cases

knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)

The following examples demonstrate using chars objects inside functions, no longer needing to spell out strsplit(x, "")[[1]] every time.

library(charcuterie)

Test Membership

Which letters are vowels (aeiou)?

vowels <- function(word) {
  ch <- chars(word)
  setNames(ch %in% chars("aeiou"), ch)
}
vowels("string")
vowels("banana")

Since %in% is vectorised, it works nicely with a chars object

banana <- chars("banana")
banana[which(banana %in% chars("aeiou"))]

onomatopoeia <- chars("onomatopoeia")
onomatopoeia[which(onomatopoeia %in% chars("aeiou"))]

Iterate

"Strings" are finally iterable

for (x in chars("ABC")) {
  print(paste("Appendix", x))
}

Identify Palindromes

Is a word a palindrome (spelled the same forwards and backwards)?

palindrome <- function(a, ignore_spaces = FALSE) {
  a <- chars(a)
  if (ignore_spaces) a <- except(a, " ")
  all(rev(a) == a)
}
palindrome("palindrome")
palindrome("racecar")
palindrome("never odd or even", ignore_spaces = TRUE)
palindrome("go hang a salami im a lasagna hog", ignore_spaces = TRUE)

Find Anagrams

Are two words just rearrangements of their letters?

anagram <- function(a, b) {
  is_anagram <- function(a, b) {
    length(a) == length(b) && all(sort(a) == sort(b))
  }
  sapply(candidates, \(x) is_anagram(chars(a), chars(x)))
}
target <- "stressed"
candidates <- c("started", "desserts", "rested")
anagram(target, candidates)

Spongebob Case

Make every second letter uppercase

spongebob <- function(phrase) {
  x <- chars(phrase)
  odds <- seq(1, length(x), 2)
  x[odds] <- toupper(x[odds])
  string(x)
}
spongebob("you can't do anything useful with this package")
knitr::include_graphics("spongebob.jpg")


Try the charcuterie package in your browser

Any scripts or data that you put into this service are public.

charcuterie documentation built on April 3, 2025, 8:53 p.m.