Need help with reprex?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

tidyverse
510 Stars 73 Forks Other 533 Commits 36 Opened issues

Description

Render bits of R code for sharing, e.g., on GitHub or StackOverflow.

Services available

!
?

Need anything else?

Contributors list

reprex

CRAN\_Status\_Badge R build status Codecov test coverage lifecycle <!-- badges: end -->

Overview

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:
    render()
    arguments, knitr options, and Pandoc options.

Get resulting runnable code + output as

  • Markdown, suitable for GitHub or Stack Overflow, 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.

Installation

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.

Usage

Let’s say you copy this code onto your clipboard:

(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 CommonMark Markdown is ready to be pasted from your clipboard:

``` r
(y  [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] 1 2 3 4
mean(y)
#> [1] 2.5

Anyone else can copy, paste, and run this immediately.

In addition to GitHub, this markdown also works on Stack Overflow and Discourse. Those venues can be formally requested via

venue = "so"
and
venue = "ds"
, but they are just aliases for
venue = "gh"
.

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 as
    reprex(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!

  • Get a runnable R script, augmented with commented output, with

    reprex(..., venue = "R")
    . This is useful for Slack, email, etc.
  • Get html with

    reprex(..., venue = "html")
    . Useful for sites that don't support markdown.
  • Prepare rendered, syntax-highlighted code snippets to paste into Keynote or PowerPoint, with

    reprex(..., venue = "rtf")
    . This feature is still experimental; see the associated article for more.
  • By default, figures are uploaded to imgur.com and the resulting URL is dropped into an inline image tag.

  • Use the

    outfile
    argument to control where results are left behind. Use
    outfile = NA
    to work in current working directory.
  • Append session info via

    reprex(..., session_info = TRUE)
    .
  • Get clean, runnable code from wild-caught reprexes with

    • reprex_invert()
      = the opposite of
      reprex()
    • reprex_clean()
      , e.g. when you copy/paste from GitHub or Stack Overflow
    • reprex_rescue()
      , when you’re dealing with copy/paste from R Console

Code of Conduct

Please note that the reprex project is released with a Contributor Code of Conduct. By contributing to this project, you agree to abide by its terms.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.