Skip to contents

mark (development version)

  • includes tryn() for running an expression a maximum number of times before failure #80
  • echo() is deprecated in favor of echo::echo() #210 (this was incorrectly listed in the previous release)
  • match_param() enhancements
    • can now return multiple matches #191, and can return partial matches
    • error message readability improved for matchParamMatchError
    • choices can now be a list of formula elements, preserving the return value
  • unlist0() no longer fails when input list is not named #220
  • file_copy_md5() added as a wrapper for fs::file_copy() but provides MD5 checks through tools::md5sum() to avoid overwriting files that had no content changes #207
  • write_file_md5() added as a general writing function and utilizes file_copy_md5() for MD5 checks (including some compressions) #207, #224

mark 0.7.0

CRAN release: 2023-10-23

  • merge_list() added for combining lists #200
  • glob() added for basic wildcard globbing on character vectors #167
  • adds greater use of fs over base file functions #160
  • improvements in todos() and fixmes()
    • File extension can now be set #170, which by default includes qmd (#163) and py files
    • new parameter ignore to ignore any files
    • file paths and line numbers can now be clicked within RStudio #171
  • adds more use of rlang::list2() for internally #199
  • GitHub action included to check version updates with pull requests #211
  • %::% and %:::% now exported from fuj

mark 0.6.1

CRAN release: 2023-09-18

  • updates Timezone references for upcoming R release #203

mark 0.6.0

CRAN release: 2023-05-06

New features

  • new functions for detecting blank values in a vector or data.frame. Blank values are those which do not contain any text (controls for NA) or are entirely white space.
  • match_param() now accepts a named listed for alias matching #104
  • echo() evaluates expressions and logs outputs #164
  • fuj is now imported

Fixes and updates

  • date_from_partial() works again #155 after fixing an issue with an internal utility is_valid_date_string() that wasn’t recognizing %Y-%m-%d (and potentially others)
  • lintr GitHub action updated #173; this includes plenty of internal improvements and code cleanup
  • package description in help files corrected #165
  • GitHub pages updated with latest pkgdown action #175
  • Update to GitHub R-CMD-check action #178
  • switch_in_case() handles NAs better #183
  • internal switch tests updated for waldo development #182 thanks, @hadley
  • methods for write_clipboard() are now displayed in documentation #186

mark 0.5.3

CRAN release: 2022-10-16

  • CRAN fix for new release #151

mark 0.5.2

CRAN release: 2022-10-01

New features


  • fact.haven_labelled() works properly and retains the label attribute #136
  • drop_levels() is exported #105
  • recode_by() and recode_only() handle factors better #81
  • Functions that made use of shell.exec() now try to determine the appropriate method of opening a file base on OS. #126
  • Internal functions for potentially coercing factor levels into dates no longer try to check for "%Z" in the date format #147

Breaking changes

  • reverse() has been removed (use flip() instead)
  • assign_label() has been removed (use assign_labels() instead)
  • percentile_rank(times) is deprecated in favor of percent_rank(weights)

Non visible changes

mark 0.5.1

CRAN release: 2022-08-06

  • Fix for CRAN check #128

mark 0.5.0

CRAN release: 2022-03-09

The package website is now available! More references and vignettes will make their way here in future releases.


  • detail(NA) (or when x has only NA values) no longer throws a warning and returns NA for min_c, max_c #59
  • print.noted() now passes ... to next methods #67
  • corrects deprecation warning in assign_label() #74
    • assign_label() will be removed in 0.4.2
  • set_not_available() now seems to work correctly – it probably hasn’t actually be working most of the time
  • percentile_rank() is now more correct when x is a decimal by checking for unique values first #92
  • now handle factor columns better

New features

  • Functions in ?handlers, all allow for additional params passed through ... #34
  • adds row_bind() to bind a list of data.frames() #46
  • adds drop_levels() with factor and data.frame methods; functions similarly to base::droplevels() but is a little faster #54
  • todos() and fixmes() gain a new param force
    • When TRUE, forces searches for .R files when the given directory does not contain an .Rproj file
    • When FALSE, prevents long start ups when these functions are called in a .Rprofile file and R is not launches in a project directory
    • This be toggled with a new options mark.todos.force
  • adds set_note(), a wrapper for note<-() #77
  • adds fact2char() to compliment char2fact() #75
  • print.pseudo_id() now truncates long uniques to a single line #70
  • match_param(NULL, null = TRUE) allows param to safely return NULL #89
  • fact_na() is added to use fact vectors with NA levels that work with #69 and other NA handling improvements
  • adds a new print._mark_bib_df() method to supporting printing lists
  • adds new methods for facts: as.integer.fact(), as.double.fact(), remove_na.fact()

Breaking changes

  • fact.numeric() now treats NaN the same as NA, no extra level/unique value is retained
  • read_clipboard() now returns NA when the clipboard is empty, rather than "" (improvements with internal type conversions)
  • improvements to NA handling as well

