From a0977a0f022de84a8f8e584da6ff2877c3b2a03f Mon Sep 17 00:00:00 2001 From: Jordan Mark Barbone Date: Wed, 14 Aug 2024 20:18:59 -0400 Subject: [PATCH 1/8] Update between-more.R (#120) --- R/between-more.R | 91 ++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 77 insertions(+), 14 deletions(-) diff --git a/R/between-more.R b/R/between-more.R index c66dd4e6..57d1c0b6 100644 --- a/R/between-more.R +++ b/R/between-more.R @@ -1,30 +1,43 @@ -#' Between more +#' Betwixt boundaries #' -#' Additional functionality and expansion of `dplyr::between` +#' Compare a vector betwitx (between) other values #' #' @param x A numeric vector of values -#' @param left,right Boundary values -#' @param type Abbreviation for the evaluation of `left` on `right` (see -#' details) +#' @param left,right Boundary values. For [betwixt()], when `NULL` no +#' comparison is made for that boundary. When both are `NULL`, `x` is just +#' returned. #' -#' @details Type can be one of the below: +#' @details `type``, `bounds`` can be one of the below: #' #' \describe{ -#' \item{g}{is greater than (>)} -#' \item{ge}{greater than or equal to (>=)} -#' \item{l}{less than (<)} -#' \item{ls}{less than or equal to (<=)} +#' \item{g,(}{is greater than (>)} +#' \item{ge,[}{greater than or equal to (>=)} +#' \item{l,))}{less than (<)} +#' \item{le,[]}{less than or equal to (<=)} #' } #' +#' Note: [between_more()] may be deprecated in the future in favor of just +#' [betwixt()] +#' #' @returns A logical vector #' -#' @export -#' @seealso `dplyr::case_when()` #' @examples -#' between_more(10, 2, 10, "gl") +#' +#' between_more(2:10, 2, 10, "gl") +#' betwixt(2:10, 2, bounds = "()") #' between_more(10, 2, 10, "gle") -#' between_more(1:5, c(3, 3, 2, 2, 1), 5) +#' betwixt(2:10, bounds = "(]") +#' betwixt(1:5, c(3, 3, 2, 2, 1), 5) +#' @name betwixt +#' @aliases between betwee_more +NULL + +# TODO consider deprecating `between_more()` in favor of `betwixt()`` +#' @rdname betwixt +#' @export +#' @param type Abbreviation for the evaluation of `left` on `right` (see +#' details) between_more <- function(x, left, right, type = c("gele", "gel", "gle", "gl")) { type <- match_param(type) @@ -41,6 +54,48 @@ between_more <- function(x, left, right, type = c("gele", "gel", "gle", "gl")) { ) } +#' @rdname betwixt +#' @export +#' @param bounds Boundaries for comparisons of `left` and `right` (see details) +betwixt <- function( + x, + left = NULL, + right = NULL, + bounds = c("[]", "[)", "(]", "()") +) { + left_null <- is.null(left) + right_null <- is.null(right) + + if (left_null & right_null) { + return(x) + } + + if (any(left > right, na.rm = TRUE)) { + warning(cond_betwixt_lr()) + } + + funs <- switch( + match_param(bounds), + "[]" = c(">=", "<="), + "[)" = c(">=", "<"), + "(]" = c(">", "<="), + "()" = c(">", "<") + ) + + if (left_null) { + left <- TRUE + } else { + left <- do.call(funs[1], list(x, left)) + } + + if (right_null) { + right <- TRUE + } else { + right <- do.call(funs[2], list(x, right)) + } + + left & right +} # conditions -------------------------------------------------------------- @@ -51,3 +106,11 @@ cond_between_more_lr <- function() { type = "warning" ) } + +cond_betwixt_lr <- function() { + new_condition( + "`left` > `right`", + "betwixt_lr", + type = "warning" + ) +} From acc7f50ee1d186b8997ae3ffa3cdcea32186dfc5 Mon Sep 17 00:00:00 2001 From: Jordan Mark Barbone Date: Wed, 14 Aug 2024 20:19:56 -0400 Subject: [PATCH 2/8] Update test-between-more.R (#120) --- tests/testthat/test-between-more.R | 37 ++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/tests/testthat/test-between-more.R b/tests/testthat/test-between-more.R index e440a6be..029a5210 100644 --- a/tests/testthat/test-between-more.R +++ b/tests/testthat/test-between-more.R @@ -36,3 +36,40 @@ test_that("between_more() works", { class = "betweenMoreLrWarning" ) }) + + +test_that("betwixt()", { + x <- 1:20 + ss <- x >= 5 & x <= 10 + sr <- x >= 5 & x < 10 + rs <- x > 5 & x <= 10 + rr <- x > 5 & x < 10 + + expect_equal(betwixt(x, 5, 10, "[]"), ss) + expect_equal(betwixt(x, 5, 10, "[)"), sr) + expect_equal(betwixt(x, 5, 10, "(]"), rs) + expect_equal(betwixt(x, 5, 10, "()"), rr) + + # vectors for left or right + + x <- 1:5 + left <- c(2, 2, 3, 2, 4) + right <- c(3, 3, 4, 3, 4) + + res <- c(FALSE, TRUE, TRUE, TRUE, TRUE) + expect_identical(betwixt(x, left), res) + + res <- c(FALSE, FALSE, TRUE, FALSE, FALSE) + expect_identical(betwixt(x, 3, right), res) + + res <- c(FALSE, TRUE, TRUE, FALSE, FALSE) + expect_identical(betwixt(x, left, right), res) + + expect_identical(betwixt(x), x) + + expect_warning( + betwixt(1:2, 3, 2), + "`left` > `right`", + class = "betwixtLrWarning" + ) +}) From 8e96b906cc8556444d44ce466a7a36948f59ff66 Mon Sep 17 00:00:00 2001 From: Jordan Mark Barbone Date: Wed, 14 Aug 2024 20:20:20 -0400 Subject: [PATCH 3/8] redoc (#120) --- DESCRIPTION | 2 +- NAMESPACE | 1 + man/between_more.Rd | 40 ---------------------------------- man/betwixt.Rd | 52 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 54 insertions(+), 41 deletions(-) delete mode 100644 man/between_more.Rd create mode 100644 man/betwixt.Rd diff --git a/DESCRIPTION b/DESCRIPTION index e8ede596..7b0673ce 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -50,7 +50,7 @@ Suggests: yaml, jsonlite, arrow (>= 16.1.0) -RoxygenNote: 7.3.1 +RoxygenNote: 7.3.2 Roxygen: list(markdown = TRUE) Config/testthat/edition: 3 Config/testthat/parallel: true diff --git a/NAMESPACE b/NAMESPACE index ccda37b7..3de0f451 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -107,6 +107,7 @@ export(assign_labels) export(base_alpha) export(base_n) export(between_more) +export(betwixt) export(bump_date_version) export(bump_version) export(char2fact) diff --git a/man/between_more.Rd b/man/between_more.Rd deleted file mode 100644 index 0a174b70..00000000 --- a/man/between_more.Rd +++ /dev/null @@ -1,40 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/between-more.R -\name{between_more} -\alias{between_more} -\title{Between more} -\usage{ -between_more(x, left, right, type = c("gele", "gel", "gle", "gl")) -} -\arguments{ -\item{x}{A numeric vector of values} - -\item{left, right}{Boundary values} - -\item{type}{Abbreviation for the evaluation of \code{left} on \code{right} (see -details)} -} -\value{ -A logical vector -} -\description{ -Additional functionality and expansion of \code{dplyr::between} -} -\details{ -Type can be one of the below: - -\describe{ -\item{g}{is greater than (>)} -\item{ge}{greater than or equal to (>=)} -\item{l}{less than (<)} -\item{ls}{less than or equal to (<=)} -} -} -\examples{ -between_more(10, 2, 10, "gl") -between_more(10, 2, 10, "gle") -between_more(1:5, c(3, 3, 2, 2, 1), 5) -} -\seealso{ -\code{dplyr::case_when()} -} diff --git a/man/betwixt.Rd b/man/betwixt.Rd new file mode 100644 index 00000000..7d7efa89 --- /dev/null +++ b/man/betwixt.Rd @@ -0,0 +1,52 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/between-more.R +\name{betwixt} +\alias{betwixt} +\alias{between} +\alias{betwee_more} +\alias{between_more} +\title{Betwixt boundaries} +\usage{ +between_more(x, left, right, type = c("gele", "gel", "gle", "gl")) + +betwixt(x, left = NULL, right = NULL, bounds = c("[]", "[)", "(]", "()")) +} +\arguments{ +\item{x}{A numeric vector of values} + +\item{left, right}{Boundary values. For \code{\link[=betwixt]{betwixt()}}, when \code{NULL} no +comparison is made for that boundary. When both are \code{NULL}, \code{x} is just +returned.} + +\item{type}{Abbreviation for the evaluation of \code{left} on \code{right} (see +details)} + +\item{bounds}{Boundaries for comparisons of \code{left} and \code{right} (see details)} +} +\value{ +A logical vector +} +\description{ +Compare a vector betwitx (between) other values +} +\details{ +\verb{type``, }bounds`` can be one of the below: + +\describe{ +\item{g,(}{is greater than (>)} +\item{ge,[}{greater than or equal to (>=)} +\item{l,))}{less than (<)} +\item{le,[]}{less than or equal to (<=)} +} + +Note: \code{\link[=between_more]{between_more()}} may be deprecated in the future in favor of just +\code{\link[=betwixt]{betwixt()}} +} +\examples{ + +between_more(2:10, 2, 10, "gl") +betwixt(2:10, 2, bounds = "()") +between_more(10, 2, 10, "gle") +betwixt(2:10, bounds = "(]") +betwixt(1:5, c(3, 3, 2, 2, 1), 5) +} From beac4b928c00fc69394d4acfe29bf1e1a6a81d36 Mon Sep 17 00:00:00 2001 From: Jordan Mark Barbone Date: Sat, 7 Sep 2024 16:59:38 -0400 Subject: [PATCH 4/8] rename (#120) --- R/{between-more.R => between.R} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename R/{between-more.R => between.R} (100%) diff --git a/R/between-more.R b/R/between.R similarity index 100% rename from R/between-more.R rename to R/between.R From 303be2c976118ca0313f4e3e92a1d14c824c0960 Mon Sep 17 00:00:00 2001 From: Jordan Mark Barbone Date: Sat, 7 Sep 2024 17:00:06 -0400 Subject: [PATCH 5/8] Update betwixt.Rd (#120) --- man/betwixt.Rd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/man/betwixt.Rd b/man/betwixt.Rd index 7d7efa89..dd630e03 100644 --- a/man/betwixt.Rd +++ b/man/betwixt.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/between-more.R +% Please edit documentation in R/between.R \name{betwixt} \alias{betwixt} \alias{between} From 962b254aee09acb2845e6f942de3526afa49daff Mon Sep 17 00:00:00 2001 From: Jordan Mark Barbone Date: Sat, 7 Sep 2024 17:00:22 -0400 Subject: [PATCH 6/8] lint (#120) --- R/between.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/between.R b/R/between.R index 57d1c0b6..e345681d 100644 --- a/R/between.R +++ b/R/between.R @@ -66,7 +66,7 @@ betwixt <- function( left_null <- is.null(left) right_null <- is.null(right) - if (left_null & right_null) { + if (left_null && right_null) { return(x) } From 88d28b7648f3b22caca1a26d61cadbe13d2b7808 Mon Sep 17 00:00:00 2001 From: Jordan Mark Barbone Date: Sat, 7 Sep 2024 17:00:54 -0400 Subject: [PATCH 7/8] news point and version bump (#120) --- DESCRIPTION | 2 +- NEWS.md | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 5a758413..33e25b2b 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: mark Type: Package Title: Miscellaneous, Analytic R Kernels -Version: 0.8.0.9003 +Version: 0.8.0.9004 Authors@R: person(given = "Jordan Mark", family = "Barbone", diff --git a/NEWS.md b/NEWS.md index dda5e67f..dcf7d22d 100644 --- a/NEWS.md +++ b/NEWS.md @@ -3,6 +3,7 @@ * `write_file_md5()` now supports `"feather"` and `"parquet"` methods as wrappers for [`{arrow}`]() [#234](https://github.com/jmbarbone/mark/issues/234) * `md5()` added to provide MD5 check sums for objects [#233](https://github.com/jmbarbone/jmbarbone/mark/issues/233) * `unique_rows()` added to subset on (non-)duplicated rows in a `data.frame` [#87](https://github.com/jmbarbone/mark/issues/87) +* `betwixt()` added as an alternative to `between_more()` [#120](https://github.com/jmbarbone/mark/issues/120) # mark 0.8.0 From 50947250bd63edbcd3142085275d296b20407b2b Mon Sep 17 00:00:00 2001 From: Jordan Mark Barbone Date: Sat, 7 Sep 2024 17:32:38 -0400 Subject: [PATCH 8/8] bump version (#120) --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 33e25b2b..e91cee51 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: mark Type: Package Title: Miscellaneous, Analytic R Kernels -Version: 0.8.0.9004 +Version: 0.8.0.9005 Authors@R: person(given = "Jordan Mark", family = "Barbone",