• boom() prints the intermediate results of a call or a code chunk.

  • rig() creates a copy of a function which will display the intermediate results of all the calls of it body.

  • rig_in_namespace() rigs a namespaced function in place, so its always verbose even when called by other existing functions. It is especially handy for package development.

  • rigger() provides a convenient way to rig an anonymous function by using the rigger(...) + function(...) {...} syntax.

boom(expr, clock = NULL, print = NULL)

rig(fun, clock = NULL, print = NULL)

rigger(clock = NULL, print = NULL)

rig_in_namespace(..., clock = NULL, print = NULL)

Arguments

expr

call to explode

clock

whether to time intermediate steps. Defaults to getOption("boomer.clock") evaluated at run time (FALSE unless you change it). The execution time of a step doesn't include the execution time of its previously printed sub-steps.

print

A function, a formula or a list of functions or formulas, used to modify the way the output is printed. Defaults to getOption("boomer.print") evaluated at run time (base::print unless you change it)'.

fun

function ro rig()

...

Functions to rig in their namespace

If the print argument is a function, it will be used to print, or to transform the output before it's printed. Use invisible to display nothing, useful possibilities are str or dplyr::glimpse.

rlang's formula notation is supported, so for instance you can type: print = ~ dplyr::glimpse(., width = 50).

Sometimes you might want to print a specific type of object in a custom way, in this case you can provide a named list, if you provide an unnamed element it will be used as the default, and named elements will define how objects of the given S3 class are printed. For instance print = list(str, data.frame = tibble::as_tibble)

Value

boom() returns the output of the call. rig() returns the modified input function. rig_in_namespace() returns invisible(NULL) and is called for side effects. rigger() returns a list containing the arguments, with the class "rigger" to enable +.rigger and print.rigger

Examples