Other, non-visible

  • github actions updated
  • internal type conversion now heavily relies on utils::type.convert() with some additional functionality for logical (e.g., character string using "true" and "false") and for guessing dates in a YYYY-MM-DD format
  • general clean up and formatting

mark 0.4.1

CRAN release: 2021-11-05

  • details(factor) no longer adds fact class to factors #50
  • details() gains new argument factor_n to control threshold for making character vectors into factors
  • now works with single column data.frames #48
  • paste_combine() no longer duplicated the second vector of ... when length(...) > 2 #52

mark 0.4.0

CRAN release: 2021-10-22

New features

  • adds percentile_rank() to calculate percentile ranks with a vector
  • adds insert() to insert multiple values into a vector
  • pseudo_id() gains argument na_last to change positioning of NA values
  • is_true() and is_false() are now exported as generics with methods for default and logical
  • adds omit_na() for tracking positions of NA and non-NA values
  • quick_df(NULL) now returns an empty data.frame
  • quick_dfl() exported as a wrapper for quick_df(list(...))



  • documentation of struct() overwriting attributes improved and examples
  • adds more unit tests

mark 0.3.0

CRAN release: 2021-09-18


  • fact.haven_labelled() now returns an object with class fact #39; performance enhancements
  • set_names0(NULL) no longer causes an error and returns NULL #40
  • diff_time() correctly handles time zones when x is Date and y is POSIXt #41


  • updates file path finding functions (e.g., list_files()) to try to not search every file depending on desired searches (e.g., by full file paths or just base names)
  • as_ordered() handles factors better; S3 methods removed: as_ordered.ordered(), as_ordered.factor()
  • remove_na() has better performance when x has no NA values
  • and retain attributes of selected columns
  • todos() and fixmes() will not search for .R or .Rmd files if the path is not changed from "" and no .Rproj is found within the directory

New features

  • adds unlist0() to retain original names of lists
  • adds %names% for a fun way to set names
  • adds file_open() as alias for open_file()
  • adds detail() to return a data.frame of details for a vector of columns of a data.frame
  • adds squash_vec() to combined the names of a vector with repeated values
  • adds make_sf() as a simple wrapper for package specific system.file()
  • add_file_timestampe() gains a new parameter sep to separate the file name (sans ext) and the time stamp
  • gains new argument .ls to explicitly set a list (or data.frame) of columns
  • props() and family gain argument na.rm to not count NA values for proportions

mark 0.2.0

CRAN release: 2021-08-23


  • package_available() now visibly returns TRUE/FALSE
  • remove_na() now has methods for lists and factors
  • environments() now has it’s own print.mark_environments() method rather than calling cat() within the function itself
  • array_extract()’s first argument is changed from arr to .arr
  • diff_time() now defaults to using UTC (Related to #32)
  • print.note() method has been updated (Related to: #33):
    • to print x normally, without the note class when just the note has to be seen
    • an internal function now handles the note formatted for class noted
  • changes to fact()
    • fact() now returns a vector with a fact element
    • fact.character() correctly labels NAs #24
    • fact.factor() not longer simply returns x but rather updates the levels and integer values to confirm with other fact() methods. fact.factor() will retain all levels of the original value, reorder the levels, and append NA if necessary
    • fact.fact() added to return a correctly formatted fact()
    • fact.logical() now orders levels as TRUE then FALSE, and NA if present
    • fact.Date() and fact.POSIXt() added, which simply call fact.numeric()
    • print.fact() method added to print a fact vector as a factor
    • as_ordered.factor() and as_ordered.ordered() now call fact() to check levels


  • functions that check if an argument is a vector no long use is.vector() directly; arguments passed with attributes that when removed fulfill is.vector() are accepted
  • todos() and fixmes() now correctly show tags for .Rmd files
  • correction to error message in limit()
  • adds missing sort argument to props()
  • pseudo_id.factor() no longer returns NA_integer when a value is NA or a level is NA and correctly resets the order of the levels from the factor to their order of appearance
  • no longer coerces single column data.frames #36

New features

Non visible changes

  • code coverage added
  • additional tests added

mark 0.1.4

CRAN release: 2021-07-16

  • no visible user changes
  • removes temporarily created files #22

mark 0.1.3

CRAN release: 2021-06-16

New name! The previous name jordan was conflicting with recent package on CRAN.


  • corrects use of ... in todos() #8
    • grep() also now evaluated with cleaned todo text
    • searches for todos() in Rmd files, too
    • correctly removes additional # and spaces in lines (e.g., # # TODO text -> text)
  • updates for counts()
    • corrects NA counting in counts(); NA counts are now appended at the end whether or not sort is called
    • other optimization for counts()
    • core functions previously on base::rle() now use a combination of pseudo_id() and base::tabulate()
    • corrects counts for factor data when higher levels are not present #16
  • update to multi_grepl() internal functions to prevent conflicts with R 4.1.0
  • corrects error message in vector2df() when passed a list

New features