R: Convert Sweave to knitr documents

Sweave2knitr {knitr} | R Documentation

## Convert Sweave to knitr documents

### Description

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

### Usage

    Sweave2knitr(file, output = gsub("[.]([^.]+)$", "-knitr.\\1", file),
        encoding = getOption("encoding"), text = NULL)

### Arguments

`file` | the filename of the Rnw file
`output` | the output filename (by default ‘file.Rnw’ produces ‘file-knitr.Rnw’); if `text` is not NULL, no output file will be produced
`encoding` | the encoding of the Rnw file
`text` | an alternative way to provide the Sweave code as a character string (if provided, the `file` will be ignored)

### Details

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

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 required.

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).

### Value

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

### Note

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.

### References

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

### See Also

`Sweave`, `gsub`

### Examples

    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

[Package knitr version 1.16 Index]