Skip to content

Instantly share code, notes, and snippets.

@kevinushey
kevinushey / git_status.R
Created January 29, 2014 18:49
A clever use of R's print mechanism for getting the git status for the current directory
git_status <- ''
class(git_status) <- "__git_status__"
print.__git_status__ <- function(x, ...) system("git status")
git_status ## prints 'git status' for the current dir
@kevinushey
kevinushey / just_for_fun.R
Created January 31, 2014 03:18
Re: Python and R: Is Python really faster than R?
case2 <- function(n = 10, mu = 3, sigma = sqrt(5), p = 0.025, rep = 100){
xbar <- vapply(1:rep, FUN.VALUE=numeric(1), function(i) {
norm <- rnorm(mean = mu, sd = sigma, n = n)
return(mean(norm))
})
low <- xbar - qnorm(1-p) * (sigma / sqrt(n))
up <- xbar + qnorm(1-p) * (sigma / sqrt(n))
rem <- mu > low & mu < up
@kevinushey
kevinushey / magrittr.R
Last active August 29, 2015 13:56
Overloading `|` to act like a pipe operator for data.frames
`|` <- function(x, y) {
if (is.data.frame(x)) {
return( eval(call("%.%", substitute(x), substitute(y)), envir=parent.frame()) )
} else {
return( base::"|"(x, y) )
}
}
library(dplyr)
mtcars |
// [[Rcpp::depends(RcppGSL)]]
#include <gsl/gsl_randist.h>
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
NumericVector gsl_dexp(NumericVector x) {
int n = x.size();
@kevinushey
kevinushey / position_jitterdodge.R
Last active August 29, 2015 13:57
Combine position_jitter and position_dodge so points can align with boxplots in ggplot2
#' Jitter-dodge points to align them with a boxplot including fill aesthetic
#'
#' @family position adjustments
#' @param width degree of jitter in x direction. Defaults to 40\% of the
#' resolution of the data.
#' @param height degree of jitter in y direction. Defaults to 40\% of the
#' resolution of the data
#' @export
#' @examples
#' dsub <- diamonds[ sample(1:nrow(diamonds), 1000), ]
@kevinushey
kevinushey / names_copy.R
Last active August 29, 2015 13:57
When does `names<-` copy?
df <- data.frame(x=1)
x <- capture.output(.Internal(inspect(df)))
names(df) <- "a"
y <- capture.output(.Internal(inspect(df)))
internal_diff <- function(x, y) {
xp <- file.path( tempdir(), "Rdiff1.txt" )
yp <- file.path( tempdir(), "Rdiff2.txt" )
cat(x, file=xp, sep="\n")
cat(y, file=yp, sep="\n")
@kevinushey
kevinushey / longest_arg_name.R
Created May 15, 2014 04:08
Which function has the longest argument name?
for (package in installed.packages()[, 1])
library(package, character.only = TRUE)
ns <- search()
output <- vector("list", length(ns))
for (i in seq_along(output)) {
namespace <- ns[[i]]
env <- as.environment(namespace)
objs <- mget(
objects(envir = env),
@kevinushey
kevinushey / API.R
Last active August 29, 2015 14:02
Tracking the API of a CRAN package over time
if (!require(httr)) {
devtools::install_github("httr")
library(httr)
}
get_archived_packages <- function(package, repo, where) {
archive <- file.path(repo, "Archive", package)
response <- httr::GET(archive)
if (response$status_code == "404")
stop("Could not access page at '", archive, "'.")
@kevinushey
kevinushey / r_mac_osx_binary_compat.R
Created August 15, 2014 22:45
Find packages that may have binary incompatibilities on Mac OS X
otool <- Sys.which("otool")
if (otool == "") {
stop("This utility requires 'otool' to run")
}
allPackages <- list.files(.libPaths(), full.names = TRUE)
stdLibsUsed <- lapply(allPackages, function(path) {
pkgName <- basename(path)
libPath <- file.path(path, "libs", paste0(pkgName, ".so"))
if (!file.exists(libPath)) {
@kevinushey
kevinushey / clobber-plot.R
Created September 4, 2014 00:33
Clobbering plot with your own S4 generic
setGeneric("plot", function(x, ...) {
standardGeneric("plot")
})
setMethod("plot", list(x = "ANY"), function(x, ...) {
UseMethod("plot")
})