Skip to content

Instantly share code, notes, and snippets.

View jonocarroll's full-sized avatar
👨‍💻
Learning all the languages

Jonathan Carroll jonocarroll

👨‍💻
Learning all the languages
View GitHub Profile
@jonocarroll
jonocarroll / donut.R
Last active September 17, 2024 09:16
ts=0.07;ps=0.02;A=B=0;
while(1){ j=i=0;z=rep(0,1760);
b=rep(' ',1760); while(j < 6.28){
j=j+ts;i=0;while(i<6.28){i=i+ps;c=
sin(i);l=cos(i); d=cos(j);f=sin(j);
e=sin(A);g=cos(A );h=d+2;D=1/(c*h*e+
f*g+5);m=cos(B) ;n=sin(B);t=c*h*g-
f*e;x=as.integer (40+30*D*(l*h*m-t*n));
y=as.integer(12+ 15*D*(l*h*n+t*m));
o=as.integer(x+( 80*y));N=as.integer(
enum <- function(...) {
vals <- if (is.null(...names())) {
setNames(seq_len(...length()), c(...))
} else {
c(...)
}
out <- new.env(parent = emptyenv())
list2env(as.list(vals), out)
lapply(names(vals), lockBinding, out)
lockEnvironment(out)
@jonocarroll
jonocarroll / fuzzygroup.R
Created March 13, 2024 05:24
Perform fuzzy grouping on medical terms
## Medical Term Fuzzy Grouping
## J. Carroll 2024
##
## Uses the {zoomerjoin} package: https://github.com/beniaminogreen/zoomerjoin
## read in a set of medical terms, lowercased
terms <- tolower(readLines("https://raw.githubusercontent.com/socd06/medical-nlp/master/data/vocab.txt"))
## example data with typos and inserted words
gi <- c("gastrointestinal disorders", "gastrointestinal tract disorders", "gastreinstestinal disorder")
@jonocarroll
jonocarroll / check_errors.sh
Last active November 20, 2023 07:22
Use crontab to monitor the failure of a script
#!/bin/bash
LOG_FILE="/Users/username/output.log"
NOTIFIED_FILE="/Users/username/notified.txt"
EMAIL="username@example.com"
# Read the contents of the notified file, if it exists
notified=$(cat "$NOTIFIED_FILE" 2>/dev/null)
# If the notified file doesn't exist, assume no previous notification
@jonocarroll
jonocarroll / rowmin.rs
Created November 17, 2023 00:34
rextendr Rust/R function to calculate the rowMins of a matrix (no NA processing)
library(rextendr)
rust_function("
fn rowmin(m: RMatrix::<i32>) -> Vec<i32> {
// convert to an ndarray
let matrix = <ArrayView2<i32>>::from_robj(&m).unwrap();
// store results
let mut min_values = Vec::with_capacity(matrix.len());
@jonocarroll
jonocarroll / copy_on_modify.R
Last active August 29, 2024 20:09
Understanding R's copy-on-modify semantics wrt the symbol table
## Modify a vector in the workspace; x is a user-accessible symbol
x <- 42
.Internal(inspect(x))
# @5631a3a19e20 14 REALSXP g0c1 [REF(5)] (len=1, tl=0) 42
x[1] <- 43 # modification causes a copy (address changes)
.Internal(inspect(x))
# @5631a36c1cb8 14 REALSXP g0c1 [REF(4)] (len=1, tl=0) 43
## Modify a vector inside a function; user cannot access y
f <- function() {
@jonocarroll
jonocarroll / Change.hs
Created July 31, 2023 10:26
WIP Haskell solution to Exercism problem 'change'
module Change (findFewestCoins) where
import Data.List (find)
import Data.List (minimumBy)
import Data.Function (on)
import Debug.Trace
smallestLengthList :: [[Integer]] -> [Integer]
smallestLengthList = minimumBy (compare `on` length)
@jonocarroll
jonocarroll / sharepoint_filetree.R
Last active November 13, 2023 23:04
Microsoft365 Sharepoint File Tree Capture and View
library(Microsoft365R)
library(jsTree) # for viewing results
sp_url <- "https://org.sharepoint.com/sites/SITENAME/"
# sharepoint site
site <- get_sharepoint_site(site_url = sp_url)
# default document library
drv <- site$get_drive()
@jonocarroll
jonocarroll / expand_collapse_datatable.R
Last active May 4, 2023 22:40
Expand/Collapse buttons plus rowcounts and totals for rowGroups in DT::datatable
library(shiny)
ui <- fluidPage(
titlePanel("Expand/Collapse DataTable"),
mainPanel(
fluidRow(
column(6, DT::dataTableOutput("tbl")),
column(6, DT::dataTableOutput("tbl2"))
)
)
@jonocarroll
jonocarroll / dbg.R
Created November 6, 2022 05:45
Debug function for R based on Rust's dbg! macro
dbg <- function(x) {
ex <- rlang::f_text(rlang::enquos(x)[[1]])
ret <- rlang::eval_bare(x)
message(glue::glue("DEBUG: {ex} = {ret}"))
ret
}
a <- 1
b <- 3
x <- dbg(a + b)