The search path records attached packages, but package workflows are clearer when important calls are written with explicit namespaces.

Program

Play the script to choose a package and build the qualified call that avoids search-path ambiguity.

package_index
search_path_plan.R
Replay: real traced execution (multi-file project)
search_path <- c("package:stats", "package:graphics", "package:utils")
package_index <- 2
chosen <- c("stats", "graphics", "utils")[package_index]
functions <- c(stats = "median", graphics = "plot", utils = "head")
qualified <- paste0(chosen, "::", functions[[chosen]])
already_attached <- paste0("package:", chosen) %in% search_path
label <- paste(qualified, already_attached, sep = "=")
cat(label, "\n", sep = "")
search_path <- c("package:stats", "package:graphics", "package:utils")
package_index <- 1
chosen <- c("stats", "graphics", "utils")[package_index]
functions <- c(stats = "median", graphics = "plot", utils = "head")
qualified <- paste0(chosen, "::", functions[[chosen]])
already_attached <- paste0("package:", chosen) %in% search_path
label <- paste(qualified, already_attached, sep = "=")
cat(label, "\n", sep = "")
search_path <- c("package:stats", "package:graphics", "package:utils")
package_index <- 3
chosen <- c("stats", "graphics", "utils")[package_index]
functions <- c(stats = "median", graphics = "plot", utils = "head")
qualified <- paste0(chosen, "::", functions[[chosen]])
already_attached <- paste0("package:", chosen) %in% search_path
label <- paste(qualified, already_attached, sep = "=")
cat(label, "\n", sep = "")
  1. search_path ← package:stats, package:graphics, package:utils

    1search_path <- c("package:stats", "package:graphics", "package:utils")2package_index <- 2
    values this steppackage:stats, package:graphics, package:utilssearch_path
  2. package_index ← 2

    1search_path <- c("package:stats", "package:graphics", "package:utils")2package_index <- 23chosen <- c("stats", "graphics", "utils")[package_index]
    values this step2package_index
  3. chosen ← graphics

    2package_index <- 23chosen <- c("stats", "graphics", "utils")[package_index]4functions <- c(stats = "median", graphics = "plot", utils = "head")
    values this stepgraphicschosen2package_index
  4. functions ← stats=median, graphics=plot, utils=head

    3chosen <- c("stats", "graphics", "utils")[package_index]4functions <- c(stats = "median", graphics = "plot", utils = "head")5qualified <- paste0(chosen, "::", functions[[chosen]])
    values this stepstats=median, graphics=plot, utils=headfunctions
  5. qualified ← graphics::plot

    4functions <- c(stats = "median", graphics = "plot", utils = "head")5qualified <- paste0(chosen, "::", functions[[chosen]])6already_attached <- paste0("package:", chosen) %in% search_path
    values this stepgraphics::plotqualifiedgraphicschosenplotfunctions[[chosen]]
  6. already_attached ← TRUE

    5qualified <- paste0(chosen, "::", functions[[chosen]])6already_attached <- paste0("package:", chosen) %in% search_path7label <- paste(qualified, already_attached, sep = "=")
    values this stepTRUEalready_attachedgraphicschosen3 entriessearch_path
  7. label ← graphics::plot=TRUE

    6already_attached <- paste0("package:", chosen) %in% search_path7label <- paste(qualified, already_attached, sep = "=")8cat(label, "\n", sep = "")
    values this stepgraphics::plot=TRUElabelgraphics::plotqualifiedTRUEalready_attached
  8. cat(label, " ", sep = "")

    7label <- paste(qualified, already_attached, sep = "=")8cat(label, "\n", sep = "")
    outputgraphics::plot=TRUE
    values this stepgraphics::plot=TRUElabel
  1. search_path ← package:stats, package:graphics, package:utils

    1search_path <- c("package:stats", "package:graphics", "package:utils")2package_index <- 1
    values this steppackage:stats, package:graphics, package:utilssearch_path
  2. package_index ← 1

    1search_path <- c("package:stats", "package:graphics", "package:utils")2package_index <- 13chosen <- c("stats", "graphics", "utils")[package_index]
    values this step1package_index
  3. chosen ← stats

    2package_index <- 13chosen <- c("stats", "graphics", "utils")[package_index]4functions <- c(stats = "median", graphics = "plot", utils = "head")
    values this stepstatschosen1package_index
  4. functions ← stats=median, graphics=plot, utils=head

    3chosen <- c("stats", "graphics", "utils")[package_index]4functions <- c(stats = "median", graphics = "plot", utils = "head")5qualified <- paste0(chosen, "::", functions[[chosen]])
    values this stepstats=median, graphics=plot, utils=headfunctions
  5. qualified ← stats::median

    4functions <- c(stats = "median", graphics = "plot", utils = "head")5qualified <- paste0(chosen, "::", functions[[chosen]])6already_attached <- paste0("package:", chosen) %in% search_path
    values this stepstats::medianqualifiedstatschosenmedianfunctions[[chosen]]
  6. already_attached ← TRUE

    5qualified <- paste0(chosen, "::", functions[[chosen]])6already_attached <- paste0("package:", chosen) %in% search_path7label <- paste(qualified, already_attached, sep = "=")
    values this stepTRUEalready_attachedstatschosen3 entriessearch_path
  7. label ← stats::median=TRUE

    6already_attached <- paste0("package:", chosen) %in% search_path7label <- paste(qualified, already_attached, sep = "=")8cat(label, "\n", sep = "")
    values this stepstats::median=TRUElabelstats::medianqualifiedTRUEalready_attached
  8. cat(label, " ", sep = "")

    7label <- paste(qualified, already_attached, sep = "=")8cat(label, "\n", sep = "")
    outputstats::median=TRUE
    values this stepstats::median=TRUElabel
  1. search_path ← package:stats, package:graphics, package:utils

    1search_path <- c("package:stats", "package:graphics", "package:utils")2package_index <- 3
    values this steppackage:stats, package:graphics, package:utilssearch_path
  2. package_index ← 3

    1search_path <- c("package:stats", "package:graphics", "package:utils")2package_index <- 33chosen <- c("stats", "graphics", "utils")[package_index]
    values this step3package_index
  3. chosen ← utils

    2package_index <- 33chosen <- c("stats", "graphics", "utils")[package_index]4functions <- c(stats = "median", graphics = "plot", utils = "head")
    values this steputilschosen3package_index
  4. functions ← stats=median, graphics=plot, utils=head

    3chosen <- c("stats", "graphics", "utils")[package_index]4functions <- c(stats = "median", graphics = "plot", utils = "head")5qualified <- paste0(chosen, "::", functions[[chosen]])
    values this stepstats=median, graphics=plot, utils=headfunctions
  5. qualified ← utils::head

    4functions <- c(stats = "median", graphics = "plot", utils = "head")5qualified <- paste0(chosen, "::", functions[[chosen]])6already_attached <- paste0("package:", chosen) %in% search_path
    values this steputils::headqualifiedutilschosenheadfunctions[[chosen]]
  6. already_attached ← TRUE

    5qualified <- paste0(chosen, "::", functions[[chosen]])6already_attached <- paste0("package:", chosen) %in% search_path7label <- paste(qualified, already_attached, sep = "=")
    values this stepTRUEalready_attachedutilschosen3 entriessearch_path
  7. label ← utils::head=TRUE

    6already_attached <- paste0("package:", chosen) %in% search_path7label <- paste(qualified, already_attached, sep = "=")8cat(label, "\n", sep = "")
    values this steputils::head=TRUElabelutils::headqualifiedTRUEalready_attached
  8. cat(label, " ", sep = "")

    7label <- paste(qualified, already_attached, sep = "=")8cat(label, "\n", sep = "")
    outpututils::head=TRUE
    values this steputils::head=TRUElabel
search path `search()` reports attached packages; this example models that list as data.
namespace `qualified` stores a package-qualified function name.
membership `%in%` checks whether the chosen package is attached.