knitr::opts_chunk$set( collapse = FALSE, comment = "#>", fig.path = "man/figures/README-", out.width = "100%" ) library(gluestick)
The goal of the gluestick
package is to provide a home for a single, simple function
(also named gluestick
).
This gluestick()
function is meant to be an almost drop-in replacement
for 99.9% of the reasons I use the amazing glue
package.
The idea is that you would just steal the function out of this package and use
it in your own package in order to avoid having glue
as a dependency.
glue
where doubling the delimiter escpaes it.You can install from GitHub with:
# install.package('remotes') remotes::install_github('coolbutuseless/gluestick')
In reality, I can't see anyone actually wanting to install/use this package in preference to the glue package.
What I envisage is that if you want something "glue-like" to include in your
own work, you can just steal the gluestick()
function out of this package
and include it in your own package.
library(gluestick) #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # By default, `src` data is the calling environment #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ name <- 'Mike' gluestick("Hello {name}") #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # R code will be evaluated #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ gluestick("Hello {name}. Score = {1 + 2}") #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # Can pass in a list, data.frame, environment etc as the data source to # override the default #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ gluestick("Hello {name}", src = list(name = '#RStats')) #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # Delimiters are user-definable #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ gluestick("Hello ~~!name]]?", open = "~~!", close = "]]?")
In some circumstances it might be wise to assume that the expressions aren't actually R code, but only refer to names of variables in the data source. This might be useful when evaluating format strings input by an untrusted user.
If eval=FALSE
is set, then expressions will be treated as variable names,
mget()
will be used to fetch them from the data source, and no code
evaluation will occur.
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # This will work, as 'name' is a variable in the data `src` (i.e. the calling environment) #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ gluestick("Hello {name}", eval = FALSE) #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # This won't work as the code is not evaluated, and there is no variable # named `2 * 2` in the `src` data #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ gluestick("Hello {2 * 2}", src = list(name = 'mike'), eval = FALSE)
glue
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.