Plan | R Documentation |
We work within the mental model where we have one (or more) datasets and we want to run multiple analyses on these datasets.
By demanding that all analyses use the same data sources we can:
Be efficient with requiring the minimal amount of data-pulling (this only happens once at the start).
Better enforce the concept that data-cleaning and analysis should be completely separate.
By demanding that all analysis functions only use two arguments (data and argset) we can:
Reduce mental fatigue by working within the same mental model for each analysis.
Make it easier for analyses to be exchanged with each other and iterated on.
Easily schedule the running of each analysis.
By including all of this in one Plan
class, we can easily maintain a good overview of all the analyses (i.e. outputs) that need to be run.
An argset is:
a set of arguments
An analysis is:
one argset
one (action) function
A plan is:
one data pull
a list of analyses
analyses
List of analyses.
new()
Create a new Plan instance.
Plan$new(verbose = interactive() | config$force_verbose, use_foreach = FALSE)
verbose
Should this plan be verbose?
use_foreach
???
add_data()
Add a new data set.
Plan$add_data(name, fn = NULL, fn_name = NULL, direct = NULL)
name
Name of the data set.
fn
A function that returns the data set.
fn_name
A character string containing the name of a function that returns the data set.
direct
A direct data set.
p <- plnr::Plan$new() data_fn <- function(){return(plnr::nor_covid19_cases_by_time_location)} p$add_data("data_1", fn = data_fn) p$add_data("data_2", fn_name = "plnr::example_data_fn_nor_covid19_cases_by_time_location") p$add_data("data_3", direct = plnr::nor_covid19_cases_by_time_location) p$get_data()
add_argset()
Add a new argset.
Plan$add_argset(name = uuid::UUIDgenerate(), ...)
name
Name of the (eventual) analysis that this argset will be connected to.
...
Named arguments that will comprise the argset.
p <- plnr::Plan$new() p$add_argset("argset_1", var_1 = 3, var_b = "hello") p$add_argset("argset_2", var_1 = 8, var_c = "hello2") p$get_argsets_as_dt()
add_argset_from_df()
Add a batch of argsets from a data.frame.
Plan$add_argset_from_df(df)
df
A data.frame where each row is a new argset, and each column will be a named element in the argset.
p <- plnr::Plan$new() batch_argset_df <- data.frame(name = c("a", "b", "c"), var_1 = c(1, 2, 3), var_2 = c("i", "j", "k")) p$add_argset_from_df(batch_argset_df) p$get_argsets_as_dt()
add_argset_from_list()
Add a batch of argsets from a list.
Plan$add_argset_from_list(l)
l
A list of lists with named elements where each outermost element is a new argset, and each internal named element named element in the argset.
p <- plnr::Plan$new() batch_argset_list <- list( list(name = "a", var_1 = 1, var_2 = "i"), list(name = "b", var_1 = 2, var_2 = "j"), list(name = "c", var_1 = 3, var_2 = "k") ) p$add_argset_from_list(batch_argset_list) p$get_argsets_as_dt()
add_analysis()
Add a new analysis.
Plan$add_analysis(name = uuid::UUIDgenerate(), fn = NULL, fn_name = NULL, ...)
name
Name of the analysis.
fn
Action function.
fn_name
Action function name.
...
Named arguments to be added to the argset.
p <- plnr::Plan$new() p$add_data("covid_data", fn_name = "plnr::example_data_fn_nor_covid19_cases_by_time_location") p$add_analysis( name = "analysis_1", fn_name = "plnr::example_action_fn" ) p$get_argsets_as_dt() p$run_one("analysis_1")
add_analysis_from_df()
Add a batch of analyses from a data.frame.
Plan$add_analysis_from_df(fn = NULL, fn_name = NULL, df)
fn
Action function.
fn_name
Action function name.
df
A data.frame where each row is a new argset, and each column will be a named element in the argset.
p <- plnr::Plan$new() p$add_data("covid_data", fn_name = "plnr::example_data_fn_nor_covid19_cases_by_time_location") batch_argset_df <- data.frame(name = c("a", "b", "c"), var_1 = c(1, 2, 3), var_2 = c("i", "j", "k")) p$add_analysis_from_df( fn_name = "plnr::example_action_fn", df = batch_argset_df ) p$get_argsets_as_dt() p$run_one(1)
add_analysis_from_list()
Add a batch of argsets from a list.
Plan$add_analysis_from_list(fn = NULL, fn_name = NULL, l)
fn
Action function.
fn_name
Action function name.
l
A list of lists with named elements where each outermost element is a new argset, and each internal named element named element in the argset.
p <- plnr::Plan$new() p$add_data("covid_data", fn_name = "plnr::example_data_fn_nor_covid19_cases_by_time_location") batch_argset_list <- list( list(name = "analysis_1", var_1 = 1, var_2 = "i"), list(name = "analysis_2", var_1 = 2, var_2 = "j"), list(name = "analysis_3", var_1 = 3, var_2 = "k") ) p$add_analysis_from_list( fn_name = "plnr::example_action_fn", l = batch_argset_list ) p$get_argsets_as_dt() p$run_one("analysis_1")
apply_action_fn_to_all_argsets()
Applies an action function to all the argsets
Plan$apply_action_fn_to_all_argsets(fn = NULL, fn_name = NULL)
fn
Action function.
fn_name
Action function name. p <- plnr::Plan$new() p$add_data("covid_data", fn_name = "plnr::example_data_fn_nor_covid19_cases_by_time_location") batch_argset_list <- list( list(name = "analysis_1", var_1 = 1, var_2 = "i"), list(name = "analysis_2", var_1 = 2, var_2 = "j"), list(name = "analysis_3", var_1 = 3, var_2 = "k") ) p$add_argset_from_list( fn_name = "plnr::example_action_fn", l = batch_argset_list ) p$get_argsets_as_dt() p$apply_action_fn_to_all_argsets(fn_name = "plnr::example_action_fn") p$run_one("analysis_1")
apply_analysis_fn_to_all()
Deprecated. Use apply_action_fn_to_all_argsets.
Plan$apply_analysis_fn_to_all(fn = NULL, fn_name = NULL)
fn
Action function.
fn_name
Action function name.
x_length()
Number of analyses in the plan.
Plan$x_length()
x_seq_along()
Generate a regular sequence from 1 to the length of the analyses in the plan.
Plan$x_seq_along()
set_progress()
Set an internal progress bar
Plan$set_progress(pb)
pb
Progress bar.
set_progressor()
Set an internal progressor progress bar
Plan$set_progressor(pb)
pb
progressor progress bar.
set_verbose()
Set verbose flag
Plan$set_verbose(x)
x
Boolean.
set_use_foreach()
Set use_foreach flag
Plan$set_use_foreach(x)
x
Boolean.
get_data()
Extracts the data provided via 'add_data' and returns it as a named list.
Plan$get_data()
Named list, where most elements have been added via add_data
.
One extra named element is called 'hash'. 'hash' contains the data hashes of particular datasets/variables, as calculated using the 'spookyhash' algorithm via digest::digest. 'hash' contains two named elements:
current (the hash of the entire named list)
current_elements (the hash of the named elements within the named list)
p <- plnr::Plan$new() p$add_data("covid_data", fn_name = "plnr::example_data_fn_nor_covid19_cases_by_time_location") p$get_data()
get_analysis()
Extracts an analysis from the plan.
Plan$get_analysis(index_analysis)
index_analysis
Either an integer (1:length(analyses)) or a character string representing the name of the analysis.
An analysis.
p <- plnr::Plan$new() p$add_data("covid_data", fn_name = "plnr::example_data_fn_nor_covid19_cases_by_time_location") batch_argset_list <- list( list(name = "analysis_1", var_1 = 1, var_2 = "i"), list(name = "analysis_2", var_1 = 2, var_2 = "j"), list(name = "analysis_3", var_1 = 3, var_2 = "k") ) p$add_analysis_from_list( fn_name = "plnr::example_action_fn", l = batch_argset_list ) p$get_analysis("analysis_1")
get_argset()
Extracts an argset from the plan.
Plan$get_argset(index_analysis)
index_analysis
Either an integer (1:length(analyses)) or a character string representing the name of the analysis.
An argset
p <- plnr::Plan$new() p$add_data("covid_data", fn_name = "plnr::example_data_fn_nor_covid19_cases_by_time_location") batch_argset_list <- list( list(name = "analysis_1", var_1 = 1, var_2 = "i"), list(name = "analysis_2", var_1 = 2, var_2 = "j"), list(name = "analysis_3", var_1 = 3, var_2 = "k") ) p$add_analysis_from_list( fn_name = "plnr::example_action_fn", l = batch_argset_list ) p$get_argset("analysis_1")
get_argsets_as_dt()
Gets all argsets and presents them as a data.table.
Plan$get_argsets_as_dt()
Data.table that contains all the argsets within a plan.
p <- plnr::Plan$new() p$add_data("covid_data", fn_name = "plnr::example_data_fn_nor_covid19_cases_by_time_location") batch_argset_list <- list( list(name = "analysis_1", var_1 = 1, var_2 = "i"), list(name = "analysis_2", var_1 = 2, var_2 = "j"), list(name = "analysis_3", var_1 = 3, var_2 = "k") ) p$add_analysis_from_list( fn_name = "plnr::example_action_fn", l = batch_argset_list ) p$get_argsets_as_dt()
run_one_with_data()
Run one analysis (data is provided by user).
Plan$run_one_with_data(index_analysis, data, ...)
index_analysis
Either an integer (1:length(analyses)) or a character string representing the name of the analysis.
data
Named list (generally obtained from p$get_data()).
...
Not used.
Returned value from the action function.
p <- plnr::Plan$new() p$add_data("covid_data", fn_name = "plnr::example_data_fn_nor_covid19_cases_by_time_location") batch_argset_list <- list( list(name = "analysis_1", var_1 = 1, var_2 = "i"), list(name = "analysis_2", var_1 = 2, var_2 = "j"), list(name = "analysis_3", var_1 = 3, var_2 = "k") ) p$add_analysis_from_list( fn_name = "plnr::example_action_fn", l = batch_argset_list ) data <- p$get_data() p$run_one_with_data("analysis_1", data)
run_one()
Run one analysis (data is obtained automatically from self$get_data()).
Plan$run_one(index_analysis, ...)
index_analysis
Either an integer (1:length(analyses)) or a character string representing the name of the analysis.
...
Not used.
Returned value from the action function.
p <- plnr::Plan$new() p$add_data("covid_data", fn_name = "plnr::example_data_fn_nor_covid19_cases_by_time_location") batch_argset_list <- list( list(name = "analysis_1", var_1 = 1, var_2 = "i"), list(name = "analysis_2", var_1 = 2, var_2 = "j"), list(name = "analysis_3", var_1 = 3, var_2 = "k") ) p$add_analysis_from_list( fn_name = "plnr::example_action_fn", l = batch_argset_list ) p$run_one("analysis_1")
run_all_with_data()
Run all analyses (data is provided by user).
Plan$run_all_with_data(data, ...)
data
Named list (generally obtained from p$get_data()).
...
Not used.
List where each element contains the returned value from the action function.
p <- plnr::Plan$new() p$add_data("covid_data", fn_name = "plnr::example_data_fn_nor_covid19_cases_by_time_location") batch_argset_list <- list( list(name = "analysis_1", var_1 = 1, var_2 = "i"), list(name = "analysis_2", var_1 = 2, var_2 = "j"), list(name = "analysis_3", var_1 = 3, var_2 = "k") ) p$add_analysis_from_list( fn_name = "plnr::example_action_fn", l = batch_argset_list ) data <- p$get_data() p$run_all_with_data(data)
run_all()
Run all analyses (data is obtained automatically from self$get_data()).
Plan$run_all(...)
...
Not used.
List where each element contains the returned value from the action function.
p <- plnr::Plan$new() p$add_data("covid_data", fn_name = "plnr::example_data_fn_nor_covid19_cases_by_time_location") batch_argset_list <- list( list(name = "analysis_1", var_1 = 1, var_2 = "i"), list(name = "analysis_2", var_1 = 2, var_2 = "j"), list(name = "analysis_3", var_1 = 3, var_2 = "k") ) p$add_analysis_from_list( fn_name = "plnr::example_action_fn", l = batch_argset_list ) p$run_all()
run_all_progress()
Run all analyses with a progress bar (data is obtained automatically from self$get_data()).
Plan$run_all_progress(...)
...
Not used.
List where each element contains the returned value from the action function.
p <- plnr::Plan$new() p$add_data("covid_data", fn_name = "plnr::example_data_fn_nor_covid19_cases_by_time_location") batch_argset_list <- list( list(name = "analysis_1", var_1 = 1, var_2 = "i"), list(name = "analysis_2", var_1 = 2, var_2 = "j"), list(name = "analysis_3", var_1 = 3, var_2 = "k") ) p$add_analysis_from_list( fn_name = "plnr::example_action_fn", l = batch_argset_list ) p$run_all_progress()
clone()
The objects of this class are cloneable with this method.
Plan$clone(deep = FALSE)
deep
Whether to make a deep clone.
## ------------------------------------------------ ## Method `Plan$add_data` ## ------------------------------------------------ p <- plnr::Plan$new() data_fn <- function(){return(plnr::nor_covid19_cases_by_time_location)} p$add_data("data_1", fn = data_fn) p$add_data("data_2", fn_name = "plnr::example_data_fn_nor_covid19_cases_by_time_location") p$add_data("data_3", direct = plnr::nor_covid19_cases_by_time_location) p$get_data() ## ------------------------------------------------ ## Method `Plan$add_argset` ## ------------------------------------------------ p <- plnr::Plan$new() p$add_argset("argset_1", var_1 = 3, var_b = "hello") p$add_argset("argset_2", var_1 = 8, var_c = "hello2") p$get_argsets_as_dt() ## ------------------------------------------------ ## Method `Plan$add_argset_from_df` ## ------------------------------------------------ p <- plnr::Plan$new() batch_argset_df <- data.frame(name = c("a", "b", "c"), var_1 = c(1, 2, 3), var_2 = c("i", "j", "k")) p$add_argset_from_df(batch_argset_df) p$get_argsets_as_dt() ## ------------------------------------------------ ## Method `Plan$add_argset_from_list` ## ------------------------------------------------ p <- plnr::Plan$new() batch_argset_list <- list( list(name = "a", var_1 = 1, var_2 = "i"), list(name = "b", var_1 = 2, var_2 = "j"), list(name = "c", var_1 = 3, var_2 = "k") ) p$add_argset_from_list(batch_argset_list) p$get_argsets_as_dt() ## ------------------------------------------------ ## Method `Plan$add_analysis` ## ------------------------------------------------ p <- plnr::Plan$new() p$add_data("covid_data", fn_name = "plnr::example_data_fn_nor_covid19_cases_by_time_location") p$add_analysis( name = "analysis_1", fn_name = "plnr::example_action_fn" ) p$get_argsets_as_dt() p$run_one("analysis_1") ## ------------------------------------------------ ## Method `Plan$add_analysis_from_df` ## ------------------------------------------------ p <- plnr::Plan$new() p$add_data("covid_data", fn_name = "plnr::example_data_fn_nor_covid19_cases_by_time_location") batch_argset_df <- data.frame(name = c("a", "b", "c"), var_1 = c(1, 2, 3), var_2 = c("i", "j", "k")) p$add_analysis_from_df( fn_name = "plnr::example_action_fn", df = batch_argset_df ) p$get_argsets_as_dt() p$run_one(1) ## ------------------------------------------------ ## Method `Plan$add_analysis_from_list` ## ------------------------------------------------ p <- plnr::Plan$new() p$add_data("covid_data", fn_name = "plnr::example_data_fn_nor_covid19_cases_by_time_location") batch_argset_list <- list( list(name = "analysis_1", var_1 = 1, var_2 = "i"), list(name = "analysis_2", var_1 = 2, var_2 = "j"), list(name = "analysis_3", var_1 = 3, var_2 = "k") ) p$add_analysis_from_list( fn_name = "plnr::example_action_fn", l = batch_argset_list ) p$get_argsets_as_dt() p$run_one("analysis_1") ## ------------------------------------------------ ## Method `Plan$get_data` ## ------------------------------------------------ p <- plnr::Plan$new() p$add_data("covid_data", fn_name = "plnr::example_data_fn_nor_covid19_cases_by_time_location") p$get_data() ## ------------------------------------------------ ## Method `Plan$get_analysis` ## ------------------------------------------------ p <- plnr::Plan$new() p$add_data("covid_data", fn_name = "plnr::example_data_fn_nor_covid19_cases_by_time_location") batch_argset_list <- list( list(name = "analysis_1", var_1 = 1, var_2 = "i"), list(name = "analysis_2", var_1 = 2, var_2 = "j"), list(name = "analysis_3", var_1 = 3, var_2 = "k") ) p$add_analysis_from_list( fn_name = "plnr::example_action_fn", l = batch_argset_list ) p$get_analysis("analysis_1") ## ------------------------------------------------ ## Method `Plan$get_argset` ## ------------------------------------------------ p <- plnr::Plan$new() p$add_data("covid_data", fn_name = "plnr::example_data_fn_nor_covid19_cases_by_time_location") batch_argset_list <- list( list(name = "analysis_1", var_1 = 1, var_2 = "i"), list(name = "analysis_2", var_1 = 2, var_2 = "j"), list(name = "analysis_3", var_1 = 3, var_2 = "k") ) p$add_analysis_from_list( fn_name = "plnr::example_action_fn", l = batch_argset_list ) p$get_argset("analysis_1") ## ------------------------------------------------ ## Method `Plan$get_argsets_as_dt` ## ------------------------------------------------ p <- plnr::Plan$new() p$add_data("covid_data", fn_name = "plnr::example_data_fn_nor_covid19_cases_by_time_location") batch_argset_list <- list( list(name = "analysis_1", var_1 = 1, var_2 = "i"), list(name = "analysis_2", var_1 = 2, var_2 = "j"), list(name = "analysis_3", var_1 = 3, var_2 = "k") ) p$add_analysis_from_list( fn_name = "plnr::example_action_fn", l = batch_argset_list ) p$get_argsets_as_dt() ## ------------------------------------------------ ## Method `Plan$run_one_with_data` ## ------------------------------------------------ p <- plnr::Plan$new() p$add_data("covid_data", fn_name = "plnr::example_data_fn_nor_covid19_cases_by_time_location") batch_argset_list <- list( list(name = "analysis_1", var_1 = 1, var_2 = "i"), list(name = "analysis_2", var_1 = 2, var_2 = "j"), list(name = "analysis_3", var_1 = 3, var_2 = "k") ) p$add_analysis_from_list( fn_name = "plnr::example_action_fn", l = batch_argset_list ) data <- p$get_data() p$run_one_with_data("analysis_1", data) ## ------------------------------------------------ ## Method `Plan$run_one` ## ------------------------------------------------ p <- plnr::Plan$new() p$add_data("covid_data", fn_name = "plnr::example_data_fn_nor_covid19_cases_by_time_location") batch_argset_list <- list( list(name = "analysis_1", var_1 = 1, var_2 = "i"), list(name = "analysis_2", var_1 = 2, var_2 = "j"), list(name = "analysis_3", var_1 = 3, var_2 = "k") ) p$add_analysis_from_list( fn_name = "plnr::example_action_fn", l = batch_argset_list ) p$run_one("analysis_1") ## ------------------------------------------------ ## Method `Plan$run_all_with_data` ## ------------------------------------------------ p <- plnr::Plan$new() p$add_data("covid_data", fn_name = "plnr::example_data_fn_nor_covid19_cases_by_time_location") batch_argset_list <- list( list(name = "analysis_1", var_1 = 1, var_2 = "i"), list(name = "analysis_2", var_1 = 2, var_2 = "j"), list(name = "analysis_3", var_1 = 3, var_2 = "k") ) p$add_analysis_from_list( fn_name = "plnr::example_action_fn", l = batch_argset_list ) data <- p$get_data() p$run_all_with_data(data) ## ------------------------------------------------ ## Method `Plan$run_all` ## ------------------------------------------------ p <- plnr::Plan$new() p$add_data("covid_data", fn_name = "plnr::example_data_fn_nor_covid19_cases_by_time_location") batch_argset_list <- list( list(name = "analysis_1", var_1 = 1, var_2 = "i"), list(name = "analysis_2", var_1 = 2, var_2 = "j"), list(name = "analysis_3", var_1 = 3, var_2 = "k") ) p$add_analysis_from_list( fn_name = "plnr::example_action_fn", l = batch_argset_list ) p$run_all() ## ------------------------------------------------ ## Method `Plan$run_all_progress` ## ------------------------------------------------ p <- plnr::Plan$new() p$add_data("covid_data", fn_name = "plnr::example_data_fn_nor_covid19_cases_by_time_location") batch_argset_list <- list( list(name = "analysis_1", var_1 = 1, var_2 = "i"), list(name = "analysis_2", var_1 = 2, var_2 = "j"), list(name = "analysis_3", var_1 = 3, var_2 = "k") ) p$add_analysis_from_list( fn_name = "plnr::example_action_fn", l = batch_argset_list ) p$run_all_progress()
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.