packages <- c( # Core workflow "tidyverse", "knitr", "broom", "readr", "readxl", "tibble", "tidyr", "dplyr", # Regression helpers used early in the course "car", "lm.beta", "carData", "effectsize", "DescTools", "rstatix", "standardize", "interactions", "corrplot", "ellipse", "MASS", "boot", # Models used in the course "lme4", "lmerTest", "MuMIn", "rms", "emmeans", "lavaan", "metafor", "dmetar", # Diagnostics / reporting helpers "performance", "parameters", "ggplot2", "ggpubr", "scales", "viridis", "pander", "shiny", "tigerstats" ) if (is.null(getOption("repos")) || getOption("repos")[["CRAN"]] == "@CRAN@") { options(repos = c(CRAN = "https://cloud.r-project.org")) } installed <- rownames(installed.packages()) to_install <- setdiff(packages, installed) if (length(to_install) == 0) { message("All required packages are already installed.") } else { message("Installing packages: ", paste(to_install, collapse = ", ")) install.packages(to_install) message("Done.") }