Reproducible Examples and the reprex
package
Intro
Basic usage of reprex
Motivation, why use reprex
? "Help me help you"
Define reprex
? Three common ways to use the term.
- noun, a reproducible example
- the
reprex
package. a tool to build R reprexes reprex::reprex()
, a function inreprex
to make a reprex.
When should you use a reprex?
reprex
installation and setup
- How do you actually get
reprex
on your machine? - Advanced setup and discussion.
- Please use advanced features responsibly.
Why does the reprex
package exist?
Anyone who has helped teach R or dealt with github issues, twitter, stack overflow & RStudio community questions knows that helping people diagnose their coding problems can be hard.
This tool comes from hard-won experience. Its aim to is help people ask well formed questions and increase the chances of getting well formed answers quickly.
Philosophy behind reprex
-
- Tips on writing good reprexes. Dos and don'ts.
- How do I get my data into my reprex? - Getting small data and CSV type data into your reprex is easy.
- βI have a big hairy data object and I can only show the problem by using itβ β but that's not always the case.
-
Code that I don't need to run -
reprex
gives your reader the code and reveals the output being produced by that code. For experienced coders, that might be enough to help you. -
Code that I can easily run - Don't copy and paste from the R console. This is usually annoying for your reader. Worse than console copy-pasta is the screenshot. (Many people think screenshots of code are downright offensive.)
reprex_clean
- If you copy someone else's reprex into your console, it may include their output, making your new reprex untidy. Here are tips for taking someone else's reprex
code and output, and creating a clean reprex
reply.
Shock and Awe: Additional interesting features of the reprex
package
-
What about figures and plots in your reprex? So happy you asked about that. reprex will automatically upload your images to imgur.com.
-
Create a reprex by explicitly providing your code in the reprex call.
-
When you need your reprex to work in the current working directory.
-
Differently flavored markdown. Optimize your
reprex
markdown output for GitHub, Stack Overflow, or the RStudio Community. -
Make your reprex create an R script, with your reprex outputs as comments. This is handy for pasting into an email or slack-type-app.
-
Rich text (.rtf) output. (currently an experimental feature as of this video)
-
Suppress the
reprex
advertisement at the bottom of your reprex. -
Auto styling of your code. Good if you're dealing with poorly formatted code.
-
Capture a reprex that sends messages to standard output and standard input (e.g. package installation compilation messages).
reprex
RStudio addins
- "render reprex" and "reprex selection". These accelerate your use of
reprex
.
The human side of reproducible examples
How to ask questions in ways that are most likely to get answered.
Sorry for the tough love, but this is important. Why are you always asked to give a reprex?
- Experts try to use reproducible examples to ensure their advice works.
- Making a good reprex is hard. But, you are asking them to solve a problem for you, so meet them halfway.
- Creating reprexes is good coding practice.
- Making a good reprex is often a good way to debug your issue in the embarrassment-free privacy of your own home.
- reprexes lead to discussions more likely to help people in the future.
Behind the scenes of reprex
Thanks for those that helped make reprex possible.
Questions and Answers
- Can
reprex
capture variables and objects in the current environment? (not yet, maybe in development) - Does
reprex
actually check that the code is self-contained? - Does
readr::read_csv
support the text argument? (yep, just read the help manual for readr)