Skip to content

Instantly share code, notes, and snippets.

View MichaelChirico's full-sized avatar

Michael Chirico MichaelChirico

View GitHub Profile
@MichaelChirico
MichaelChirico / recommended_partial_issues.R
Last active April 25, 2024 06:43
Check all Recommended packages for partial matching issues
@MichaelChirico
MichaelChirico / taxes2023.R
Last active April 13, 2024 19:28
Tax calculation functions for 2023
medicare_tax = function(medi_income, filing_status="joint") {
addl_floor = switch(filing_status, joint=250000, mfs=125000, single=200000)
.0145*medi_income + pmax(0, .009*(medi_income-addl_floor))
}
social_security_tax = function(income) .062 * pmin(income, 160200)
tax_with_deductible_brackets = function(income, deductible, bracket_rates, bracket_mins) {
sum(pmax(0, diff(bracket_rates) * (income - deductible - bracket_mins)))
}
@MichaelChirico
MichaelChirico / issues_activity.R
Last active April 7, 2024 04:24
Pull & visualize the history of daily open & total issues for a repo
library(gh)
library(data.table)
user = 'Rdatatable'
repo = 'data.table'
# GET URL for 100 issues at a time
issue_query_fmt = "/repos/%s/%s/issues?state=all&per_page=100&page=%d"
issues = list()
page = 1L
@MichaelChirico
MichaelChirico / select_left.py
Last active March 31, 2024 18:02
Select from 'left' file to resolve conflicts
def select_left(file):
with open(file) as f:
contents=f.read()
lines = contents.split('\n')
n_conflicts = sum([l.startswith('<<<<') for l in lines])
keep=True
outfile=[]
@MichaelChirico
MichaelChirico / cran_readchar_args.R
Created January 26, 2024 15:24
readChar() usage on CRAN
library(jsonlite)
library(data.table)
library(lintr)
read_page <- function(page) {
tmp <- tempfile()
on.exit(unlink(tmp))
system2("curl",
c("--location", "--request",
"GET", sprintf("'https://api.github.com/search/code?q=readChar+org:cran+language:R+-path:.Rd&per_page=100&page=%d'", page),
@MichaelChirico
MichaelChirico / open_issues.R
Last active December 20, 2023 15:37
List all open issues of a repository. Great for exploring random open issues.
library(gh)
library(data.table)
user = 'Rdatatable'
repo = 'data.table'
# GET URL for 100 open issues at a time
issue_query_fmt = "/repos/%s/%s/issues?state=open&per_page=100&page=%d"
issues = list()
page = 1L
@MichaelChirico
MichaelChirico / gha_results.R
Last active November 17, 2023 16:47
GHA results
library(jsonlite)
library(data.table)
headers <- shQuote(c(
"-H", "Accept: application/vnd.github+json",
"-H", sprintf("Authorization: Bearer %s", Sys.getenv("GITHUB_PAT")),
"-H", "X-GitHub-Api-Version: 2022-11-28"
))
url_fmt <- "https://api.github.com/repos/r-lib/lintr/actions/runs?per_page=%d&page=%d"
@MichaelChirico
MichaelChirico / gist:7706fe44cf29b5e12007bf4e1c1f73ce
Created November 14, 2023 00:49
grep() slower than which(grepl())??
library(microbenchmark)
N = 1e4
v = sample(letters, N, TRUE)
microbenchmark(times = 200L, grep("a", v), which(grepl("a", v)), grep("[a-m]", v), which(grepl("[a-m]", v)), grep("[a-z]", v), which(grepl("[a-z]", v)))
# Unit: microseconds
# expr min lq mean median uq max neval cld
# grep("a", v) 630.561 640.4110 670.5257 655.4915 680.6115 866.132 200 b
# which(grepl("a", v)) 598.802 609.5220 637.0542 621.0965 652.9120 839.231 200 a
# grep("[a-m]", v) 692.601 708.4215 735.6788 721.3065 744.6365 1207.722 200 d
@MichaelChirico
MichaelChirico / explicit_return_linter.R
Created November 10, 2023 18:18
explicit_return_linter XPath
allowed_functions <- c(
# Normal calls
"return", "stop", "warning", "message", "stopifnot", "q", "quit",
"invokeRestart", "tryInvokeRestart",
# Normal calls from non-default libraries
"LOG", "abort",
# tests in the RUnit framework are functions ending with a call to one
# of the below. would rather users just use a different framework
@MichaelChirico
MichaelChirico / test-explicit_return_linter.R
Created November 10, 2023 18:13
explicit_return_linter tests
test_that("explicit_return_linter works in simple function", {
lines <- c(
"foo <- function(bar) {",
" return(bar)",
"}"
)
expect_lint(lines, NULL, explicit_return_linter())
})
test_that("explicit_return_linter works for using stop() instead of returning", {