# explode a simple call boom(subset(head(mtcars, 2), qsec > 17))
#> <U+0001F4A3> subset(head(mtcars, 2), qsec > 17) #> · <U+0001F4A3> <U+0001F4A5> head(mtcars, 2) #> · mpg cyl disp hp drat wt qsec vs am gear carb #> · Mazda RX4 21 6 160 110 3.9 2.620 16.46 0 1 4 4 #> · Mazda RX4 Wag 21 6 160 110 3.9 2.875 17.02 0 1 4 4 #> · #> · <U+0001F4A3> <U+0001F4A5> qsec > 17 #> · [1] FALSE TRUE #> · #> <U+0001F4A5> subset(head(mtcars, 2), qsec > 17) #> mpg cyl disp hp drat wt qsec vs am gear carb #> Mazda RX4 Wag 21 6 160 110 3.9 2.875 17.02 0 1 4 4 #>
#> mpg cyl disp hp drat wt qsec vs am gear carb #> Mazda RX4 Wag 21 6 160 110 3.9 2.875 17.02 0 1 4 4
# clock calls and customize how to print output boom(subset(head(mtcars, 2), qsec > 17), clock = TRUE, print = str)
#> <U+0001F4A3> subset(head(mtcars, 2), qsec > 17) #> · <U+0001F4A3> <U+0001F4A5> head(mtcars, 2) #> time: 0.001 s #> · 'data.frame': 2 obs. of 11 variables: #> · $ mpg : num 21 21 #> · $ cyl : num 6 6 #> · $ disp: num 160 160 #> · $ hp : num 110 110 #> · $ drat: num 3.9 3.9 #> · $ wt : num 2.62 2.88 #> · $ qsec: num 16.5 17 #> · $ vs : num 0 0 #> · $ am : num 1 1 #> · $ gear: num 4 4 #> · $ carb: num 4 4 #> · #> · <U+0001F4A3> <U+0001F4A5> qsec > 17 #> time: 0 us #> · logi [1:2] FALSE TRUE #> · #> <U+0001F4A5> subset(head(mtcars, 2), qsec > 17) #> time: 0.001 s #> 'data.frame': 1 obs. of 11 variables: #> $ mpg : num 21 #> $ cyl : num 6 #> $ disp: num 160 #> $ hp : num 110 #> $ drat: num 3.9 #> $ wt : num 2.88 #> $ qsec: num 17 #> $ vs : num 0 #> $ am : num 1 #> $ gear: num 4 #> $ carb: num 4 #>
#> mpg cyl disp hp drat wt qsec vs am gear carb #> Mazda RX4 Wag 21 6 160 110 3.9 2.875 17.02 0 1 4 4
# print str only for data frames boom(subset(head(mtcars, 2), qsec > 17), print = list(data.frame = str))
#> <U+0001F4A3> subset(head(mtcars, 2), qsec > 17) #> · <U+0001F4A3> <U+0001F4A5> head(mtcars, 2) #> · 'data.frame': 2 obs. of 11 variables: #> · $ mpg : num 21 21 #> · $ cyl : num 6 6 #> · $ disp: num 160 160 #> · $ hp : num 110 110 #> · $ drat: num 3.9 3.9 #> · $ wt : num 2.62 2.88 #> · $ qsec: num 16.5 17 #> · $ vs : num 0 0 #> · $ am : num 1 1 #> · $ gear: num 4 4 #> · $ carb: num 4 4 #> · #> · <U+0001F4A3> <U+0001F4A5> qsec > 17 #> · [1] FALSE TRUE #> · #> <U+0001F4A5> subset(head(mtcars, 2), qsec > 17) #> 'data.frame': 1 obs. of 11 variables: #> $ mpg : num 21 #> $ cyl : num 6 #> $ disp: num 160 #> $ hp : num 110 #> $ drat: num 3.9 #> $ wt : num 2.88 #> $ qsec: num 17 #> $ vs : num 0 #> $ am : num 1 #> $ gear: num 4 #> $ carb: num 4 #>
#> mpg cyl disp hp drat wt qsec vs am gear carb #> Mazda RX4 Wag 21 6 160 110 3.9 2.875 17.02 0 1 4 4
# rig an existing function rig(ave)(warpbreaks$breaks, warpbreaks$wool)
#> `FUN()` is undefined outside of `ave()` and its output might not be shown.
#> Registered S3 method overwritten by 'pryr': #> method from #> print.bytes Rcpp
#> <U+0001F447> ave #> <U+0001F4A3> if (missing(...)) {... #> · ... : #> · <...> #> · <U+0001F4A3> <U+0001F4A5> missing(...) #> · [1] FALSE #> · #> · <U+0001F4A3> <U+0001F4A5> interaction(...) #> · [1] A A A A A A A A A A A A A A A A A A A A A A A A A A A B B B B B B B B B B B #> · [39] B B B B B B B B B B B B B B B B #> · Levels: A B #> · #> · <U+0001F4A3> lapply(split(x, g), FUN) #> · · x : #> · · [1] 26 30 54 25 70 52 51 26 67 18 21 29 17 12 18 35 30 36 36 21 24 18 10 43 28 #> · · [26] 15 26 27 14 29 19 29 31 41 20 44 42 26 19 16 39 28 21 39 29 20 21 24 17 13 #> · · [51] 15 15 16 28 #> · · FUN : #> · · function (x, ...) #> · · UseMethod("mean") #> · · <bytecode: 0x000000001554c1b0> #> · · <environment: namespace:base> #> · · <U+0001F4A3> <U+0001F4A5> split(x, g) #> · · $A #> · · [1] 26 30 54 25 70 52 51 26 67 18 21 29 17 12 18 35 30 36 36 21 24 18 10 43 28 #> · · [26] 15 26 #> · · #> · · $B #> · · [1] 27 14 29 19 29 31 41 20 44 42 26 19 16 39 28 21 39 29 20 21 24 17 13 15 15 #> · · [26] 16 28 #> · · #> · · #> · <U+0001F4A5> lapply(split(x, g), FUN) #> · $A #> · [1] 31.03704 #> · #> · $B #> · [1] 25.25926 #> · #> · #> <U+0001F4A5> if (missing(...)) { #> x[] <- FUN(x) #> } else { #> g <- interaction(...) #> split(x, g) <- lapply(split(x, g), FUN) #> } #> $A #> [1] 31.03704 #> #> $B #> [1] 25.25926 #> #> #> <U+0001F446> ave
#> [1] 31.03704 31.03704 31.03704 31.03704 31.03704 31.03704 31.03704 31.03704 #> [9] 31.03704 31.03704 31.03704 31.03704 31.03704 31.03704 31.03704 31.03704 #> [17] 31.03704 31.03704 31.03704 31.03704 31.03704 31.03704 31.03704 31.03704 #> [25] 31.03704 31.03704 31.03704 25.25926 25.25926 25.25926 25.25926 25.25926 #> [33] 25.25926 25.25926 25.25926 25.25926 25.25926 25.25926 25.25926 25.25926 #> [41] 25.25926 25.25926 25.25926 25.25926 25.25926 25.25926 25.25926 25.25926 #> [49] 25.25926 25.25926 25.25926 25.25926 25.25926 25.25926
# rig an anonymous function fun1 <- rigger() + function(x) x + 1 + 2 # same as rig(function(x) x + 1 + 2)) fun1(1)
#> <U+0001F447> e2 #> <U+0001F4A3> x + 1 + 2 #> · x : #> · [1] 1 #> · <U+0001F4A3> <U+0001F4A5> x + 1 #> · [1] 2 #> · #> <U+0001F4A5> x + 1 + 2 #> [1] 4 #> #> <U+0001F446> e2
#> [1] 4
fun2 <- rigger(TRUE, typeof) + function(x) x + 1 + 2 fun2(1)
#> <U+0001F447> e2 #> <U+0001F4A3> x + 1 + 2 #> · x : #> · [1] "double" #> · <U+0001F4A3> <U+0001F4A5> x + 1 #> time: 0 us #> · [1] "double" #> · #> <U+0001F4A5> x + 1 + 2 #> time: 0.035 s #> [1] "double" #> #> <U+0001F446> e2
#> [1] 4