Skip to contents

santoku 0.10.0

CRAN release: 2023-10-12

  • List arguments to fmt in lbl_* functions will be taken as arguments to base::format. This gives more flexibility in formatting, e.g., units breaks.
  • chop_n() gains a tail argument, to deal with a last interval containing less than n elements. Set tail = "merge" to merge it with the previous interval. This guarantees that all intervals contain at least n elements.
  • chop_equally() may return fewer than groups groups when there are duplicate elements. We now warn when this happens.
  • Bugfix: chop_n() could return intervals with fewer than n elements when there were duplicate elements. The new algorithm avoids this, but may be slower in this case.

santoku 0.9.1

CRAN release: 2023-03-08

  • endpoint_labels() methods gain an unused ... argument to satisfy R CMD CHECK.

santoku 0.9.0

CRAN release: 2022-11-01

Breaking changes

There are important changes to close_end.

  • close_end is now TRUE by default in chop() and fillet(). In previous versions:

    chop(1:2, 1:2)
    ## [1] [1, 2) {2}   
    ## Levels: [1, 2) {2}  

    Whereas now:

    chop(1:2, 1:2)
    ## [1] [1, 2] [1, 2]
    ## Levels: [1, 2]
  • close_end is now always applied after extend. For example, in previous versions:

    chop(1:4, 2:3, close_end = TRUE)
    ## [1] [1, 2) [2, 3] [2, 3] (3, 4]
    ## Levels: [1, 2) [2, 3] (3, 4]

    Whereas now:

    chop(1:4, 2:3, close_end = TRUE)
    ## [1] [1, 2) [2, 3) [3, 4] [3, 4]
    ## Levels: [1, 2) [2, 3) [3, 4]

We changed this behaviour to be more in line with user expectations.

  • If breaks has names, they will be used as labels:

    chop(1:5, c(Low = 1, Mid = 2, High = 4))
    ## [1] Low  Mid  Mid  High High
    ## Levels: Low Mid High  

    Names can also be used for labels in probs in chop_quantiles() and proportions in chop_proportions().

  • There is a new raw parameter to chop(). This replaces the parameter raw in lbl_* functions, which is now soft-deprecated.

  • lbl_manual() is deprecated. Just use a vector argument to labels instead.

  • A labels argument to chop_quantiles() now needs to be explicitly named.

I expect these to be the last important breaking changes before we release version 1.0 and mark the package as “stable”. If they cause problems for you, please file an issue.

Other changes

santoku 0.8.0

CRAN release: 2022-06-08

Breaking changes

Other changes

santoku 0.7.0

CRAN release: 2022-03-18

Breaking changes

  • In labelling functions, first and last arguments are now passed to glue::glue(). Variables l and r represent the left and right endpoints of the intervals.
  • chop_mean_sd() now takes a vector sds of standard deviations, rather than a single maximum number sd of standard deviations. Write e.g.  chop_mean_sd(sds = 1:3) rather than chop_mean_sd(sd = 3). The sd argument is deprecated.
  • The groups argument to chop_evenly(), deprecated in 0.4.0, has been removed.
  • brk_left() and brk_right(), deprecated in 0.4.0, have been removed.
  • knife(), deprecated in 0.4.0, has been removed.
  • lbl_format(), questioning since 0.4.0, has been removed.
  • Arguments of lbl_dash() and lbl_intervals() have been reordered for consistency with other labelling functions.

Other changes

  • You can now chop many more types, including units from the units package, difftime objects, package_version objects, etc.
    • Character vectors will be chopped by lexicographic order, with an optional warning.
    • If you have problems chopping a vector type, file a bug report.
  • The glue package has become a hard dependency. It is used in many places to format labels.
  • There is a new lbl_glue() function using the glue package. Thanks to @dpprdan.
  • You can now set labels = NULL to return integer codes.
  • Arguments first, last and single can be used in lbl_intervals() and lbl_dash(), to override the first and last interval labels, or to label singleton intervals.
  • lbl_dash() and lbl_discrete() use unicode em-dash where possible.
  • brk_default() throws an error if breaks are not sorted.


  • Bugfix: tab() and friends no longer display an x as the variable name.
  • Bugfix: lbl_endpoint() was erroring for some types of breaks.

santoku 0.6.0

CRAN release: 2021-11-04

  • New arguments first and last in lbl_dash() and lbl_discrete() allow you to override the first and last interval labels.

  • Fixes for CRAN.

santoku 0.5.0

CRAN release: 2020-08-27

  • Negative numbers can be used in chop_width().
    • This sets left = FALSE by default.
    • Also works for negative time intervals.

santoku 0.4.1

CRAN release: 2020-06-16

  • Bugfix: chop(1:4, 1) was erroring.

santoku 0.4.0

CRAN release: 2020-06-09

Interface changes

The new version has some interface changes. These are based on user experience, and are designed to make using chop() more intuitive and predictable.

  • chop() has two new arguments, left and close_end.

    • Using left = FALSE is simpler and more intuitive than wrapping breaks in brk_right().
    • brk_left() and brk_right() have been kept for now, but cannot be used to wrap other break functions.
    • Using close_end is simpler than passing close_end into brk_left() or brk_right() (which no longer accept this argument directly).
    • left = TRUE by default, except for non-numeric objects in chop_quantiles() and chop_equally(), where left = FALSE works better.
  • close_end is now FALSE by default.

    • This prevents user surprises when e.g. chop(3, 1:3) puts 3 into a different category than chop(3, 1:4).
    • close_end is TRUE by default for chop_quantiles(), chop_n() and similar functions. This ensures that e.g.  chop_quantiles(x, c(0, 1/3, 2/3, 1)) does what you would expect.
  • The groups argument to chop_evenly() has been renamed from groups to intervals. This should make it easier to remember the difference between chop_evenly() and chop_equally(). (Chop evenly into n equal-width intervals, or chop equally into n equal-sized groups.)

  • knife() has been deprecated to keep the interface slim and focused. Use purrr::partial() instead.

Other changes

santoku 0.3.0

CRAN release: 2020-01-24

  • First CRAN release.

  • Changed kut() to kiru(). kiru() is an alternative spelling for chop(), for use when the tidyr package is loaded.

  • lbl_sequence() has become lbl_manual().

  • lbl_letters() and friends have been replaced by lbl_seq():

    • to replace lbl_letters() use lbl_seq()
    • to replace lbl_LETTERS() use lbl_seq("A")
    • to replace lbl_roman() use lbl_seq("i")
    • to replace lbl_ROMAN() use lbl_seq("I")
    • to replace lbl_numerals() use lbl_seq("1")
    • for more complex formatting use e.g. lbl_seq("A:"), lbl_seq("(i)")

santoku 0.2.0

  • Added a file to track changes to the package.

  • Default labels when extend = NULL have changed, from [-Inf, ... and ..., Inf] to [min(x), ... and ..., max(x)].