Skip to content

Instantly share code, notes, and snippets.

View matt-dray's full-sized avatar
®️

Matt Dray matt-dray

®️
View GitHub Profile
/*! jQuery v3.2.1 | (c) JS Foundation and other contributors | jquery.org/license */
/*! Adapted from https://jeroen.github.io/clippy/bundle.js by Jeroen Ooms */
!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.2.1",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?t
@matt-dray
matt-dray / r-tables.txt
Last active April 16, 2024 17:57
Packages for making tables in R
arsenal::tableby()
DT
flextable
formattable
gt
huxtable
knitr::kable()
kableExtra
mmtable2
modelsummary
@matt-dray
matt-dray / general-cell-nmft.R
Last active April 16, 2024 08:17
Testing 'general' cell number format with {openxlsx2}
x <- palmerpenguins::penguins |>
tidyr::drop_na() |>
dplyr::mutate(
sp = species,
bill = bill_length_mm,
sex = as.character(sex),
.keep = "none"
) |>
head() |>
as.data.frame()
@matt-dray
matt-dray / expand-nested-list.Rmd
Created April 12, 2024 13:27
An experiment to expand a nested list into Rmd sections, including a recursive function to remove blank (`""`) elements
---
title: "Autogenerating Rmd sections from a nested list"
output:
html_document:
code_folding: hide
---
```{r}
remove_blanks_recursively <- function(x) {
@matt-dray
matt-dray / input-checks-rlang-cli.R
Created March 8, 2024 09:47
Example functions to check inputs to a parent function, using {cli} for better messaging and {rlang} for dot collection and to prevent an 'error handling eclipse'
#' Check Class of Argument Inputs
#' @param ... Objects to be checked for class.
#' @param .expected_class Character. The name of the class against which objects
#' @param .call Environment. The environment in which this function is called.
#' will be checked.
#' @noRd
check_class <- function(
...,
.expected_class = c("numeric", "character"),
.call = rlang::caller_env()
@matt-dray
matt-dray / sifter-abstract-assignment.R
Last active March 7, 2024 12:07
Assign abstracts to sifters as equally as possible so that each abstract is reviewed exactly n times
# As above, but checks for exact name and affiliation matches between
# sifters and abstracts.
#
# It's possible certain abstracts might not get assigned, especially given combos
# of sifters writing abstracts, abstracts from sifters' affiliations, assignment
# capping and sifter capping. Should probably report any abstracts that have
# <assignment_cap assignments. As a precaution, have built in a max_iterations arg
# in case of infinite looping, but I don't think that will come into play.
.resample <- function(x, ...) x[sample.int(length(x), ...)] # see ?sample
@matt-dray
matt-dray / check-vector-pairs-multiples.R
Last active December 18, 2023 21:42
Checking pairs of vector inputs to an R function to see if the longer of each pair is a multiple of the shorter, emit a dynamic warning if so
pair_inputs <- function(...) {
args <- rlang::dots_list(..., .named = TRUE)
args_lengths <- lapply(args, length)
pairs <- combn(args_lengths, 2, simplify = FALSE)
failed <- lapply(pairs, function(x) max(unlist(x)) %% min(unlist(x)) != 0)
if (any(unlist(failed))) {
@matt-dray
matt-dray / check-type.R
Last active December 15, 2023 10:03
A base-R-only function to check argument inputs to another function, using dots to assess several of those inputs at once
test_fn <- function(x = 1L, y = "x", z = 1.1) {
.check_type(x, y, z, type = "numeric")
cat("success")
}
.check_type <- function(..., type = "numeric") {
args <- list(...)
arg_names <- as.character(substitute(...()))
names(args) <- arg_names
@matt-dray
matt-dray / cr2rc.R
Last active December 9, 2023 22:30
Convert a spreadsheet cell reference (A1) to row-column (1, 1) format (overengineered draft)
cr2rc <- function(cell_ref) {
ref_split <-
strsplit(cell_ref, "(?<=[[:alpha:]])(?=[[:digit:]])", perl = TRUE)[[1]]
if (length(ref_split) != 2) {
stop(
"You must supply a cell reference of 1 to 3 letters (the column reference) ",
"followed by a number (the row reference), like 'A1' or 'ABC100'.",
call. = FALSE
@matt-dray
matt-dray / inline-link-ad.R
Created October 26, 2023 20:38
We could put links to sponsor websites in the output from R functions, lol