Nothing
## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
eval = FALSE
)
library(where)
library(dplyr)
library(data.table)
library(ggplot2)
## -----------------------------------------------------------------------------
# subgroups <- .(all = TRUE,
# long_sepal = Sepal.Length > 6,
# long_petal = Petal.Length > 5.5)
#
# (iris %>%
# filter(x) %>%
# summarise(across(Sepal.Length:Petal.Width,
# mean),
# .by = Species)) %for% subgroups
## ----subgroups----------------------------------------------------------------
# subgroups <- .(all = TRUE,
# long_sepal = Sepal.Length > 6,
# long_petal = Petal.Length > 5.5)
## ----repetition---------------------------------------------------------------
# # With base R
# iris
# iris[iris[["Sepal.Length"]] > 6, ] # or with(iris, iris[Sepal.Length > 6])
# iris[iris[["Petal.Length"]] > 5.5, ] # or with(iris, iris[Petal.Length > 5.5])
#
# # With dplyr
# iris
# filter(iris, Sepal.Length > 6)
# filter(iris, Petal.Length > 5.5)
#
# # With data.table
# iris
# as.data.table(iris)[Sepal.Length > 6]
# as.data.table(iris)[Petal.Length > 5.5]
## ----eval---------------------------------------------------------------------
# lapply(subgroups, function(group) with(iris, iris[eval(group), ]))
## -----------------------------------------------------------------------------
# run(with(iris, iris[subgroup, ]),
# subgroup = subgroups)
#
# # or
# with(iris, iris[x, ]) %for% subgroups
## ----filter_summarise---------------------------------------------------------
# library(dplyr)
#
# subgroups = .(all = TRUE,
# long_sepal = Sepal.Length > 6,
# long_petal = Petal.Length > 5.5)
# functions = .(mean, sum, prod)
#
# run(
# iris %>%
# filter(subgroup) %>%
# summarise(across(Sepal.Length:Petal.Width,
# summary),
# .by = Species),
# subgroup = subgroups,
# summary = functions
# )
## ----filter_summarise_dt------------------------------------------------------
# library(data.table)
# df <- as.data.table(iris)
#
# run(df[subgroup, lapply(.SD, functions), keyby = "Species",
# .SDcols = Sepal.Length:Petal.Width],
# subgroup = subgroups,
# functions = functions)
## ----ggplot-------------------------------------------------------------------
# library(ggplot2)
#
# plots <- run(
# ggplot(filter(iris, subgroup),
# aes(Sepal.Length, Sepal.Width)) +
# geom_point() +
# theme_minimal(),
# subgroup = subgroups
# )
#
# Map(function(plot, name) plot + ggtitle(name), plots, names(plots))
## ----ggplots------------------------------------------------------------------
# run(
# ggplot(iris,
# aes(Sepal.Length, Sepal.Width)) +
# plot +
# theme_minimal(),
# plot = .(geom_point(),
# geom_smooth())
# )
## ----fail_compound_geom, eval = FALSE-----------------------------------------
# # Fails
# run(
# ggplot(iris,
# aes(Sepal.Length, Sepal.Width)) +
# plot +
# theme_minimal(),
# plot = .(geom_point(),
# geom_smooth(),
# geom_quantile() + geom_rug())
# )
## ----fail_compound_geom2, eval = FALSE----------------------------------------
# # Fails
# ggplot(iris, aes(Sepal.Length, Sepal.Width)) +
# (geom_quantile() + geom_rug()) +
# theme_minimal()
## ----compound_geom------------------------------------------------------------
# run(
# ggplot(iris,
# aes(Sepal.Length, Sepal.Width)) +
# plot +
# theme_minimal(),
# plot = .(point = geom_point(),
# smooth = geom_smooth(),
# quantilerug = list(geom_quantile(),
# geom_rug()))
# )
#
# # or by separating out the combined geoms as a function (also using a list)
# geom_quantilerug <- function() list(geom_quantile(),
# geom_rug())
#
# run(
# ggplot(iris,
# aes(Sepal.Length, Sepal.Width)) +
# plot +
# theme_minimal(),
# plot = .(point = geom_point(),
# smooth = geom_smooth(),
# quantilerug = geom_quantilerug())
# )
## ----function_on_parts--------------------------------------------------------
# population_summaries <- function(df) run(with(df, df[subgroup, ]),
# subgroup = subgroups)
#
# as.data.table(iris)[, .(population_summaries(.SD)), keyby = "Species"]
## ----apply_over_pops----------------------------------------------------------
# on_subpopulations <- function(expr,
# populations = subgroups)
# eval(substitute(run(expr, subgroup = populations),
# list(expr = substitute(expr))))
#
# on_subpopulations(as.data.table(iris)[subgroup])
#
# on_subpopulations(
# iris %>%
# filter(subgroup) %>%
# summarise(across(Sepal.Length:Petal.Width,
# mean),
# .by = Species)
# )
#
# on_subpopulations(
# ggplot(filter(iris, subgroup),
# aes(Sepal.Length, Sepal.Width)) +
# geom_point() +
# theme_minimal()
# )
## ----extra_subpop-------------------------------------------------------------
# subgroups = .(all = TRUE,
# long_sepal = Sepal.Length > 6,
# long_petal = Petal.Length > 5.5,
# veriscolor = Species == "versicolor")
## -----------------------------------------------------------------------------
# analyses <- .(subset = as.data.table(iris)[subgroup],
# summarise = iris %>%
# filter(subgroup) %>%
# summarise(across(Sepal.Length:Petal.Width,
# mean),
# .by = Species),
# plot = ggplot(filter(iris, subgroup),
# aes(Sepal.Length, Sepal.Width)) +
# geom_point() +
# theme_minimal())
#
# lapply(analyses,
# function(expr) do.call("on_subpopulations", list(expr)))
## -----------------------------------------------------------------------------
# on_subpopulations(
# ggplot(filter(iris, subgroup),
# aes(Sepal.Length, Sepal.Width)) +
# geom_point() +
# theme_minimal()
# )
## -----------------------------------------------------------------------------
# on_subpopulations <- function(expr,
# populations = subgroups) {
# e <- parent.frame()
# eval(substitute(run(expr, subgroup = populations, e = e),
# list(expr = substitute(expr))))
# }
## ----infixed------------------------------------------------------------------
# as.data.table(iris)[subgroup, lapply(.SD, summary), keyby = "Species",
# .SDcols = Sepal.Length:Petal.Width] %where%
# list(subgroup = subgroups[1:3],
# summary = functions)
#
# # note `subgroup` replaced with 'x'
# as.data.table(iris)[x, lapply(.SD, mean), keyby = "Species",
# .SDcols = Sepal.Length:Petal.Width] %for%
# subgroups
## ----infixed_bracketed--------------------------------------------------------
# (iris %>%
# filter(x) %>%
# summarise(across(Sepal.Length:Petal.Width,
# mean),
# .by = Species)) %for% subgroups
## ----with---------------------------------------------------------------------
# (a + b) %with% {
# a = 1
# b = 2
# }
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.