The exploratory-algorithm-person's IDE-equivalent. Literate coding-meets-science.
Let's say I want to demonstrate my algorithm to my thesis advisor while he's off at conference. I need an easily shareable demonstration. that's why we have the internet, and scientific computation/documentation system such as Rmarkdown/knitr and Jupyter.
See also text editors, citation management, academic writing workflow, python, cloud computing a.k.a. cloud wrangling, open notebook science, scientific computation workflows, build tools.
General
Why do this? To belatedly immanentize the prophecy that the scientific paper is dead. That last link is written for outsiders to the field.
If less eloquent, Yihui Xie is far more useful: Notebook war summarises some philosophical and practical differences between the literate coding/exploratory notebook hybrid tools in use.
Python
See also
- jupyter wherein there are some bonus notes about the technical details of this particular solution.
- the R tool, RMarkdown, also supports python. Perhaps you want to give it a try? It supports passing python variables to R, which is a serious win for graphing.
Pweave
Pweave, by Matti Pastell, is python twin of knitr, which is itself in the lineage of literate coding tools.
Pweave is a scientific report generator and a literate programming tool for Python. It can capture the results and plots from data analysis and works well with numpy, scipy and matplotlib.
Max Masnick gives a detailed set up.
ipypubish
Chris Sewell has produced a scripted called ipypublish that eases some of the pain points in producing articles starting from jupyter. See the comments for some additional pro-tips for this.
R
knitr / rmarkdown is the r-based entrant in the scientific workbook field. There are several pieces in this toolchain with a complicated relationship It comes with an interactive notebook ui, and even supports python/C++ Here are some guides:
- interactive reports with R and knitr
- Original author Yihui Xie's examples gallery has great material for learning learning-by-cut-and-paste
- His draft knitr manual is free online.
-
tufte is an Edward-Tufte-compliant stylesheet (cran link)
- tint is an alternate version
-
Useful tip: you can also integrate it into hydrogen, the jupyter kernel executor for atom.
For online web-friendly (e.g. teaching) purposes, you can do literate interactive coding using shiny and latex via shinytex.
For an intro to the various way to build this into a full reproducible research workflow, see the excellent reproducible analysis workshop.
Julia
Julia also wants this, right? There is a native option, weave.jl - another literate coding thingy, much like RMarkdown or pweave.
# capturing code output
The code chunk wil be run with default options and the output captured.
<<>>==
using Gadfly
x = linspace(0, 2* pi)
println(x)
plot(x = x, y = sin(x)
@
Or you could use RMarkdown in julia mode It's not clear to me how graphing works in this setup.
MATLAB
- Neil Lawrences's matlab sweave hacks
- Marking up MATLAB comments for publishing
Editor/IDE support
Miscellaneous preview support scripts are given in the knitr documentation.
RStudio
As noted, RStudio has initmate Rmarkdown integration.
Atom
Atom supports a number of literate programming tools via
language-weave package -
you might also want a full typesetting experience via
the latex
or atom-latex package,
which can be made to support literate coding of plain latex.
It uses Hydrogen
to provide code preview.
Setting up a latex toolchain in atom-latex
is
not too bad.
E.g. here is one for knitr
:
{
"root": "path/to/my/file.Rnw",
"toolchain": "Rscript -e \"library(knitr); knit('%DOC.%EXT')\" && latexmk -synctex=1 -interaction=nonstopmode -file-line-error -pdf %DOC",
"latex_ext": [".Rnw"]
}
It would probably also work for pweave
or Weave.jl
.