Before adopting a package, it helps to know the small base-R fallback for the same kind of task.

Program

Play the script to choose a task and see a built-in fallback function.

task_index
base_fallbacks.R
Replay: real traced execution (multi-file project)
task_index <- 2
tasks <- c("read_csv", "bar_chart", "join_table")
fallbacks <- c("read.csv", "barplot", "merge")
task <- tasks[task_index]
fallback <- fallbacks[task_index]
label <- paste(task, fallback, sep = ":")
cat(label, "\n", sep = "")
task_index <- 1
tasks <- c("read_csv", "bar_chart", "join_table")
fallbacks <- c("read.csv", "barplot", "merge")
task <- tasks[task_index]
fallback <- fallbacks[task_index]
label <- paste(task, fallback, sep = ":")
cat(label, "\n", sep = "")
task_index <- 3
tasks <- c("read_csv", "bar_chart", "join_table")
fallbacks <- c("read.csv", "barplot", "merge")
task <- tasks[task_index]
fallback <- fallbacks[task_index]
label <- paste(task, fallback, sep = ":")
cat(label, "\n", sep = "")
  1. task_index ← 2

    1task_index <- 22tasks <- c("read_csv", "bar_chart", "join_table")
    values this step2task_index
  2. tasks ← read_csv, bar_chart, join_table

    1task_index <- 22tasks <- c("read_csv", "bar_chart", "join_table")3fallbacks <- c("read.csv", "barplot", "merge")
    values this stepread_csv, bar_chart, join_tabletasks
  3. fallbacks ← read.csv, barplot, merge

    2tasks <- c("read_csv", "bar_chart", "join_table")3fallbacks <- c("read.csv", "barplot", "merge")4task <- tasks[task_index]
    values this stepread.csv, barplot, mergefallbacks
  4. task ← bar_chart

    3fallbacks <- c("read.csv", "barplot", "merge")4task <- tasks[task_index]5fallback <- fallbacks[task_index]
    values this stepbar_charttask2task_index
  5. fallback ← barplot

    4task <- tasks[task_index]5fallback <- fallbacks[task_index]6label <- paste(task, fallback, sep = ":")
    values this stepbarplotfallback2task_indexread.csv, barplot, mergefallbacks
  6. label ← bar_chart:barplot

    5fallback <- fallbacks[task_index]6label <- paste(task, fallback, sep = ":")7cat(label, "\n", sep = "")
    values this stepbar_chart:barplotlabelbar_charttaskbarplotfallback
  7. cat(label, " ", sep = "")

    6label <- paste(task, fallback, sep = ":")7cat(label, "\n", sep = "")
    outputbar_chart:barplot
    values this stepbar_chart:barplotlabel
  1. task_index ← 1

    1task_index <- 12tasks <- c("read_csv", "bar_chart", "join_table")
    values this step1task_index
  2. tasks ← read_csv, bar_chart, join_table

    1task_index <- 12tasks <- c("read_csv", "bar_chart", "join_table")3fallbacks <- c("read.csv", "barplot", "merge")
    values this stepread_csv, bar_chart, join_tabletasks
  3. fallbacks ← read.csv, barplot, merge

    2tasks <- c("read_csv", "bar_chart", "join_table")3fallbacks <- c("read.csv", "barplot", "merge")4task <- tasks[task_index]
    values this stepread.csv, barplot, mergefallbacks
  4. task ← read_csv

    3fallbacks <- c("read.csv", "barplot", "merge")4task <- tasks[task_index]5fallback <- fallbacks[task_index]
    values this stepread_csvtask1task_index
  5. fallback ← read.csv

    4task <- tasks[task_index]5fallback <- fallbacks[task_index]6label <- paste(task, fallback, sep = ":")
    values this stepread.csvfallback1task_indexread.csv, barplot, mergefallbacks
  6. label ← read_csv:read.csv

    5fallback <- fallbacks[task_index]6label <- paste(task, fallback, sep = ":")7cat(label, "\n", sep = "")
    values this stepread_csv:read.csvlabelread_csvtaskread.csvfallback
  7. cat(label, " ", sep = "")

    6label <- paste(task, fallback, sep = ":")7cat(label, "\n", sep = "")
    outputread_csv:read.csv
    values this stepread_csv:read.csvlabel
  1. task_index ← 3

    1task_index <- 32tasks <- c("read_csv", "bar_chart", "join_table")
    values this step3task_index
  2. tasks ← read_csv, bar_chart, join_table

    1task_index <- 32tasks <- c("read_csv", "bar_chart", "join_table")3fallbacks <- c("read.csv", "barplot", "merge")
    values this stepread_csv, bar_chart, join_tabletasks
  3. fallbacks ← read.csv, barplot, merge

    2tasks <- c("read_csv", "bar_chart", "join_table")3fallbacks <- c("read.csv", "barplot", "merge")4task <- tasks[task_index]
    values this stepread.csv, barplot, mergefallbacks
  4. task ← join_table

    3fallbacks <- c("read.csv", "barplot", "merge")4task <- tasks[task_index]5fallback <- fallbacks[task_index]
    values this stepjoin_tabletask3task_index
  5. fallback ← merge

    4task <- tasks[task_index]5fallback <- fallbacks[task_index]6label <- paste(task, fallback, sep = ":")
    values this stepmergefallback3task_indexread.csv, barplot, mergefallbacks
  6. label ← join_table:merge

    5fallback <- fallbacks[task_index]6label <- paste(task, fallback, sep = ":")7cat(label, "\n", sep = "")
    values this stepjoin_table:mergelabeljoin_tabletaskmergefallback
  7. cat(label, " ", sep = "")

    6label <- paste(task, fallback, sep = ":")7cat(label, "\n", sep = "")
    outputjoin_table:merge
    values this stepjoin_table:mergelabel
fallback A fallback names a built-in option available before adding a package.
task label The task label keeps the decision tied to a concrete need.
dependency decision Comparing task and fallback helps decide whether a package is worth adding.