Version 1.3.3 brings yet another if function with the twist of beeing able to write SAS style syntax in the conditions. any_table() also received some new additions. And of course there are the usual bug fixes. Some of the highlights are shown here in a bit more detail: https://s3rdia.github.io/qol_blog/posts/13.%20Update%201.3.3/
New functions
ifelse_multi(): A variation of theifelse()function which can handle multiple conditions in one go. The function takes in the conditions as characters. The conditions are parsed before evaluation to enable SAS like writing styles. (20.06.2026)
Renamed functions
stack_data():setwas renamed to prevent masking errors in combination withdata.table. (03.07.2026)
New functionality
if.(),else_if.(): Are now also able to use the new writing style with conditions as characters introduced byifelse_multi(). (20.06.2026)any_table(): With the newcomputeparameter all possibilities of thecompute.()function can be used withinany_table(). (26.06.2026)any_table():order_byparameter now allows to input a vector of variable names. (26.06.2026)any_table(),summarise_plus(): Variable combinations in rows, columns and types can now also take in variable combinations inside the brackets like "state + (age, sex + education, first_person)". (26.06.2026)All functions with filepaths: Wherever a file path or name can be passed, macro variables can be used inside the path or name. (06.07.2026)any_table(),summarise_plus(): It is now possible to specify per variable which statistics should be output. Instead of passing a vector of statistics into thestatisticsparameter, it can now also be a named list of variable names, where the list entry names are the statistics and the list elements the variable names or vectors of variable names. (07.07.2026)
Changed functionality
any_table(),summarise_plus(): Variable combinations in rows, columns and types like "state + (age, sex + education, first_person)", now have to use commas as separators in the brackets. (26.06.2026)import_data(): Now uses Latin-1 encoding. (01.07.2026)any_table(),frequencies(),crosstabs(),export_with_style(): Now the whole background is filled white as default. The new default is set inexcel_output_style(). (03.07.2026)any_table(): Whenbyvariables are provided that are also part of theroworcolumnvariables, the function now throws a warning instead of an error and keeps running without by variables. (07.07.2026)
Fixed
multi_join(): Before joining it is now checked whether there will be duplicate variable names after the join. If so, these variables will be dropped before joining. Otherwise it was possible that a variable could show up in the final data frame with the exact same name multiple times. (21.06.2026)any_table(): The statisticsum_wgtcouldn't be renamed correctly. It can now be renamed by just doingstat_labels = list("sum" = "Some label"). (26.06.2026)stack_data(): When a data frame and a list was input, the function tried to hack the list into one of the data frame columns. Now all lists are flattened and data frames extracted to prevent this behaviour. (03.07.2026)print_start_message(): Now doesn't reset start timer anymore when message is suppressed. (04.07.2026)print_start_message(): Doesn't reset message stack anymore when called in a deeply nested situation, which was caused by the optimization introduced in the last update. (06.07.2026)any_table(),frequencies(),crosstabs(),export_with_style(): Footnote heights are applied again. (06.07.2026)export_with_style(): Excel number stored as text error is now ignored for the whole table. (06.07.2026)interval_format():include_lowernow works as intended and doesn't include the lower bound anymore. (07.07.2026)
Optimization
summarise_plus(): Brought percentiles up to more speed. (17.06.2026)- I underestimated how big in size the call stack can get depending on what functions are called. Therefore the message stack now doesn't receive the full call stack per message anymore but a condensed version and just as a list of character strings. (04.07.2026)
summarise_plus(): If types are selected, the loop to calculate all the combinations is now aborted early, if the maximum specified combination depth is surpassed. (07.07.2026)
Additionally
multi_join(): Now displays the actual data frame names to be joined instead of just an iterative number in the console. (21.06.2026)any_table(): Received some additional messages for computing stats. (26.06.2026)any_table(): Received some additional messages for computing stats. (26.06.2026)summarise_plus(): Added example for type combinations. (26.06.2026)- Minimum
openxlsx2version is now 1.28, which allows a faster background fill. (03.07.2026) load_file_multi(): Added a message when files are stacked. (04.07.2026)any_table(),frequencies(),export_with_style(): Output from these functions received a class name. (07.07.2026)