Skip to contents

fuj (development version)

  • quick_df() no longer allows NULL values in the input list #81
  • quick_df() is now a little faster #91
  • quick_dfl() is now deprecated #91
  • list() is now a little faster #91
  • list0()’s functionality to ignore empty inputs can be disabled if options(fuj.list.active = FALSE) before fuj is loaded #91
  • set_file_ext() and file_ext<-() added for controlling file extensions #89
  • + and / methods added for file_path classes, allowing path creation (e.g., fp("folder") / "subfolder" / "file" + "extension") #89

Changes in conditions

General improvements for conditions #90

  • BREAKING new_condition(type) now defaults to "condition" rather than "error"
  • new_condition() transformations on class have been adjusted
    • classes are no longer convert to camelCase; likely, the base fujCondition class is now fuj_condition
    • classes no longer need their type specified (e.g., my_erro, my_warning); the value of the type field is automatically appended to each element in class if it doesn’t already exist. This behavior can be controlled by using an AsIs class (e.g., class = I("exactly_this_class"))
    • class can now be a list for more control (e.g., class = list("value", I("exact value")))
    • new_condition(pkg) is deprecated in favor of new_condition(package)
    • new_condition(msg) is deprecated in favor of new_condition(message); message is now the first argument
    • new_condition() now only accepts message, class, and type as positional arguments with the include of ...; all other arguments must be explicitly named
  • internally, fuj now simplifies use of new_condition()
    • many conditions within fuj have been simplified through the use of generic condition classes (e.g., input_error, type_error, class_error)
    • verbose_message will try to avoid printing a message when options(fuj.verbose = FALSE) is set

New vap family

Includes new vap family functions; essentially familiar wrappers for vapply() #83

  • vaps are vector apply functions, with certain presets to assist with common cases
  • all vap functions have type-stable variants:

The below table shows inputs for vap functions and how they behave with the provided functions (f). Arguments to f()) can use any name.

vap function f args
vap(x, f) f(x)
vap2(x, y, f) f(x, y)
vap3(x, y, z, f) f(x, y, z)
vapi(x, f) f(x, i)
vapp(p, f) f(...)

Note: vapi() uses either the index or names of x as the second argument to f.

Each vap function comes with the following type variants:

Function Output Type Conversion
*_chr() character as.vector(_, "character")
*_dbl() double/numeric as.vector(_, "double")
*_int() integer as.vector(_, "integer")
*_lgl() logical as.vector(_, "logical")
*_raw() raw as.vector(_, "raw")
*_cpl() complex as.vector(_, "complex")
*_date() Date as.Date(as.vector(_, "double"), origin = "1970-01-01")
*_dttm() POSIXct as.POSIXct(as.vector(_, "double"), origin = "1970-01-01", tz = "UTC")

Note: these variants do not perform checks on output results, but rather coerce the output to the specified type.

fuj 0.2.2

CRAN release: 2025-04-23

fuj 0.2.1

CRAN release: 2024-05-20

Fixes

  • lst() again works with NA_character_ #60

fuj 0.2.0

CRAN release: 2024-05-07

Fixes

  • %wi% no longer drops duplicated in x #44
  • list0() now works better with some edge cases #55

New features

  • fp() added for creating file path objects with is_path() as a means of checking for the class; file_path() and is_file_path() exported as aliases, respectively #55
  • include() added as a means of partially attaching a package with specific exports #49
  • op.fuj, a named list of default options for fuj is now exported
  • multiple improvements for verbose() #50
    • verbose() has additional options for controlling the message output #36
      • .label can be set to a string to prepend to the message (defaults to "[verbose]")
      • .fill can be set to repeat .label on each line of the message (defaults to FALSE)
      • .verbose can be set to TRUE to print the message rather than relying on options()
    • verbose() prints prepended with "verbose " instead of "[verbose] " #42
    • make_verbose() is included to create a verbose function that will be triggered with a configured option, rather than the default getOption("fuj.verbose", getOption("verbose")) pattern. This can be used to define your own custom verbose function:
  • lst() exported as an alias for list0()
library(fuj)
options(fuj.verbose = FALSE)
verbose("will not show")

options(my.verbose = TRUE)
my_verbose <- make_verbose("my.verbose")
my_verbose("will show")
#> [verbose] will show

Internals

  • %||% is now copied from {base} when available (R versions >= 4.4) #35
  • additional local testing for os version
  • covr dropped as a suggest dependency
  • require_namespace() now allows for version requirements (e.g., require_namespace("fuj>=0.1.4")). When the version requirement is not met, an error of class namespaceVersionError is returned #41
  • simpleErrors converted to custom errors #43

fuj 0.1.4

CRAN release: 2023-10-22

  • adds %::% and %:::% (which now aliases %colons$) or retrieving exported and non-exported values from namespaces #31
  • adds verbose() for conditional message printing #29
  • GitHub workflow added to maintain version bumps on merge jmbarbone/actions/r-check-version

fuj 0.1.3

CRAN release: 2023-05-22

fuj 0.1.2

CRAN release: 2023-03-06

  • new_condition() gains a pkg argument to control for prepending a package name to the condition call. The default value of TRUE will try to find the .packageName object from your package. Change the default setting of pkg to prevent this addition. #12
  • require_namespace() can now accept multiple namespaces. The first namespace not found will throw an error #14
  • list0() now correctly throws valid errors #19
  • typo fixed in README #20

fuj 0.1.1

CRAN release: 2022-11-18

  • subset2 is now exported as an alias of [[ and subset3 is added as an alias of $ #3
  • improved documentation for aliases #3
  • improved test coverage – no longer skipping any functions #7

fuj 0.1.0

CRAN release: 2022-11-01

  • First release
  • Added a NEWS.md file to track changes to the package.