Skip to contents

Convert functions to pipe-friendly functions

Usage

as_pipe(
  x,
  ...,
  call,
  arg_name,
  .name = arg_name,
  .env = parent.frame(),
  .quoted = FALSE
)

Arguments

x

R object as input

...

default arguments explicitly display in the returned function

call

a function call, or the function itself

arg_name

argument name to be varied. This argument will be the first argument in the new function so it's pipe-friendly.

.name

new argument name; default is the same as arg_name

.env

executing environment

.quoted

whether call has been quoted

Value

If x is missing, returns a function that takes one argument, otherwise run the function with given x

Examples


# modify a function call
vary_title <- as_pipe(call = plot(1:10, 1:10),
                      pch = 16,
                      arg_name = 'main',
                      .name = 'title')
vary_title
#> <Pipe-compatible function>
#> function (title, ..., pch = 16) 
#> {
#>     plot(1:10, 1:10, ..., pch = pch, main = "[input:title]")
#> }
#> <environment: 0x5591b5da62e0>

# vary_title is pipe-friendly with `pch` default 16
vary_title(title = 'My Title')


# `pch` is explicit
vary_title(title = 'My Title', pch = 1)


# other variables are implicit
vary_title(title = 'My Title', type = 'l')



# modify a function

f <- function(b = 1, x){ b + x }
f_pipable <- as_pipe(call = f, arg_name = 'x')
f_pipable
#> <Pipe-compatible function>
#> function (x, ...) 
#> {
#>     f(..., x = "[input:x]")
#> }
#> <environment: 0x5591b78b9630>

f_pipable(2)
#> [1] 3

# Advanced use

# Set option dipsaus.debug.as_pipe=TRUE to debug
options("dipsaus.debug.as_pipe" = TRUE)

# Both `.(z)` and `z` work

image2 <- as_pipe(call = image(
  x = seq(0, 1, length.out = nrow(z)),
  y = 1:ncol(z),
  z = matrix(1:16, 4),
  xlab = "Time", ylab = "Freq",
  main = "Debug"
), arg_name = 'z')

#> options("dipsaus.debug.as_pipe") is set to TRUE. This should be used only in debug mode. Do not use for production!

# main can be overwritten
image2(matrix(1:50, 5), main = "Production")



# reset debug option
options("dipsaus.debug.as_pipe" = FALSE)