knitr::opts_chunk$set(
  collapse = FALSE,
  comment = "#>",
  fig.path = "man/figures/README-",
  out.width = "100%"
)

library(gluestick)

gluestick

R-CMD-check

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.

Benefits

Limitations

Installation

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.

Basic Usage

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 = "]]?")

Do not evaulate expressions - treat them as referencing named variables only

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)

Related Software

Acknowledgements



coolbutuseless/gluestick documentation built on Dec. 19, 2021, 6:03 p.m.