Skip to content

Instantly share code, notes, and snippets.

@kevinushey
kevinushey / R_IsNA.cpp
Last active March 3, 2019 01:29
Comparing methods of checking whether a value is NA
// run me by installing Rcpp and calling sourceCpp on this file
#include <Rcpp.h>
using namespace Rcpp;
// some initial stuff borrowed from R sources
#ifdef WORDS_BIGENDIAN
static const int hw = 0;
static const int lw = 1;
@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 5, 2025 15:46
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 / enumerate.R
Last active June 14, 2024 10:13
A python-style enumerate function for R.
enumerate <- function(X, FUN, ...) {
result <- vector("list", length(X))
for (i in seq_along(result)) {
tmp <- FUN(X[[i]], i, ...)
if (is.null(tmp))
result[i] <- list(NULL)
else
result[[i]] <- tmp
}
result
@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")
})