String interpolation using bquote
-stype .() notation. Pure R, no C/C++ code called.
sinterp
and si
are synonyms.
si(
str,
...,
envir = parent.frame(),
enclos = parent.frame(),
match_pattern = "\\.\\((([^()]+)|(\\([^()]*\\)))+\\)",
removal_patterns = c("^\\.\\(", "\\)$")
)
charater string to be substituted into
force later arguments to bind by name
environemnt to look for values
enclosing evaluation environment
regexp to find substitution targets.
regexps to remove markers from substitution targets.
modified strings
See also https://CRAN.R-project.org/package=R.utils, https://CRAN.R-project.org/package=rprintf, and https://CRAN.R-project.org/package=glue.
x <- 7
si("x is .(x), x+1 is .(x+1)\n.(x) is odd is .(x%%2 == 1)")
#> [1] "x is 7, x+1 is 8\n7 is odd is TRUE"
# Because matching is done by a regular expression we
# can not use arbitrary depths of nested parenthesis inside
# the interpolation region. The default regexp allows
# one level of nesting (and one can use {} in place
# of parens in many places).
si("sin(x*(x+1)) is .(sin(x*{x+1}))")
#> [1] "sin(x*(x+1)) is -0.521551002086912"
# We can also change the delimiters,
# in this case to !! through the first whitespace.
si(c("x is !!x , x+1 is !!x+1 \n!!x is odd is !!x%%2==1"),
match_pattern = '!![^[:space:]]+[[:space:]]?',
removal_patterns = c("^!!", "[[:space:]]?$"))
#> [1] "x is 7, x+1 is 8\n7 is odd is TRUE"