Type: Package
Title: Vectorised Substitution and Evaluation
Version: 1.0.0
Description: Provides a clean syntax for vectorising the use of Non-Standard Evaluation (NSE), for example in 'ggplot2', 'dplyr', or 'data.table'.
License: MIT + file LICENSE
URL: https://github.com/KiwiMateo/where
BugReports: https://github.com/KiwiMateo/where/issues
Suggests: data.table, dplyr, ggplot2, knitr, rmarkdown, testthat (≥ 3.0.0)
VignetteBuilder: knitr
Config/testthat/edition: 3
Encoding: UTF-8
RoxygenNote: 7.3.2
NeedsCompilation: no
Packaged: 2024-11-18 06:45:14 UTC; OEM
Author: Matt Hendtlass [aut, cre]
Maintainer: Matt Hendtlass <m.hendtlass@gmail.com>
Repository: CRAN
Date/Publication: 2024-11-19 09:40:02 UTC

Posterior variable declaration

Description

Posterior variable declaration

Usage

expr %with% variables

Arguments

expr

expression to evaluate

variables

expression with variable assignments

Value

The value of the evaluated expression.

Examples

  (a + b) %with% {
    a = 1
    b = 2
  }

Capture expressions

Description

Capture expressions

Usage

.(...)

Arguments

...

code

Value

a list

Examples

   .(a = 1, b = x^2, c = filter(iris, Species == "veriscolor"))

Run interpolated code

Description

Vectorised substitution of expressions into a large code block and execution.

Usage

run(expr, ..., e = parent.frame())

expr %for% x

expr %where% pars

Arguments

expr

the code to run

...

named values to be substituted by name into 'expr'

e

environment, for evaluation; defaults to 'parent.frame()'

x

list of expressions to be substituted for 'x' in 'expr'

pars

a named list of values to be substituted by name into 'expr'

Details

' '

Value

A list.

Examples

   library(dplyr)

   subgroups = .(all        = TRUE,
                 long_sepal = Sepal.Length > 6,
                 long_petal = Petal.Length > 5.5)
   functions = .(mean, sum, prod)

   run(
     iris %>%
       filter(subgroup) %>%
       summarise(across(Sepal.Length:Petal.Width,
                        summary),
                 .by = Species),
     subgroup = subgroups,
     summary  = functions
    )

   library(data.table)
   df <- as.data.table(iris)

   run(df[subgroup, lapply(.SD, functions), keyby = "Species",
         .SDcols = Sepal.Length:Petal.Width],

      subgroup  = subgroups,
      functions = functions)

   library(ggplot2)

   plots <- run(
     ggplot(filter(iris, subgroup),
            aes(Sepal.Length, Sepal.Width)) +
       geom_point() +
       theme_minimal(),
   subgroup = subgroups
   )
   Map(function(plot, name) plot + ggtitle(name), plots, names(plots))

   (
    iris %>%
      filter(subgroup) %>%
      summarise(across(Sepal.Length:Petal.Width,
                       summary),
                .by = Species)
   ) %where%
    list(subgroup = subgroups,
         summary  = functions)

  library(ggplot2)
  (
    ggplot(filter(iris, x),
           aes(Sepal.Length, Sepal.Width)) +
      geom_point() +
      theme_minimal()
  ) %for% subgroups