## ----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)

## -----------------------------------------------------------------------------
clamp01(c(-0.2, 0.35, 1.4, NA))

## -----------------------------------------------------------------------------
in_range(1:7, lower = 3, upper = 5)

## -----------------------------------------------------------------------------
wrap(c(-10, 0, 360, 370), lower = 0, upper = 360)

## -----------------------------------------------------------------------------
lerp(a = 10, b = 20, t = c(0, 0.25, 0.5, 1, 1.5))

## -----------------------------------------------------------------------------
inv_lerp(a = 10, b = 20, x = c(5, 10, 15, 20, 25))

## -----------------------------------------------------------------------------
remap(
  c(0, 25, 50, 75, 100),
  from = c(0, 100),
  to = c(-1, 1)
)

## -----------------------------------------------------------------------------
midpoint(c(0, 10), c(10, 30))
midpoint(-.Machine$double.xmax, .Machine$double.xmax)

## -----------------------------------------------------------------------------
divide_or(
  x = c(12, 8, 5),
  y = c(3, 0, 2),
  default = NA_real_
)

## -----------------------------------------------------------------------------
l2_norm(c(3, 4))

## -----------------------------------------------------------------------------
l2_norm(c(1e308, 1e308))

## -----------------------------------------------------------------------------
unit_vector <- normalize_l2(c(3, 4))

unit_vector
l2_norm(unit_vector)

## -----------------------------------------------------------------------------
x <- matrix(
  c(3, 4, 0, 1, 2, 2),
  nrow = 2,
  byrow = TRUE,
  dimnames = list(c("a", "b"), c("x", "y", "z"))
)

l2_norm(x, margin = 1)
normalize_l2(x, margin = 1)

## -----------------------------------------------------------------------------
normalize_l2(x, margin = 2)

## -----------------------------------------------------------------------------
normalize_l2(c(0, 0), zero = "keep")
normalize_l2(c(0, 0), zero = "na")

## -----------------------------------------------------------------------------
values <- c(10, 13, 12, 18)

changes <- adjacent_difference(values)
changes
cumsum(changes)

## -----------------------------------------------------------------------------
lerp(a = 0, b = c(10, 20, 30), t = 0.5)

## -----------------------------------------------------------------------------
x <- matrix(
  1:4,
  nrow = 2,
  dimnames = list(c("first", "second"), c("a", "b"))
)

clamp(x, lower = 2, upper = 3)

## -----------------------------------------------------------------------------
sensors <- data.frame(
  temperature = c(18, 22, 30),
  humidity = c(45, 0, 75),
  wind_direction = c(-10, 360, 450)
)

sensors

## -----------------------------------------------------------------------------
temperature_score <- remap(
  sensors$temperature,
  from = c(0, 40),
  to = c(0, 1)
)

humidity_score <- clamp01(
  divide_or(sensors$humidity, 100, default = NA_real_)
)

wind_direction <- wrap(
  sensors$wind_direction,
  lower = 0,
  upper = 360
)

transformed <- data.frame(
  temperature_score,
  humidity_score,
  wind_direction
)

transformed

## -----------------------------------------------------------------------------
features <- as.matrix(
  transformed[c("temperature_score", "humidity_score")]
)

normalize_l2(features, margin = 1)

