Prepare reprexes for posting to GitHub
issues,
StackOverflow, or Slack
snippets.
What is a reprex
? It’s a reproducible example, as coined by
Romain
Francois.
Given R code on the clipboard, selected in RStudio, as an expression (quoted or not), or in a file …
- run it via
rmarkdown::render()
, - with deliberate choices re: arguments and setup chunk.
Get resulting runnable code + output as
- Markdown, formatted for target venue, e.g.
gh
orso
, or as - R code, augmented with commented output.
Result is returned invisibly, placed on the clipboard, and written to a file. Preview an HTML version in RStudio viewer or default browser.
Install from CRAN:
install.packages("reprex")
or get a development version from GitHub:
devtools::install_github("tidyverse/reprex")
On Linux, you probably want to install
xclip or
xsel, so reprex can
access the X11 clipboard. This is ‘nice to have’, but not mandatory. The
usual sudo apt-get install
or sudo yum install
installation methods
should work for both xclip and xsel.
Let’s say you copy this code onto your clipboard:
(y <- 1:4)
mean(y)
Then call reprex()
, where the default target venue is GitHub:
reprex()
A nicely rendered HTML preview will display in RStudio’s Viewer (if you’re in RStudio) or your default browser otherwise.
The relevant bit of GitHub-flavored Markdown is ready to be pasted from your clipboard:
``` r
(y <- 1:4)
#> [1] 1 2 3 4
mean(y)
#> [1] 2.5
```
Here’s what that Markdown would look like rendered in a GitHub issue:
(y <- 1:4)
#> [1] 1 2 3 4
mean(y)
#> [1] 2.5
Anyone else can copy, paste, and run this immediately.
Instead of reading from the clipboard, you can:
-
reprex(mean(rnorm(10)))
to get code from expression. -
reprex(input = "mean(rnorm(10))\n")
gets code from character vector (detected via length or terminating newline). Leading prompts are stripped from input source:reprex(input = "> median(1:3)\n")
produces same output asreprex(input = "median(1:3)\n")
-
reprex(input = "my_reprex.R")
gets code from file -
Use one of the RStudio add-ins to use the selected text or current file.
But wait, there’s more!
-
Set the target venue to Stack Overflow with
reprex(..., venue = "so")
. -
Get a runnable R script, augmented with commented output, with
reprex(..., venue = "R")
. This is useful for Slack, email, etc. -
By default, figures are uploaded to imgur.com and resulting URL is dropped into an inline image tag.
-
Use the
outfile
argument to control where results are left behind. Useoutfile = NA
to work in current working directory. -
Get clean, runnable code from wild-caught reprexes with
reprex_invert()
= the opposite ofreprex()
reprex_clean()
, e.g. when you copy/paste from GitHub or Stack Overflowreprex_rescue()
, when you’re dealing with copy/paste from R Console
Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.