Skip to content

Instantly share code, notes, and snippets.

@r2evans
r2evans / lazyExpandGrid.R
Last active June 6, 2020 00:22
lazy evaluation of a potentially very large expand.grid
#' Lazy expand.grid.
#'
#' Provide a lazy-eval for expand.grid, similar to python's
#' \code{xrange}, where the source may be too large to be fit into
#' memory but still accessible.
#'
#' This function returns a list of functions for accessing the lazy
#' \code{expand.grid}.
#'
#' The available methods within each object:
@r2evans
r2evans / sequentialFilename.R
Last active July 4, 2017 04:23
numbered filenames, "guaranteed" to produce a unique and sequential filename
#' Sequential file naming
#'
#' (https://stackoverflow.com/a/44868545/3358272)
#'
#' @param ptn string that includes a [base::sprintf()] format string for an
#' integer, either `%d` or `%03d`; for example, `"filename-%03d.pdf"`
#' @param full.names logical, passed to [base::files()]
#' @return character, representing a filename that did not exist the
#' moment the function was called; NB: there is a potential
#' race-condition here
;;; my-align.el
;; Copyright (c) 2017 Bill Evans (r2evans)
;;
;; Author: Bill Evans
;; Created: 2017 Aug 03
;; Keywords: code align programming
;;; Commentary:
;; Simple wrapper wround 'align-regexp' with sane defaults.
;; Based on code first seen here
#' Programmatically produce row-independent `tribble`s
#'
#' @param x data.frame
#' @param max_width integer, the widest normalized width; if data or a
#' header is longer than this, it will not be truncated, but it will
#' also not be aligned with the others; can be single number (for
#' all) or a vector (for each column)
#' @param collapse character, the separation text, defaults to `", "`
#' @param compact logical, "no undue spaces"; if `TRUE` then sets
#' `max_width=0`, `collapse=","`, and disallows prepending
#' NDC caching for cross-facet plot elements
#'
#' Useful when using [layout()] and drawing things *between* different
#' plots. Motivated by https://stackoverflow.com/q/49464991/3358272.
#'
#' @details
#'
#' When adding plot "things" (lines, points, arrows) between facets of
#' a `layout` combination, in addition to `x` and `y`, you simply
#' provide the plot number within the sequence. (Since this is the
@r2evans
r2evans / pipe-funcs.R
Last active July 30, 2018 19:00
pipe functions for mid-pipe messages or debugging (under-tested! not for production!)
#' Mid-pipe assertions
#'
#' Test assertions mid-pipe. Each assertion is executed individually
#' on each group (if present) of the piped data. Any failures indicate
#' the group that caused the fail, terminating on the first failure.
#'
#' If `.debug`, then the interpreter enters the `browser()`, allowing
#' you to look at the specific data, stored as `x` (just the grouped
#' data if `is.grouped_df(.x)`, all data otherwise). If the data is
#' changed, then the altered data will be sent forward in the pipeline
#' Wrap a frame across multiple columns
#'
#' https://stackoverflow.com/a/52669757/3358272
#' @param x `data.frame`
#' @param nr,nc `integer`; specify only one of these, the number of
#' rows or columns to be fixed
#' @param rownames if `NULL` (default), row names (if found) are
#' discarded; if `character`, then a column is added (on the left of
#' `x`) with this as its title
#' @param byrow `logical`; if `FALSE`, the first column will match the
#!/bin/bash
# changing a single repo with subdirs like this:
#
# origrepo
# +-- subdir1
# +-- subdir2
#
# into a different/new repo with rearranged dirs (and discarded files),
# editing the full history
@r2evans
r2evans / MapReduce.R
Last active June 15, 2019 20:39
Combination of R's Reduce function with Map's k-ary arguments
#' 'Reduce' with arbitrary number of arguments
#'
#' Applies a function to the corresponding elements of given vectors,
#' in a reductionist way. (This is *not* related to the [Apache Hadoop
#' MapReduce](https://hadoop.apache.org/) project ... while this may
#' suggest the name 'MapReduce' is a poor choice for this function, it
#' is a logical combination of R's [Map()] and [Reduce()] functions.)
#'
#' @details
#'
@r2evans
r2evans / tryCatchPatterns.R
Last active August 15, 2019 19:16
exception handling by pattern (or sub-class)
#' Pattern-matching tryCatch
#'
#' Catch only specific types of errors at the appropriate level.
#' Supports nested use, where errors not matched by inner calls will
#' be passed to outer calls that may (or may not) catch them
#' separately.
#'
#' @details
#'
#' Exception handling with a little finer control over *where* a