Changes in version 1.4.0 (2026-06-03) New features - f() — string interpolation ("f-strings"): f("Hi {name}, you have {n} messages"). - %else% — inline fallback for an expression that might error: read.csv(path) %else% data.frame(). - %+-% — tolerance-interval constructor that composes with the between operators: x %><% (5 %+-% 0.5). - %/0% — safe division that returns NA instead of Inf/NaN on divide-by-zero. - %~% — case- and whitespace-insensitive string equality (the string counterpart to %~=%). - as.percent() — format a proportion as a percentage string. Bug fixes - is.bad_for_calcs() now correctly flags Inf/-Inf as bad for calculations. Previously infinities slipped through, which also affected the comparison operators (%==%, %>=%, ...) that rely on it. - is.R_x64() now calls is.os_unx() correctly (it previously referenced the function without calling it). - seq_around() now accepts ordinary numeric values for n; it previously errored unless n was given as an explicit integer (e.g. 5L). - The between operators (%><%, %>=<%) now handle reversed bounds, so 5 %><% c(10, 1) behaves the same as 5 %><% c(1, 10). - %na<-% now also accepts a replacement vector with one entry per missing value (filled in order), in addition to a scalar or a full-length vector. - Removed a stray duplicate (and subtly broken) internal definition of is.bad_for_calcs(). Improvements - as.class() is now vector-safe and no longer builds and parses code from a string internally. - is.http_available() uses requireNamespace() instead of the much slower installed.packages(). - get_system_python(), is_rda_file(), and is_rds_file() are now exported (they were documented in earlier versions but never actually exported). Documentation, tests & infrastructure - Documentation overhaul for clarity and consistency: tightened every help page, fixed typos throughout, and added missing \value documentation and runnable examples. - %rlike% and %perl% now have their own help page ("SQL-style pattern matching") instead of being grouped under the logical operators. - Rewritten, comprehensive vignette and a README.Rmd so the README's output is always real. - Added a full testthat test suite covering the operators and helpers, a BugReports URL, a pkgdown site configuration, and GitHub Actions for R-CMD-check and pkgdown deployment. Changes in version 1.3.14 (2023-07-20) - added is.os_arm() to check if running ARM cpu - added get_R_version() to pull current R version - added get_R_version_age() to find how old the installed R version is - added get_latest_CRAN_version() to find the latest version on CRAN (rvest required) - added get_system_python() to return default python called in system calls to "python" - added %C% for choose operator and %P% for permute - added %integrate% for inline integrations - added is.http_available() to check whether you can send an HTTP request (via httr, RCurl, or a system call to curl). Changes in version 1.3.0 - added seq_around() for evenly spaced sequences around an origin point - Cleaned up roxygen comments, DESCRIPTION, and NAMESPACE files. - Added a NEWS.md file to track changes to the package. - New complete cases functions (length_cc(), min_cc(), max_cc(), range_cc(), all_cc(), any_cc(), sum_cc(), prod_cc(), mean_cc(), median_cc(), var_cc(), cov_cc(), cor_cc(), sd_cc(), weighted.mean_cc(), quantile_cc(), IQR_cc(), mad_cc(), rowSums_cc(), colSums_cc(), rowMeans_cc(), colMeans_cc()) that set default argument to standard base/stats functions for only calculating on complete cases. - New get_os(), is.os_mac, is.os_win, is.os_lnx, and is.os_unx helper functions to quickly determine operating system. - New is_txt_file(), is_csv_file(), is_excel_file(), is_r_file(), is_rdata_file(), is_rda_file(), is_spss_file(), and check_ext_against() functions to quickly determine if file has specific file extensions. - New is.R_Revo() and is.RStudio() functions to determine whether Revolution R and RStudio are installed. - New n_unique() function to count unique items and n_unique_cc() version for complete cases. - New is.constant() and is.binary() functions to indicate whether a vector is constant (contains only ONE value type, ignoring NA) or binary (contains at most TWO value types, ignoring NA). - New get_most_frequent() function to get most frequent thing(s) in x. - New get_most_frequent_word() function to get most frequent word from string. - New get_nth_word() function to get nth word from string - New as.class() pipe-able function for arbitrary class conversions - New paste_()is the same as paste0 but uses an underscore to separate - New cat0() is analogous to paste0 but for cat - New catN() is the same as cat0 but automatically inserts a new line after the cat - New paste_series() paste a series of things with a conjunction - New paste_oxford() shortcut for paste_series as oxford comma