Skip to content

Instantly share code, notes, and snippets.

@jennybc
Last active August 9, 2019 18:32
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jennybc/5d0a814c400f9985b1750fa0d9b8bdb8 to your computer and use it in GitHub Desktop.
Save jennybc/5d0a814c400f9985b1750fa0d9b8bdb8 to your computer and use it in GitHub Desktop.
A glue transformer inspired by the "variables & values" f-string syntax in Python 3.8
library(glue)
vv_transformer <- function(text, envir) {
regex <- "=$"
if (!grepl(regex, text)) {
return(identity_transformer(text, envir))
}
text <- sub(regex, "", text)
res <- identity_transformer(text, envir)
n <- length(res)
res <- glue_collapse(res, sep = ", ")
if (n > 1) {
res <- c("[", res, "]")
}
glue_collapse(c(text, " = ", res))
}
description <- "these awesome"
numbers <- c(90, 95, 80, 100)
average <- mean(numbers)
sum <- sum(numbers)
glue("For {description} {numbers=}, {average=}, {sum=}.", .transformer = vv_transformer)
#> For these awesome numbers = [90, 95, 80, 100], average = 91.25, sum = 365.
description <- "some random"
numbers <- sample(100, 4)
average <- mean(numbers)
sum <- sum(numbers)
glue("For {description} {numbers=}, {average=}, {sum=}.", .transformer = vv_transformer)
#> For some random numbers = [83, 5, 71, 68], average = 56.75, sum = 227.
a <- 3
b <- 5.6
glue("{a=}\n{b=}\n{a * 9 + b * 2=}", .transformer = vv_transformer)
#> a = 3
#> b = 5.6
#> a * 9 + b * 2 = 38.2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment