Skip to content

Instantly share code, notes, and snippets.

View jmbarbone's full-sized avatar

Jordan Mark Barbone jmbarbone

View GitHub Profile
@jmbarbone
jmbarbone / progressr-examples.R
Created June 24, 2024 16:06
examples of using the {progressr} package
library(progressr)
library(furrr)
handlers("void")
handlers(list(
handler_progress(
format = ":spin :current/:total (:message) [:bar] :percent in :elapsed ETA: :eta",
width = getOption("width"),
complete = "="
@jmbarbone
jmbarbone / sym-to-data.R
Last active June 20, 2024 16:27
Replaces `!!rlang::sym("...")` with `.data$...`
invisible(lapply(
list.files(
path = ".",
pattern = "\\.(r|rmd|qmd)$",
full.names = TRUE,
recursive = TRUE,
ignore.case = TRUE
),
function(path) {
pat <- "!!rlang::sym[(]\"([a-zA-z0-9_]+)\"[)]"
@jmbarbone
jmbarbone / lambda-functions-2.R
Last active June 3, 2024 03:23
base 'map()`-like functions
lambda <- function(expr, args = ".i") {
fun <- function() { }
formals(fun) <- structure(
rep(list(substitute()), length(args)),
class = "alist",
names = args
)
if (is.function(expr)) {
@jmbarbone
jmbarbone / databricks-env.R
Last active July 4, 2024 14:38
{databricks} but it's an R6 object
databricks <- local(envir = new.env(), {
.self <- environment()
.client <- NULL
.call <- function(method, args) {
if (is.null(.client)) {
stop(
"No client conigured",
"\nplease use $configure() function to set client",
call. = FALSE
@jmbarbone
jmbarbone / example.R
Created April 26, 2024 16:30
vline for plotly
x <- runif(1000)
plotly::plot_ly(
x = x,
type = "histogram",
) |>
plotly::layout(
bargap = 0.05,
shapes = list(
vline(mean(x), "mint", "mean"),
@jmbarbone
jmbarbone / enclose.R
Created March 6, 2024 03:16
evaluate an R6 object within its enclosed environment
#' Evaluate an R6 object within its enclosed environment
#'
#' @param x An R6 object
#' @param expr An expression to run
#' @export
#' @examples
#' Foo <- R6::R6Class(
#' "Foo",
#' public = list(
#' hello = function() cat("hello\n")
@jmbarbone
jmbarbone / sql-snakecase.R
Created February 14, 2024 05:58
R SQL snakecase implementation
# nolint start: object_usage_linter.
sql_snakecase0 <- function(.data, new, old = new, na = "(missing)") {
force(old)
na <- as.character(na)
dplyr::mutate(
.data,
!!rlang::sym(new) := tolower(!!rlang::sym(old)),
!!rlang::sym(new) := REGEXP_REPLACE(!!rlang::sym(new), "\\%", "percent "),
!!rlang::sym(new) := REGEXP_REPLACE(!!rlang::sym(new), "\\#", "n "),
@jmbarbone
jmbarbone / vendor.R
Created December 21, 2023 06:40
copy all objects to environment
vendor <- function() {
ns <- asNamespace("fuj")
writeLines(
unlist(sapply(
ls(ns),
function(x) {
format(call("assign", x, get(x, ns)))
}
)),
"R/fuj.R"
@jmbarbone
jmbarbone / largest-ns-object.R
Created December 1, 2023 17:48
Find the largest object in a namespace
largest_ns_object <- function(ns, mode = "any") {
ns <- asNamespace(ns)
sizes <- vapply(
ls(ns, all.names = TRUE),
\(x) utils::object.size(get0(x, ns, mode = mode)),
NA_real_
)
sizes[which.max(sizes)]
}
@jmbarbone
jmbarbone / include.R
Last active November 17, 2023 16:29
`include()` R function for attaching objects
#' Include exports
#'
#' Include (attach) a package and specific exports
#'
#' @description [include()] checks whether or not the namespace has been loaded
#' to the [search()] path. It uses the naming convention `include:{package}`
#' to denote the differences from loading via [library()] or [require()]. When
#' `exports` is `NULL`, the environment is detached from the search path if
#' found. When `exports` is not `NULL`,
#'