The R package knitr is a general-purpose literate programming engine, with lightweight API's designed to give users full control of the output without heavy coding work. It combines many features into one package with slight tweaks motivated from my everyday use of Sweave. See the package homepage for details and examples. See FAQ's for a list of frequently asked questions (including where to ask questions).
You can install the stable version on CRAN:
install.packages('knitr', dependencies = TRUE)
You can also install the development version from RForge, which provides daily build of knitr:
# update all existing packages first
update.packages(ask = FALSE, repos = 'http://cran.rstudio.org')
install.packages('knitr', repos = c('http://rforge.net', 'http://cran.rstudio.org'),
type = 'source')
If you know GIT and R CMD build
, here is another way:
git clone https://github.com/yihui/knitr.git
R CMD build knitr
R CMD INSTALL knitr_*.tar.gz
While Sweave and related add-on packages like cacheSweave and pgfSweave are fairly good engines for literate programming in R, but I often feel my hands are tied, for example:
[width=.8\textwidth]
between \includegraphics
and {my-plot.pdf}
(the official way in Sweave is \setkeys{Gin}
but it is setting a global width, which is unrealistic since we often have to set widths individually; yes, you can use \setkeys{Gin}
for many times, but why not just provide an option for each chunk?)dev = 'png'
or dev = 'CairoJPEG'
\Sexpr{}
other than writing expressions like \Sexpr{round(x, 3)}
for each single \Sexpr{}
print()
plots from ggplot2 and a simple qplot(x, y)
would just give me a plot in SweaveSweave.sty
or run into troubles due to the fact that LaTeX cannot find Sweave.sty
The package knitr was designed to give the user access to every part of the process of dealing with a literate programming document, so there is no need to hack at any core components if you want more freedom. I have gone through the source code of pgfSweave and cacheSweave for a couple of times, and I often feel uncomfortable with the large amount of code copied from official R, especially when R has a new version released (I will begin to worry if the add-on packages are still up-to-date with the official Sweave).
library(knitr)
?knit
knit(input)
If options are not explicitly specified, knitr will try to guess reasonable default settings. A few manuals are available such as the main manual, the graphics manual, and the themes manual. For a more organized reference, see the knitr book.
For very simple changes such as fixing typos, you can just edit the file by clicking the button Edit
after you open the file online. For more complicated changes, you will have to manually create a pull request after forking this repository.
To make sure you did not break anything, you need to run tests, which are done through the testit package. If you added any features, add your own tests in tests/testit/
. You can run tests using make
, e.g.
cd knitr
make check
If you are lazy or do not understand what I said above, just forget about it. The simplest thing to do is to look at the Commits
panel after you sent the pull request -- if you see green check marks ✔ on your commits, you are fine. Travis CI will run the tests automatically for me. If your pull request passes the tests, you see green check marks.
This package is free and open source software, licensed under GPL.