Skip to content

Instantly share code, notes, and snippets.

View leeper's full-sized avatar

Thomas J. Leeper leeper

View GitHub Profile
@leeper
leeper / aggregate_test.R
Last active August 29, 2015 14:20
Aggregating a data.frame
z <- function(data, FUN = mean, ...) aggregate(. ~ 1, data = data, FUN = FUN, ...)
y <- function(data, FUN = mean, ...) data.frame(t(apply(data, 2, FUN = FUN, ...)))
x <- function(data, FUN = mean, ...) data.frame(t(sapply(data, mean, ...)))
d1 <- data.frame(matrix(1e3, ncol=10))
d2 <- data.frame(matrix(1e6, ncol=10))
d3 <- data.frame(matrix(1e6, ncol=100))
# MEAN
@leeper
leeper / rpm.R
Last active August 29, 2015 14:21
rpm: An R6-based package manager
library("R6")
rpm <- R6Class("rpm",
public = list(
initialize = function() {
self$update_available()
self$update_installed()
},
use = function(pkgs, quietly = TRUE, ...) {
self$install(pkgs[!self$installed(pkgs)], quiet = quietly, ...)
@leeper
leeper / plot.R
Created May 27, 2015 19:31
One- and two-tailed tests.
layout(matrix(1:3, nrow = 1))
# alpha = 0.05, two-tailed
curve(dnorm, from = -3.5, to = +3.5, lwd = 2, xaxs = "i", yaxs = "i", xlab = "z-statistic", ylim = c(0, .41), bty = "l", main = 'p<0.05, two-tailed ("Significant, Star-Worthy")')
polygon(c(qnorm(0.025), seq(qnorm(0.025), qnorm(.001), length.out = 20), -5),
c(0,dnorm(seq(qnorm(0.025), qnorm(.001), length.out = 20)), 0), col = rgb(1,0,0,alpha = 0.5))
segments(qnorm(0.025), 0, qnorm(0.025), 0.4, lwd = 2)
polygon(c(5, qnorm(0.975), seq(qnorm(0.975), qnorm(.999), length.out = 20)),
c(0,0,dnorm(seq(qnorm(0.975), qnorm(.999), length.out = 20))), col = rgb(1,0,0,alpha = 0.5))
segments(qnorm(0.975), 0, qnorm(0.975), 0.4, lwd = 2)
text(qnorm(0.975), 0.3, paste0("z = ", sprintf("%0.2f", qnorm(0.975))), pos = 4, cex = 1.5)
@leeper
leeper / activebindings.R
Created June 17, 2015 20:32
Play around with active bindings
mab <- function(obj, expr, envir = .GlobalEnv) {
makeActiveBinding(obj,
function(e) {
if(missing(e)) {
eval(parse(text = force(expr)), envir = envir)
} else {
makeActiveBinding(force(obj), function(expr) eval(parse(text = force(e)), envir = force(envir)), force(envir))
}
},
env = envir)
@leeper
leeper / power.R
Last active August 29, 2015 14:23
Statistical Power
# effect sizes
d <- seq(.01, 2, length.out = 1000)
# required sample size at different power levels
n50 <- sapply(x, function(x) power.t.test(n = NULL, delta = x, power = 0.50)$n)
n80 <- sapply(x, function(x) power.t.test(n = NULL, delta = x, power = 0.80)$n) # conventional
n90 <- sapply(x, function(x) power.t.test(n = NULL, delta = x, power = 0.90)$n)
n95 <- sapply(x, function(x) power.t.test(n = NULL, delta = x, power = 0.95)$n)
n99 <- sapply(x, function(x) power.t.test(n = NULL, delta = x, power = 0.99)$n)
@leeper
leeper / rdevel.R
Created June 19, 2015 21:07
Install R-devel on Windows
# check for and remove previous R-devel install
g <- getwd()
setwd(R.home())
setwd("../")
if("R-devel") %in% dir()) {
setwd("R-devel")
shell.exec(dir()[grep("unin.+exe$", dir())])
## walk through uninstall dialog
setwd("../")
}
@leeper
leeper / KVF.R
Last active August 29, 2015 14:26
A key-value alternative to UNF
# The UNF algorithm provides a clearly defined specification for creating a data hash.
# The algorithm has many strengths, including the fact that it is file format-independent,
# controls for floating point and rounding errors, and is independent of the column-
# organization of a dataset (i.e., variable order is irrelevant).
#
# A weakness, however, is that UNF is row-order sensitive. This is useful in terms of
# data subsetting (i.e., a subset of a dataset produces a different UNF than the full
# dataset), but it produces a weakness when two identical datasets are arranged in
# different row orders. Here's a simple example:
@leeper
leeper / WindowsThings
Last active November 18, 2019 14:47
Things I like installed on my Windows laptop
thing,chocolatey_name
Adobe Reader,adobereader
ccleaner,ccleaner
chocolatey,
Chrome,google-chrome-x64
ConEmu,conemu
curl,curl
cutepdf,cutepdf
Dropbox,dropbox
gettext,
@leeper
leeper / magpie.R
Last active November 28, 2015 14:19
magpie: Make API endpoint wrappers with ease
endpoint <- function(verb, url, body = (verb %in% c("POST", "PUT")), encode = "json", query, headers, dots = TRUE, class) {
f <- function() {}
if (body) {
if (dots) {
if (missing(headers)) {
if (missing(query)) {
formals(f) <- alist(body = , ... = )
body(f)[[2]] <- as.call(list(verb, url, quote(...), body = quote(body), encode = encode))
} else {
formals(f) <- alist(body = , ... = )
@leeper
leeper / map.R
Last active December 4, 2015 10:51
Minneapolis license plate tracking data
library("ggmap")
# https://github.com/reureu/Minneapolis-ALPR-Data
# removed 163478: 8b79f42dd1f945d588df16f271cafb54,Latitude,Longitude,Timestamp,Device
d <- read.csv("data.csv", header = FALSE, colClasses = c("factor", "numeric", "numeric", "character", "factor"))
names(d) <- c("id", "lat", "lon", "datetime", "reader")
# create map
map <- get_googlemap("minneapolis", zoom = 12, color = "bw")