## ----setup, include = FALSE---------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)

## -----------------------------------------------------------------------------
library(numops)

## -----------------------------------------------------------------------------
x <- c(-3, -1, 0.5, 4, 8)

clamp(x, lower = -1, upper = 4)

## -----------------------------------------------------------------------------
pmin(pmax(x, -1), 4)

## -----------------------------------------------------------------------------
clamp(c(-1, 4), lower = -1, upper = 4)

## -----------------------------------------------------------------------------
x_matrix <- matrix(
  c(-2, 0, 3, 8),
  nrow = 2,
  dimnames = list(c("a", "b"), c("x", "y"))
)

clamp(x_matrix, lower = 0, upper = 5)

## -----------------------------------------------------------------------------
probabilities <- c(-0.02, 0.25, 0.8, 1.03)

clamp01(probabilities)

## -----------------------------------------------------------------------------
in_range(probabilities, lower = 0, upper = 1)
clamp01(probabilities)

## -----------------------------------------------------------------------------
x <- c(-2, 0, 3, 5, 8)

in_range(x, lower = 0, upper = 5)

## -----------------------------------------------------------------------------
x[in_range(x, lower = 0, upper = 5)]

## -----------------------------------------------------------------------------
in_range(c(0, 5), lower = 0, upper = 5)

## -----------------------------------------------------------------------------
in_range(c(1, NA, 5), lower = 0, upper = 4)

## -----------------------------------------------------------------------------
angles <- c(-370, -10, 0, 360, 370, 725)

wrap(angles, lower = 0, upper = 360)

## -----------------------------------------------------------------------------
angles >= 0 & angles < 360

## -----------------------------------------------------------------------------
hours <- c(-2, 0, 12, 24, 27, 49)

wrap(hours, lower = 0, upper = 24)

## -----------------------------------------------------------------------------
phases <- c(-2 * pi, -pi, 0, pi, 2 * pi)

wrap(phases, lower = -pi, upper = pi)

## ----wrap-plot, fig.alt = "Wrapped angle against original angle"--------------
angle_sequence <- seq(-720, 720, length.out = 500)

plot(
  angle_sequence,
  wrap(angle_sequence, lower = 0, upper = 360),
  type = "l",
  xlab = "Original angle",
  ylab = "Wrapped angle",
  main = "Wrapping angles to [0, 360)"
)

## -----------------------------------------------------------------------------
clamp(c(-2, 5, 20), lower = 0, upper = 10)

## -----------------------------------------------------------------------------
x <- c(-2, 5, 20)
lower <- c(0, 0, 10)
upper <- c(1, 10, 15)

clamp(x, lower, upper)
in_range(x, lower, upper)

## -----------------------------------------------------------------------------
measurements <- data.frame(
  probability = c(-0.02, 0.35, 1.04, NA),
  angle = c(-10, 45, 360, 725)
)

measurements$probability_valid <- in_range(
  measurements$probability,
  lower = 0,
  upper = 1
)

measurements

## -----------------------------------------------------------------------------
measurements$probability <- clamp01(
  measurements$probability
)

measurements$angle <- wrap(
  measurements$angle,
  lower = 0,
  upper = 360
)

measurements

