Skip to contents

epitargets extends the {targets} pipeline framework with automatic date-tracking and age-based cues, and other convenience functions.

Installation

install.packages(
   "epitargets",
   repos = c("https://economic.r-universe.dev", getOption("repos"))
)

Usage

Track when targets were last built

tar_target_date() is a drop-in replacement for targets::tar_target(). It creates your target plus a companion _date target that records when it ran:

targets::tar_dir({
  targets::tar_script({
    library(epitargets)
    list(
      tar_target_date(wages, data.frame(year = 2020:2024, wage = c(15, 15, 16, 17, 18)))
    )
  })
  targets::tar_make()
  print(targets::tar_read(wages))
  print(targets::tar_read(wages_date))
})
#> + wages dispatched
#> ✔ wages completed [0ms, 191 B]
#> + wages_date dispatched
#> ✔ wages_date completed [0ms, 81 B]
#> ✔ ended pipeline [123ms, 2 completed, 0 skipped]
#>   year wage
#> 1 2020   15
#> 2 2021   15
#> 3 2022   16
#> 4 2023   17
#> 5 2024   18
#> [1] "2026-03-03"

Auto-refresh targets on a schedule

tar_age_date() adds an age-based cue so the target automatically re-runs after a time period. Useful for API calls or any data that goes stale:

targets::tar_dir({
  targets::tar_script({
    library(epitargets)
    list(
      tar_age_date(daily_data, Sys.time(), age = as.difftime(1, units = "days"))
    )
  })
  targets::tar_make()
  print(targets::tar_read(daily_data))
  print(targets::tar_read(daily_data_date))
})
#> + daily_data dispatched
#> ✔ daily_data completed [1ms, 96 B]
#> + daily_data_date dispatched
#> ✔ daily_data_date completed [0ms, 81 B]
#> ✔ ended pipeline [115ms, 2 completed, 0 skipped]
#> [1] "2026-03-03 21:14:59 EST"
#> [1] "2026-03-03"

Summarize freshness across targets

collect_target_date() gathers _date targets into a single tibble so you can see at a glance when each target last ran:

targets::tar_dir({
  targets::tar_script({
    library(epitargets)
    list(
      tar_target_date(wages, data.frame(wage = 18)),
      tar_age_date(prices, data.frame(price = 3.50)),
      targets::tar_target(freshness, collect_target_date(wages_date, prices_date))
    )
  })
  targets::tar_make()
  targets::tar_read(freshness)
})
#> + prices dispatched
#> ✔ prices completed [0ms, 118 B]
#> + wages dispatched
#> ✔ wages completed [0ms, 118 B]
#> + prices_date dispatched
#> ✔ prices_date completed [0ms, 81 B]
#> + wages_date dispatched
#> ✔ wages_date completed [0ms, 81 B]
#> + freshness dispatched
#> ✔ freshness completed [2ms, 179 B]
#> ✔ ended pipeline [175ms, 5 completed, 0 skipped]
#> # A tibble: 2 × 2
#>   name   time      
#>   <chr>  <date>    
#> 1 wages  2026-03-03
#> 2 prices 2026-03-03