## ----knitr-setup, include = FALSE----------------------------------------------------------------- require(pipeflow) knitr::opts_chunk$set( comment = "#", prompt = FALSE, tidy = FALSE, cache = FALSE, collapse = TRUE ) old <- options(width = 100L) ## ------------------------------------------------------------------------------------------------- library(pipeflow) pip <- pip_new("linear-model-coeffs") |> pip_add("data", \(data = NULL) data) |> pip_add( "fit", \(data = ~data, xVar = "x", yVar = "y") { lm(paste(yVar, "~", xVar), data = data) } ) |> pip_add("coefs", \(fit = ~fit) coefficients(fit)) ## ------------------------------------------------------------------------------------------------- pip ## ----eval = FALSE--------------------------------------------------------------------------------- # library(visNetwork) # do.call(visNetwork, args = pip_graph(pip)) ## ----echo = FALSE--------------------------------------------------------------------------------- library(visNetwork) do.call( visNetwork, args = c(pip_graph(pip), list(height = 100, width = 500)) ) |> visHierarchicalLayout(direction = "LR", sortMethod = "directed") ## ------------------------------------------------------------------------------------------------- head(iris) ## ------------------------------------------------------------------------------------------------- pip |> pip_set_params(list( data = iris, xVar = "Sepal.Length", yVar = "Sepal.Width" )) pip_run(pip) ## ------------------------------------------------------------------------------------------------- pip[["coefs", "out"]] ## ------------------------------------------------------------------------------------------------- run_pipeline_helper <- function(data) { pip |> pip_set_params(list(data = data)) pip_run(pip) pip[["coefs", "out"]] } results <- lapply(split(iris, iris$Species), FUN = run_pipeline_helper) ## ------------------------------------------------------------------------------------------------- results ## ------------------------------------------------------------------------------------------------- pip <- pip_new("my-split-pip") |> pip_add("data", \(data = NULL) data) |> pip_add( "split_data", \(data = ~data, byVar = "by") { split(data, f = data[[byVar]]) }, exec = "split" # <-- set execution mode to "split" ) |> pip_add( "fit", \(data = ~split_data, xVar = "x", yVar = "y") { lm(paste(yVar, "~", xVar), data = data) } ) |> pip_add("coefs", \(fit = ~fit) coefficients(fit)) ## ------------------------------------------------------------------------------------------------- pip ## ----eval = FALSE--------------------------------------------------------------------------------- # do.call(visNetwork, args = pip_graph(pip)) ## ----echo = FALSE--------------------------------------------------------------------------------- do.call( visNetwork, args = c(pip_graph(pip), list(height = 100, width = 500)) ) |> visHierarchicalLayout(direction = "LR", sortMethod = "directed") ## ------------------------------------------------------------------------------------------------- pip |> pip_set_params(list( data = iris, xVar = "Sepal.Length", yVar = "Sepal.Width", byVar = "Species" )) pip_run(pip) ## ------------------------------------------------------------------------------------------------- pip ## ------------------------------------------------------------------------------------------------- pip[["coefs", "out"]] ## ------------------------------------------------------------------------------------------------- pip |> pip_add( "combine_coefs", \(coefs = ~coefs) as.data.frame(do.call(rbind, coefs)), exec = "reduce" # <-- set execution mode to "reduce" ) ## ------------------------------------------------------------------------------------------------- pip ## ----eval = FALSE--------------------------------------------------------------------------------- # do.call(visNetwork, args = pip_graph(pip)) ## ----echo = FALSE--------------------------------------------------------------------------------- do.call( visNetwork, args = c(pip_graph(pip), list(height = 100, width = 650)) ) |> visHierarchicalLayout(direction = "LR", sortMethod = "directed") ## ------------------------------------------------------------------------------------------------- pip_run(pip) pip[["combine_coefs", "out"]] ## ----include = FALSE---------------------------------------------------------- options(old)