Convert Sweave to knitr documents

This function converts an Sweave document to a knitr-compatible document.

Sweave2knitr(file, output = gsub("[.]([^.]+)$", "-knitr.\\1", file), 
    encoding = getOption("encoding"), text = NULL)
the filename of the Rnw file
the output filename (by default file.Rnw produces file-knitr.Rnw); if text is not NULL, no output file will be produced
the encoding of the Rnw file
an alternative way to provide the Sweave code as a character string (if provided, the file will be ignored)

The pseudo command \SweaveInput{file.Rnw} is converted to a code chunk header <>=.

Similarly \SweaveOpts{opt = value} is converted to a code chunk opts_chunk$set(opt = value) with the chunk option include = FALSE; the options are automatically fixed in the same way as local chunk options (explained below).

The Sweave package \usepackage{Sweave} in the preamble is removed because it is not reguired.

Chunk options are updated if necessary: option values true and false are changed to TRUE and FALSE respectively; fig=TRUE is removed because it is not necessary for knitr (plots will be automatically generated); fig=FALSE is changed to fig.keep='none'; the devices pdf/jpeg/png/eps/tikz=TRUE are converted to dev='pdf'/'jpeg'/'png'/'postscript'/'tikz'; pdf/jpeg/png/eps/tikz=FALSE are removed; results=tex/verbatim/hide are changed to results='asis'/'markup'/'hide'; width/height are changed to fig.width/fig.height; prefix.string is changed to fig.path; print/term/prefix=TRUE/FALSE are removed; most of the character options (e.g. engine and out.width) are quoted; keep.source=TRUE/FALSE is changed to tidy=FALSE/TRUE (note the order of values).

If a line @ (it closes a chunk) directly follows a previous @, it is removed; if a line @ appears before a code chunk and no chunk is before it, it is also removed, because knitr only uses one @ after <<>>= by default (which is not the original Noweb syntax but more natural).


  • If text is NULL, the output file is written and NULL is returned, otherwise the converted text string is returned.


If \SweaveOpts{} spans across multiple lines, it will not be fixed, and you have to fix it manually. The LaTeX-style syntax of Sweave chunks are ignored (see ?SweaveSyntaxLatex); only the Noweb syntax is supported.


The motivation of the changes in the syntax: http://yihui.name/knitr/demo/sweave/

See Also

Sweave, gsub

  • Sweave2knitr
Sweave2knitr(text = "<<echo=TRUE>>=")  # this is valid
Sweave2knitr(text = "<<png=true>>=")  # dev='png'
Sweave2knitr(text = "<<eps=TRUE, pdf=FALSE, results=tex, width=5, prefix.string=foo>>=")
Sweave2knitr(text = "<<,png=false,fig=TRUE>>=")
Sweave2knitr(text = "\\SweaveOpts{echo=false}")
Sweave2knitr(text = "\\SweaveInput{hello.Rnw}")
# Sweave example in utils
testfile = system.file("Sweave", "Sweave-test-1.Rnw", package = "utils")
Sweave2knitr(testfile, output = "Sweave-test-knitr.Rnw")
knit("Sweave-test-knitr.Rnw")  # or knit2pdf() directly
Documentation reproduced from package knitr, version 1.7, License: GPL

Community examples

Looks like there are no examples yet.