R packages describe themselves with metadata fields. Keeping required fields explicit makes package checks easier to reason about.

Program

Play the script to change the patch version and see the package metadata summary update.

patch
description_fields.R
Replay: real traced execution (multi-file project)
fields <- c(Package = "demoTools", Version = "1.0.0", License = "MIT")
patch <- 0
fields["Version"] <- paste0("1.0.", patch)
required <- c("Package", "Version", "License")
complete <- all(required %in% names(fields))
label <- paste(fields[["Package"]], fields[["Version"]], complete, sep = ":")
cat(label, "\n", sep = "")
fields <- c(Package = "demoTools", Version = "1.0.0", License = "MIT")
patch <- 1
fields["Version"] <- paste0("1.0.", patch)
required <- c("Package", "Version", "License")
complete <- all(required %in% names(fields))
label <- paste(fields[["Package"]], fields[["Version"]], complete, sep = ":")
cat(label, "\n", sep = "")
fields <- c(Package = "demoTools", Version = "1.0.0", License = "MIT")
patch <- 2
fields["Version"] <- paste0("1.0.", patch)
required <- c("Package", "Version", "License")
complete <- all(required %in% names(fields))
label <- paste(fields[["Package"]], fields[["Version"]], complete, sep = ":")
cat(label, "\n", sep = "")
  1. fields ← Package=demoTools, Version=1.0.0, License=MIT

    1fields <- c(Package = "demoTools", Version = "1.0.0", License = "MIT")2patch <- 0
    values this stepPackage=demoTools, Version=1.0.0, License=MITfields
  2. patch ← 0

    1fields <- c(Package = "demoTools", Version = "1.0.0", License = "MIT")2patch <- 03fields["Version"] <- paste0("1.0.", patch)
    values this step0patch
  3. fields[Version] ← 1.0.0

    2patch <- 03fields["Version"] <- paste0("1.0.", patch)4required <- c("Package", "Version", "License")
    values this step1.0.0fields[Version]0patch
  4. required ← Package, Version, License

    3fields["Version"] <- paste0("1.0.", patch)4required <- c("Package", "Version", "License")5complete <- all(required %in% names(fields))
    values this stepPackage, Version, Licenserequired
  5. complete ← TRUE

    4required <- c("Package", "Version", "License")5complete <- all(required %in% names(fields))6label <- paste(fields[["Package"]], fields[["Version"]], complete, sep = ":")
    values this stepTRUEcomplete3 fieldsrequiredPackage, Version, Licensenames(fields)
  6. label ← demoTools:1.0.0:TRUE

    5complete <- all(required %in% names(fields))6label <- paste(fields[["Package"]], fields[["Version"]], complete, sep = ":")7cat(label, "\n", sep = "")
    values this stepdemoTools:1.0.0:TRUElabeldemoTools 1.0.0fieldsTRUEcomplete
  7. cat(label, " ", sep = "")

    6label <- paste(fields[["Package"]], fields[["Version"]], complete, sep = ":")7cat(label, "\n", sep = "")
    outputdemoTools:1.0.0:TRUE
    values this stepdemoTools:1.0.0:TRUElabel
  1. fields ← Package=demoTools, Version=1.0.0, License=MIT

    1fields <- c(Package = "demoTools", Version = "1.0.0", License = "MIT")2patch <- 1
    values this stepPackage=demoTools, Version=1.0.0, License=MITfields
  2. patch ← 1

    1fields <- c(Package = "demoTools", Version = "1.0.0", License = "MIT")2patch <- 13fields["Version"] <- paste0("1.0.", patch)
    values this step1patch
  3. fields[Version] ← 1.0.1

    2patch <- 13fields["Version"] <- paste0("1.0.", patch)4required <- c("Package", "Version", "License")
    values this step1.0.1fields[Version]1patch
  4. required ← Package, Version, License

    3fields["Version"] <- paste0("1.0.", patch)4required <- c("Package", "Version", "License")5complete <- all(required %in% names(fields))
    values this stepPackage, Version, Licenserequired
  5. complete ← TRUE

    4required <- c("Package", "Version", "License")5complete <- all(required %in% names(fields))6label <- paste(fields[["Package"]], fields[["Version"]], complete, sep = ":")
    values this stepTRUEcomplete3 fieldsrequiredPackage, Version, Licensenames(fields)
  6. label ← demoTools:1.0.1:TRUE

    5complete <- all(required %in% names(fields))6label <- paste(fields[["Package"]], fields[["Version"]], complete, sep = ":")7cat(label, "\n", sep = "")
    values this stepdemoTools:1.0.1:TRUElabeldemoTools 1.0.1fieldsTRUEcomplete
  7. cat(label, " ", sep = "")

    6label <- paste(fields[["Package"]], fields[["Version"]], complete, sep = ":")7cat(label, "\n", sep = "")
    outputdemoTools:1.0.1:TRUE
    values this stepdemoTools:1.0.1:TRUElabel
  1. fields ← Package=demoTools, Version=1.0.0, License=MIT

    1fields <- c(Package = "demoTools", Version = "1.0.0", License = "MIT")2patch <- 2
    values this stepPackage=demoTools, Version=1.0.0, License=MITfields
  2. patch ← 2

    1fields <- c(Package = "demoTools", Version = "1.0.0", License = "MIT")2patch <- 23fields["Version"] <- paste0("1.0.", patch)
    values this step2patch
  3. fields[Version] ← 1.0.2

    2patch <- 23fields["Version"] <- paste0("1.0.", patch)4required <- c("Package", "Version", "License")
    values this step1.0.2fields[Version]2patch
  4. required ← Package, Version, License

    3fields["Version"] <- paste0("1.0.", patch)4required <- c("Package", "Version", "License")5complete <- all(required %in% names(fields))
    values this stepPackage, Version, Licenserequired
  5. complete ← TRUE

    4required <- c("Package", "Version", "License")5complete <- all(required %in% names(fields))6label <- paste(fields[["Package"]], fields[["Version"]], complete, sep = ":")
    values this stepTRUEcomplete3 fieldsrequiredPackage, Version, Licensenames(fields)
  6. label ← demoTools:1.0.2:TRUE

    5complete <- all(required %in% names(fields))6label <- paste(fields[["Package"]], fields[["Version"]], complete, sep = ":")7cat(label, "\n", sep = "")
    values this stepdemoTools:1.0.2:TRUElabeldemoTools 1.0.2fieldsTRUEcomplete
  7. cat(label, " ", sep = "")

    6label <- paste(fields[["Package"]], fields[["Version"]], complete, sep = ":")7cat(label, "\n", sep = "")
    outputdemoTools:1.0.2:TRUE
    values this stepdemoTools:1.0.2:TRUElabel
DESCRIPTION `Package`, `Version`, and `License` are common package metadata fields.
names `names(fields)` exposes the metadata field names.
all `all(required %in% names(fields))` checks whether every required name is present.