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 operatortable
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
tostring_magic()
, used to evaluate variables in the interpolations -
new functions
get_interpolated_expr()
andget_interpolated_vars()
. This function recovers all the expressions to be interpolated in a call tostring_magic()
(oriented for developers). -
new argument
center.right
in the functionstring_fill
to resolve situations in which the characters are not perfectly centered -
make
cat_magic
andmessage_magic
more in line with their base R counterparts (they work properly with vectors now)
- the functions
st_ops
,st_is
,st_any
,st_all
have been renamed intostops
,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 operatorwidth
. The operator width becomes an alias forfill
. -
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
toFALSE
, 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
.
- make
stringmagic
compatible withR
in [4.1.0; 4.1.2].
- add argument
.trigger
tocat/message_magic_alias
- make
stringmagic
compatible withR
< 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 thecomma
flag to theenum
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 operationdeparse
(alias:dp
) to deparse an object and keep only the first characters of the deparsed string. -
improve error messages.
- new battery of short aliases:
sma
forstring_magic
,catma
for catmagic,mema
formessage_magic
, etc.. (st_ops
,st_is
,st_any
,st_all
,stextract
,stwhich
,stget
,stclean
,stvec
,streplace
,stsplit
-- short names with vowels afterst
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.