I have been asked to write a minimal, reproducible example (reprex). What is that, and how do I write one?
1 Answer
How to create a Minimal, Reproducible Example ("Reprex")
When asking a question that involves computer code, people will be better able to provide help if you provide code that they can easily understand and use to reproduce the problem. This is called creating a minimal, reproducible example (reprex); a minimal, complete, and verifiable example (mcve), or a minimal, workable example (mwe).
Your code examples should be...
- ...Minimal: Use as little code as possible that still produces the same problem
- ...Complete: Provide all parts someone else needs to reproduce your problem in the question itself
- ...Reproducible: Test the code you're about to provide to make sure it reproduces the problem
The rest of this article provides guidance on these aspects of writing a minimal, reproducible example.
Minimal
The more code there is to go through, the less likely people can find your problem. Streamline your example in one of two ways:
- Restart from scratch. Create a new program, adding in only what is needed to see the problem. Use simple, descriptive names for functions and variables—don't copy the names you're using in your existing code.
- Divide and conquer. If you're not sure what the source of the problem is, start removing code a bit at a time until the problem disappears—then add the last part back.
Minimal and readable
Don't sacrifice clarity for brevity when creating a minimal example. Use consistent naming and indentation, and include code comments if needed. Also, use spaces instead of tabs—tabs might not get correctly formatted on OR.SE.
Complete
Make sure all information necessary to reproduce the problem is included in the question itself:
- If the problem requires both a model file and a data file, include code for both. The problem might not be in the file you think it is in. (Plus, we'll need both in order to run your code.)
- Use individual code blocks for each file or snippet you include. Provide a description for the purpose of each block.
- DO NOT use images of code. Copy the actual text from your code editor, paste it into the question, then format it as code. This helps others more easily read and test your code.
Reproducible
To help you solve your problem, others will need to verify that it exists:
- Describe the problem. "It doesn't work" isn't descriptive enough to help people understand your problem. Instead, tell other readers what the expected behavior should be. Tell other readers what the exact wording of the error message is, and which line of code is producing it. Use a brief but descriptive summary of your problem as the title of your question.
- Eliminate any issues that aren't relevant to the problem. If your question isn't about a missing data value, ensure that there are no missing data values; if your question isn't about an infeasibility message, ensure that the instance you provide is feasible; etc.
- Double-check that your example reproduces the problem! If you inadvertently fixed the problem while composing the example but didn't test it again, you'd want to know that before asking someone else to help.
It might help to shut your system down and restart it, or transport the example to a fresh environment to confirm it really does provide an example of the problem.
This article is adapted from Stack Overflow's article on minimal, reproducible examples.
For more information on how to debug your program so that you can create a minimal example, Eric Lippert has written a fantastic blog post on the subject: How to debug small programs.
The use of "reprex" for Reproducible Example was inspired by Jenny Bryan's reprex
package for R.