Reproducibility & Workflow

Also: rig for R versions, Docker (rocker images: rocker/r-ver, rocker/tidyverse), Posit Package Manager snapshots, rix/Nix for fully reproducible environments.

45.1 Projects & paths

One RStudio Project (or Positron folder) per analysis; never setwd() in scripts.

here::here("data", "raw.csv") for project-relative paths.

Suggested layout:

Restart R often (Ctrl+Shift+F10) and don't save the workspace (.RData).

project/
├── project.Rproj
├── data/raw/          # read-only original data
├── data/processed/
├── R/                 # functions
├── analysis/          # scripts / .qmd files
├── output/figures/
├── renv.lock
└── README.md

45.2 renv — package version management

Also: rig for R versions, Docker (rocker images: rocker/r-ver, rocker/tidyverse), Posit Package Manager snapshots, rix/Nix for fully reproducible environments.

renv::init()       # create a project-local library + renv.lock
renv::install("dplyr")
renv::snapshot()   # record versions in renv.lock
renv::restore()    # recreate the environment elsewhere
renv::status(); renv::update()

45.3 targets — pipeline toolkit (make-like)

# _targets.R
library(targets)
tar_option_set(packages = c("readr", "dplyr", "ggplot2"))
source("R/functions.R")

list(
  tar_target(raw_file, "data/raw.csv", format = "file"),
  tar_target(raw, read_csv(raw_file)),
  tar_target(clean, clean_data(raw)),
  tar_target(model, fit_model(clean)),
  tar_target(plot, make_plot(clean)),
  tar_quarto(report, "report.qmd")
)
tar_make()          # run only outdated steps
tar_visnetwork()    # dependency graph
tar_read(model)

45.4 Version control

Use Git + GitHub/GitLab (RStudio Git pane, usethis::use_git(), gert). Commit code and small data, not outputs or secrets; add .Rhistory, .RData, .Renviron to .gitignore.

45.5 Configuration & secrets

.Renviron (environment variables), config package (config.yml per environment), keyring for credentials.

45.6 Scheduling & automation

cronR/taskscheduleR, GitHub Actions (r-lib/actions), Posit Connect scheduled reports, targets + crew on HPC/cloud.