# Why pipetime?

    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

    slow_op <- function(x) {
      Sys.sleep(0.1)  # Simulate a time-consuming operation
      x^2
    }

## `system.time()`

    # 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
    #>    user  system elapsed
    #>   0.002   0.000   0.107
    df
    #>     mean_y
    #> 1 4.666667

    # 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))
    #>     mean_y
    #> 1 4.666667

## `tictoc`

    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()
    #> total pipeline: 0.109 sec elapsed
    df
    #>     mean_y
    #> 1 4.666667

## `time_pipe`

    # 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")
    #>     mean_y
    #> 1 4.666667

# Why `pipetime`?

- Works directly inside pipelines.

- Supports multiple checkpoints.

- Prints or logs timings in `.pipetime_env` (see `?get_log`).