stringmagic
is now fully compatible with R v3.5.0 (at least)fix major bug in the if-else operator (&
) leading to opposite operations
in string_vec
, fix bug leading to the removal of empty strings
in string_vec
, fix bugs with the arguments .sep
and .collapse
string_magic
: new operator table
to flexibly attach elements with their frequencies:dna = string_split("atagggagctacctgcgcgtcgcccaaaagcaggg", "")
cat_magic("Letters in the DNA seq. {''c, Q? dna}: ",
# by default: inverse frequency sorting
" - default: {table, enum ? dna}",
" - value sorted: {table.sort, enum ? dna}",
# argument in single quotes to customize the display, it's a
# `string_magic` interpolation
" - shares: {'{x} [{round(s * 100)}%]' table, enum ? dna}",
# `fsort` sorts by **increasing** frequency
" - freq. sorted: {'{q ? x}' table.fsort, enum ? dna}",
.sep = "\n")
#> Letters in the DNA seq. "atagggagctacctgcgcgtcgcccaaaagcaggg":
#> - default: g (12), c (10), a (9) and t (4)
#> - value sorted: a (9), c (10), g (12) and t (4)
#> - shares: g [34%], c [29%], a [26%] and t [11%]
#> - freq. sorted: 't', 'a', 'c' and 'g'
add the argument .data
to string_magic()
, used to evaluate variables in the interpolations
new functions get_interpolated_expr()
and get_interpolated_vars()
. This function recovers all the expressions to be interpolated in a call to string_magic()
(oriented for developers).
new argument center.right
in the function string_fill
to resolve situations in which the characters are not perfectly centered
make cat_magic
and message_magic
more in line with their base R counterparts (they work properly with vectors now)
st_ops
, st_is
, st_any
, st_all
have been renamed into stops
, stis
, stany
, stall
to align with the convention of all other aliases. Although the names aren't great, at least they are consistent.the new operator swidth
(screen width) replaces the operator width
. The operator width becomes an alias for fill
.
the default screen width for message_magic
becomes the minimum between 100 characters and 90% of the current screen size (actually the console size).
improve error handling
add left
option to operators when relevant. Thanks to @kylebutts, #3
in string_vec
, change the default of argument .protect.vars
to FALSE
, which is much more aligned to common sense
in string_magic
's argument .post
: removal of argument catching, which could lead, occasionnally, to bugs very hard to understand
in string_vec
: add the arguments .check
and .help
.
stringmagic
compatible with R
in [4.1.0; 4.1.2]..trigger
to cat/message_magic_alias
stringmagic
compatible with R
< 4.1.0 by removing calls to ...names()
.add string_extract
to extract patterns
add string_split
to split character strings
string_ops
now uses ...
to pass operations. This is backward compatible.
string_clean
: now the magic flag also expands the replacements:
x = "Hi Mary, how's John doing?"
from = "John"
to = "Kate"
string_clean(x, "m/{from} => {to}")
#> [1] "Hi Mary, how's Kate doing?"
string_magic
: add the comma
flag to the enum
operation. In that case, the enumeration ends with ", " instead of ", and ".
string_magic
: the if-else operation &
now keeps memory of variables accessed within data sets:
data = list(x = c(15, 25, 550), y = rnorm(1000))
string_magic("The values are{& length(data$x) < 5 ; : {enum ? .} ; too many}.")
# [1] "The values are: 15, 25 and 550."
string_magic("The values are{& length(data$y) < 5 ; : {enum ? .} ; too many}.")
# [1] "The values are too many."
string_magic
: new operation deparse
(alias: dp
) to deparse an object and keep only the first characters of the deparsed string.
improve error messages.
sma
for string_magic
, catma
for catmagic, mema
for message_magic
, etc.. (st_ops
, st_is
, st_any
, st_all
, stextract
, stwhich
, stget
, stclean
, stvec
, streplace
, stsplit
-- short names with vowels after st
have an underscore.)First public release. The syntax should be stable.
This package is a spinoff from fixest's formula syntax interpolation.
Many thanks to Achim Zeileis, Vincent Arel-Bundock and Kyle Butts who provided insightful comments during the development.