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
in C code: use STRING_PTR_RO instead of
STRING_PTR to comply with new CRAN policy
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'string_magic: new operators round and
signif (wtih shorthands r0 to r6
and s0 to s6) to flexibly format numbers:x = c(153, 207.256, 0.00254, 15231312.2)
# keeping one significant digit
cat_magic("v1: {s1, align ? x} ",
# removing the comma for large numbers and preserving ints
"v2: {s1.int.nocomma ? x}", .collapse = "\n")
#> v1: 153.0 v2: 153
#> v1: 207.2 v2: 207.2
#> v1: 0.002 v2: 0.002
#> v1: 15,231,312.2 v2: 15231312.2
string_magic("pi = {r3 ? pi}")
#> [1] "pi = 3.142"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).
rework the argument .width in
message_magic and cat_magic: now the special
variable .sw can only be used in a one-sided formula
(non-standard evaluation is still supported for
retro-compatibility)
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_aliasstringmagic 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.