2022
Toy WASM interpreter in base R
2022-07-29
AnotherWorld game written + playable in R (with {nara} and {eventloop})
2022-07-29
Pacman game written in R with {nara} and {eventloop}
2022-07-26
Introducing {nara} for nativeRaster handling for fast in-memory rendering buffers
2022-07-25
World's simplest R music system. Part 3 - Non-sinusoidal Waveforms
2022-07-12
World's simplest R music system. Part 2 - linear ADSR note shaping
2022-07-11
World's simplest R music system
2022-07-10
{isocubes} v0.1.2 update with Signed Distance Fields
2022-07-01
Introducing isocubes - an isometric rendering backend
2022-06-21
Nesting Functions
2022-06-15
Introducing `{tickle}` quickly build UIs in base R
2022-06-03
Introducing `{tr808r}` a TR-808 Drum Machine in R
2022-05-14
A naive implementation of Visvalingam's line simplification in R
2022-05-07
Introducing {eventloop} - Realtime interactive rendering in R
2022-05-06
Introducing {cstructr} - a demonstration package showing how C structs may be exposed to R
2022-04-26
Find sets of five words in the wordle dictionary that contain 25 unique letters
2022-01-17
{wordle} v0.1.5 - a package for playing (and helping solve) Wordle puzzles
2022-01-04
2021
Introducing {wordle} - a package for helping solve Wordle puzzles
2021-12-31
Solving a Wordle with assistance from R
2021-12-28
Introducing {ggsvg} - use SVG as ggplot points
2021-12-23
Lex, Parse and Evaluate a Simple S-Expression with {flexo}
2021-12-09
Base64 encoding/decoding in plain R
2021-12-04
Introducing {svgparser} - an SVG renderer in plain R
2021-12-02
A simple 2048 game engine in R
2021-11-14
Custom {ggplot2} point shapes with {gggrid}
2021-11-04
Introducing {cssparser} - parse CSS into R lists and apply CSS to html within R
2021-09-29
Introducing {gozer} add destruction artefacts to R objects
2021-09-28
New {flexo} vignette - parsing subtitles in srt format
2021-09-16
Introducing {priorityqueue} - two simple priority queues. One written in R, the other in C
2021-09-14
Introducing {typhoid} uint16, fixedpt & numberwang implemented in vctrs
2021-09-09
{smallfactor} update - store factors in bytes and bits rather than integers
2021-09-06
Introducing {numberwang} - numbers to words and vice versa)
2021-08-30
Introducing {smallfactor} - a space-saving factor backed by a raw vector (instead of integers)
2021-08-27
Fast(?) cubic beziers at variable resolution
2021-08-11
Introducing {colourmebad} - find pronounceable colours close to reference colours
2021-07-30
Introducing {ggqr} - A geom for QR codes in ggplot2
2021-07-27
Introducing {bdftools} - tools for bitmap fonts in R
2021-07-26
Introducing {facetious} - alternate facets for ggplot2
2021-07-20
Introducing {ingrid} - alternate tools for grab creation, manipulation and output
2021-07-15
Introducing 'sars' - proof-of-concept for running 'SAS' DATA and PROC SQL statements in R
2021-07-14
R v4.1.0 - {grid} graphics new feature - patterns (part 3)
2021-07-03
R v4.1.0 - {grid} graphics new feature - patterns (part 2)
2021-07-02
R v4.1.0 - {grid} graphics new feature - patterns
2021-07-01
Introducing {gluestick} - a simple, base R, single function, glue-like string interpolator
2021-06-04
Package Development Update
2021-04-01
Introducing 'fugly' - fast regular expression substring extraction with named capture groups
2021-03-19
On 'on.exit()' - Part 2
2021-03-12
On 'on.exit()'
2021-03-12
Modifying R6 objects after creation - Part 2
2021-02-20
Modifying R6 objects after creation
2021-02-19
A Simple Ray-Tracer Written in Base R
2021-02-15
From the time before Tetris - 'Beat the Computer' puzzles
2021-01-27
Introducing {wingspan} - data about the cards in the Wingspan boardgame
2021-01-18
2020
Introducing flexo - simple lex/parse tools in R
2020-12-07
Introducing ggrgl - a 3d extension to ggplot
2020-12-02
Demo: Rendering Images in Polygons with {ggplot2} and {ggpattern}
2020-11-18
Play Zork in RStats
2020-11-15
{emphatic} v0.1.3 - highlight data.frame output with ANSI - Added legends & support for vectors
2020-11-11
A Chess Engine in RStats (Proof-of-Concept using Stockfish)
2020-11-05
Parsing Forsyth Edwards Notation for Chess in RStats
2020-11-05
Parsing Chess PGN files in RStats
2020-11-04
Knight's Tour Problem
2020-11-03
8 Queens Chess Problem
2020-11-02
Introducing 'emphatic' - highlight data.frames in the R console
2020-10-30
Introducing 'purler' - fast run-length encoding with data.frame output
2020-10-14
Introducing geomlime
2020-10-13
Introducing devoutrgl - a 3d graphics device targetting rgl
2020-10-06
A level 3 menger sponge in R
2020-09-27
Introducing the {triangular} package for decomposing complex polygons to triangles
2020-09-26
What's the upper limit on serialization speed in R?
2020-09-22
xxhashlite - hash arbitrary R objects as fast as possible
2020-09-22
Introducing serializer - a demonstration pkg illustrating how to use R's serialiation from C
2020-09-18
Creating a data.frame in C
2020-09-16
Introducing 'snowcrash' - a package to encode arbitrary R objects into image representations
2020-09-11
Introducing 'cryogenic' - a package to freeze function calls to modify and evaluate later
2020-09-09
Inserting rgl as webgl in an Rmarkdown document - Part 2
2020-09-07
Inserting rgl as webgl in an Rmarkdown document
2020-09-07
Introducing 'insitu' - functions for in-place modification
2020-09-03
Run-Length Encoding and The Problem of NAs
2020-08-26
Introducing 'chipmunkcore' - a wrapper for the chipmunk2d physics simulation c library
2020-08-20
Introducing 'cairobasic' - an R6 wrapper around cairocore
2020-08-18
Introducing 'cairocore' - fast 2d drawing canvas backed by cairo
2020-08-17
Introducing 'spng' - In-memory decoding of PNG images
2020-08-05
Introducing 'pixelweaver' - Convert arrays/matrices to packed ARGB32 colour format
2020-08-03
Introducing 'simpletrie' - a simple trie written in pure R (a.k.a. a tool for cheating at scrabble)
2020-08-01
Introducing 'frak' - a julia set fractal generator
2020-07-16
Introducing 'displease' - a package for non-linear numeric inteprolation
2020-07-14
Introducing 'miranda' - a package of fast, modern, uniform pseudo-random number generators
2020-07-09
The quality of R's Random Number Generators
2020-07-07
Introducing terse - a package for compact output of lists and data.frames
2020-07-01
simplec, simplecall, simplercpp - demo packages incorporating C code
2020-06-30
Introducing 'zstdlite' - fast, configurable, in-memory compression of numeric vectors with Zstandard
2020-06-19
Introducing 'lz4lite' - extremely fast compression with LZ4
2020-06-16
Introducing 'xxhashr' - extremely fast hashing with xxHash
2020-06-12
Introducing the 'defaultlist' package - R list objects with a user-defined default value.
2020-05-13
defaultlist - an R list with a user-defined default value. Take 2
2020-05-12
defaultlist - an R list with a default value
2020-05-11
Introducing 'gridfont' - a vector font
2020-05-08
Introducing 'arcadefont' - an oldschool arcade vector font (Happy Star Wars Day)
2020-05-04
Introducing devoutansi - an ANSI graphics device
2020-04-30
Introducing miniansi - a package for creating simple ANSI documents
2020-04-29
Scanline Polygon Fill Algorithm in Plain R (with bonus ANSI colour!)
2020-04-28
Introducing 'ransid' - a simple image to ANSI converter
2020-04-27
Introducing devoutdrawio - A graphics device which outputs to draw.io format
2020-04-23
Introducing minidrawio - create simple draw.io documents in R
2020-04-22
Manipulate CSV files on the command line with dplyr-cli
2020-04-20
Racing Barplots with {ggpattern}, {flagon} & {gganimate}
2020-04-12
Introducing 'flagon' - A package of just flag images in PNG and SVG format
2020-04-03
Introducing 'optout' - A package for optimizing graphics output
2020-04-03
Introducing ggpattern - pattern fills for ggplot
2020-04-01
Line Segment/Box Intersection Test
2020-03-01
My mental model of how alpha works is wrong
2020-02-14
Introducing the {ggblur} package
2020-02-11
2019
Drawing with epicycles in R
2019-12-31
dplyr::ungroup() - forget me not. Part 4.
2019-12-06
dplyr::ungroup() - forget me not. Part 3.
2019-11-22
dplyr::ungroup() - forget me not. Part 2.
2019-11-20
dplyr::ungroup() - forget me not
2019-11-19
Introducing {devoutsvg} - SVG graphics output device with pattern fills
2019-10-10
Introducing {svgpatternusgs} - a collection U.S. Geological Survey repeating SVG patterns
2019-10-10
Introducing {svgpatternsimple} - a collection of simple repeating SVG patterns
2019-10-09
The {miniverse} - a collection of document creation packages for RStats
2019-10-09
Introducing {minisvg} - create SVG documents with R
2019-10-08
The {devoutverse} - a collection of non-standard graphics output devices for RStats
2019-10-08
Introducing {devoutpdf} - a hand-crafted PDF graphics device written in plain R
2019-10-07
Introducing {devoutaudio} - an experimental package for rendering graphics as audio
2019-10-04
Re-introducing devout - a package for creating graphics output devices in plain R
2019-10-03
Introducing the `minixml` package for creating XML documents in R
2019-09-30
Introducing the `hershey` package - raw data for the Hershey Vector Fonts
2019-09-24
Introducing the `minihtml` package for creating HTML documents in R
2019-09-19
Introducing the `minizdog` package for creating zdog 3d illustrations in R
2019-09-17
Introducing the `minicss` package for creating CSS styles and stylesheets in R
2019-09-11
Introducing the `minipdf` package for writing raw PDFs
2019-08-14
Introducing the `lofi` package for low-fidelity/low-bit data representations
2019-08-06
Using random bits to generate random numbers
2019-07-19
poissoned - a package for poisson disc sampling
2019-06-25
Drawing Fractals with grid graphics - part 2
2019-04-29
Drawing Fractals with grid graphics - part 1
2019-04-27
Introducing the ggreverse package for turning ggplots back in to code
2019-04-26
Reverse engineer the ggplot call from a ggplot object
2019-04-26
Every possible scatterplot from a data.frame (32 thousand plots of `mtcars`)
2019-04-25
GIF image writing in pure R
2019-04-23
Twitter #rstats activity
2019-04-09
Outputting data to images
2019-04-08
Red/Blue Analglyphs with ggplot2 and ggthreed
2019-04-02
ggdebug - v0.1.1
2019-04-01
ggdebug - a package for debugging ggplot stats
2019-03-26
ggecho - an experimental ggplot stat for blurring elements
2019-03-22
geom_blurry() - proof of concept
2019-03-19
Introducing the `analemmatic` Package for Creating Analemmatic Sundials
2019-03-19
group_map() in dplyr 0.8.1 (still in development)
2019-03-17
group_split/map/modify() in dplyr 0.8.1 (still in development)
2019-03-15
Anonymous Functions in R - Part 3: Introducing the 'anon' package
2019-03-14
Anonymous Functions in R - Part 2
2019-03-13
Anonymous Functions in R - Part 1
2019-03-13
image2xlsx package: Converting an image to an excel spreadsheet
2019-03-09
Custom axis breaks on facetted ggplot
2019-03-07
Converting an image to an excel spreadsheet
2019-03-03
object of type 'closure' is not(?) subsettable
2019-02-12
8 out of 10 cats does countdown - part 2
2019-02-11
8 out of 10 cats does countdown
2019-02-04
Interleaving vectors and matrices - part 3
2019-01-31
Interleaving vectors and matrices - part 2
2019-01-30
Interleaving vectors and matrices (part 1)
2019-01-29
Puzzle Solving: Dominosa
2019-01-28
2018
split-apply-combine with `group_map`
2018-12-31
R packages - internal and external data
2018-12-10
phon - a package for rhymes etc
2018-12-03
grrr - a package for changing default function arguments
2018-11-20
ggthreed - 3d pie charts
2018-11-13
threed - drawing a cube in ggplot2
2018-11-12
Parsing a favicon with {minitypes}
2018-11-06
Minitypes - vector type conversion
2018-11-06
facet_inception()
2018-10-31
Creating fractals with ggplot2 and patchwork
2018-10-30
engroupify: A function to transform other functions to be aware of dplyr groups
2018-10-11
Writing a function which respects `dplyr::group_by()`
2018-10-09
Introducing the `memoisetools` package
2018-10-08
Using LZ4 and Zstandard to compress files with `saveRDS()`
2018-10-02
Memoisation
2018-10-01
Writing a nonogram solver in R
2018-09-28
Creating nonograms with 'nonogram' and 'magick' packages
2018-09-27
Nonograms in R - 'nonogram' package
2018-09-26
Memoise with object size limit
2018-09-24
The Zombie/Vampire Apocalypse - A use case for strict membership tests
2018-09-21
strict `case_when` - bugfix
2018-09-20
Find all sequences of a given length with the given sum
2018-09-20
Intersection of multiple vectors
2018-09-17
A stricter `%in%`
2018-09-07
strict `case_when`
2018-09-06
bits and bit reversal
2018-09-04
gganimate with sprites
2018-08-13
gganimate with bitmap fonts
2018-08-12
ggplot2 stat_summary problem
2018-08-06
Encoding and Rendering Grade 1 Braille
2018-07-31
Re-defining 'return()'
2018-07-27
pipe - rewriting nested function calls with pipes
2018-07-27
unpipe - rewriting an expression without the pipes
2018-07-26
Shortest unique prefix - it's a builtin function
2018-07-24
Shortest unique prefix - second attempt
2018-07-24
Shortest unique prefix
2018-07-23
Introducting the 'funcmath' package for creating plotmath expression
2018-07-18
Ikeda map (fractal)
2018-07-09
Barnsley Ferns (fractal)
2018-07-07
Hilbert Curves
2018-07-06
Fractals with matrices - sierpinski carpet
2018-07-05
Text fractals - sierpinski
2018-07-04
Plotmath fractals 2
2018-07-03
Plotmath fractals
2018-07-02
Benchmark mutate - vector, matrix, data.frame
2018-05-12
Challenge: Simultaneous parallel min() and which.min()
2018-05-12
Hi-res c64 images with Rstats 'r64' package
2018-05-10
Introducing the `tapir` package: Text-based Arbitrary Precision Integers in R
2018-05-07
Challenge: Adding Large Integers in R
2018-05-04
Finding names in R packages which could be domain names (using rvest and the tidyverse)
2018-05-02
`uint8` package for an unsigned 8bit integer type in R
2018-04-29
r64 package - a c64/6502 assembler
2018-04-25
Generating Executable ASCII art
2018-04-12
Changing the default arguments to a function
2018-04-11
Solving the 8 queens problem
2018-04-10
Finding a length n needle in a haystack
2018-04-03
Assert condition over a code block
2018-03-23
Assert condition over a code block
2018-03-22
Body modification part 5: Adding runtime check of function return value
2018-03-21
Body modification part 4: Adding runtime checks to an existing function
2018-03-20
Body modification part 3: Syntax for body modification/function wrapping
2018-03-19
Body modification part 2: Automatically creating type checks for a function
2018-03-18
Body modification: Injecting new content into a function
2018-03-16
Base R split has issues - Part 3 more idiosyncrasies
2018-03-15
geom_cat()
2018-03-08
`chop()`: A tidyverse-style `split()`
2018-03-07
`cleave_by()`: A tidyverse-style `split()`
2018-03-04
Base R split has issues - Part 2 idiosyncrasies
2018-03-04
Base R split has issues - Part 1 runtime
2018-03-04
Split-Apply-Combine: My search for a replacement for 'group_by + do'
2018-03-03
The 'ggplot2pipes' package
2018-02-27
Using ggplot with pipes
2018-02-25
Customing ggplots created within functions
2018-02-24
Overlapping lines
2018-02-20
Convex Hulls part 4
2018-02-18
Convex Hulls part 3
2018-02-18
convex hulls part 2
2018-02-16
chull()
2018-02-15
Evaluating R code from potentially malicious sources Part 4
2018-02-13
Part 3: Evaluating R code from potentially malicious sources
2018-02-12
Evaluating R code from potentially malicious sources part 2
2018-02-11
Evaluating R code from potentially malicious sources
2018-02-10
YAML vs jsonlite vs RJSONIO
2018-02-07
`blogdown` rss feed of full articles
2018-02-07
`dithr` package for error diffusion dithering in R
2018-02-05
Error Diffusion Dithering in R
2018-02-04
YAML vs JSON for saving human-readable R objects (TLDR: Use YAML)
2018-02-03