--- title: "Why pipetime?" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{why_pipetime} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) # Suppress vignette title mismatch warning options(rmarkdown.html_vignette.check_title = FALSE) ``` ```{r setup, message=FALSE, warning=FALSE} library(pipetime) library(dplyr) ``` R pipelines (`|>`) allow chaining operations in a readable, sequential way. Existing timing tools (e.g. `system.time()`, `tictoc`) do not integrate naturally with pipelines and tidy workflows. `pipetime` solves this by letting you measure time inline, without interrupting the pipeline. # Examples ```{r} slow_op <- function(x) { Sys.sleep(0.1) # Simulate a time-consuming operation x^2 } ``` ## `system.time()` ```{r, error=TRUE} # Must wrap the entire pipeline, breaking the flow the_time <- system.time({ df <- data.frame(x = 1:3) |> mutate(y = slow_op(x)) |> summarise(mean_y = mean(y)) }) the_time df # system.time() cannot be inserted inline in a pipeline: data.frame(x = 1:3) |> mutate(y = slow_op(x)) |> # system.time() would break the pipeline here summarise(mean_y = mean(y)) ``` ## `tictoc` ```{r} library(tictoc) # Requires manual start/stop tic("total pipeline") df <- data.frame(x = 1:3) |> mutate(y = slow_op(x)) |> summarise(mean_y = mean(y)) toc() df ``` ## `time_pipe` ```{r} # Inline timing checkpoints, pipeline stays intact data.frame(x = 1:3) |> mutate(y = slow_op(x)) |> time_pipe("after mutate") |> summarise(mean_y = mean(y)) |> time_pipe("total pipeline") ``` # Why `pipetime`? - Works directly inside pipelines. - Supports multiple checkpoints. - Prints or logs timings in `.pipetime_env` (see `?get_log`).