An open API service indexing awesome lists of open source software.

https://github.com/UchidaMizuki/adverbial

Enhanced Partialised and Composed Functions
https://github.com/UchidaMizuki/adverbial

Last synced: 3 months ago
JSON representation

Enhanced Partialised and Composed Functions

Awesome Lists containing this project

README

          

---
output: github_document
---

```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.path = "man/figures/README-",
out.width = "100%"
)
```

# adverbial (former partialised)

[![CRAN status](https://www.r-pkg.org/badges/version/adverbial)](https://CRAN.R-project.org/package=adverbial)
[![R-CMD-check](https://github.com/UchidaMizuki/adverbial/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/UchidaMizuki/adverbial/actions/workflows/R-CMD-check.yaml)
[![Codecov test coverage](https://codecov.io/gh/UchidaMizuki/adverbial/graph/badge.svg)](https://app.codecov.io/gh/UchidaMizuki/adverbial)

adverbial provides `new_partialised()` and `new_composed()`, which extend
`partial()` and `compose()` functions of purrr to make it easier to extract and
replace arguments and functions, and has additional adverbial functions such as
`as_step()` for step-by-step data processing.

## Installation

You can install the development version of adverbial from [GitHub](https://github.com/) with:

``` r
# the released version from CRAN:
install.packages("adverbial")

# the development version from GitHub:
# install.packages("devtools")
devtools::install_github("UchidaMizuki/adverbial")
```

## Examples

```{r example-load}
library(adverbial)
```

### Enhanced partialised functions

`new_partialised()` is an enhanced version of `partial()` from purrr.
It allows you to extract and replace arguments of the function.

```{r example-partialised}
dist <- function(x, y) {
sqrt(x ^ 2 + y ^ 2)
}

pdist <- new_partialised(
dist,
list(x = 3)
)
pdist
pdist(y = 4)

# Get partialised arguments
pdist[]
pdist$x
pdist$y

pdist$x <- 6
pdist(y = 8)

pdist$y <- 8
pdist()
```

### Enhanced composed functions

`new_composed()` is an enhanced version of `compose()` from purrr.
It allows you to extract and replace functions in the composition.

```{r example-composed}
square <- function(x) x^2
cdist <- new_composed(
list(
square = square,
sum = sum,
sqrt = sqrt
),
dir = "forward"
)
cdist
cdist(1:10)

# Get composed functions
cdist[]
cdist$sum <- new_partialised(sum, list(na.rm = TRUE))

cdist(c(1:10, NA))
```

### Step-by-step data processing

[![Lifecycle: experimental](https://img.shields.io/badge/lifecycle-experimental-orange.svg)](https://lifecycle.r-lib.org/articles/stages.html#experimental)

`step_by_step()` defines a step-by-step data processing pipeline by passing a
character vector with step names and descriptions.

`as_step()` converts an existing function into a step function that can be used
in a pipeline.
Generated functions check if a step is correct for objects created with
`step-by-step()` and act as a normal function for other objects.
With `as_step(f)` (without passing a second argument) you can add another
function to step-by-step data processing.

`end_step()` is a function that can be used to end the step-by-step data
processing pipeline and return the result.

```{r example-step-by-step}
# Define a step-by-step data processing pipeline
dist_calculator <- step_by_step(c(
square_step = "Square the input",
sum_step = "Sum the squares",
sqrt_step = "Take the square root"
))

# Define the steps
square_step <- as_step(function(x) x^2, "square_step")
sum_step <- as_step(sum, "sum_step")
sqrt_step <- as_step(sqrt, "sqrt_step")

square_step
sum_step
sqrt_step

dist <- dist_calculator(c(1:10, NA))
dist

dist <- dist |>
square_step() |>
sum_step(na.rm = TRUE) |>
sqrt_step()
dist
end_step(dist)
```