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:= string_split("atagggagctacctgcgcgtcgcccaaaagcaggg", "")
dna 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:= c(153, 207.256, 0.00254, 15231312.2)
x # 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_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:
= "Hi Mary, how's John doing?"
x = "John"
from = "Kate"
to 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:
= list(x = c(15, 25, 550), y = rnorm(1000))
data 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.