This function converts an Sweave document to a knitr-compatible document.
Sweave2knitr(
file,
output = gsub("[.]([^.]+)$", "-knitr.\1", file),
text = NULL
)
If text
is NULL
, the output
file is written and
NULL
is returned. Otherwise, the converted text string is returned.
Path to the Rnw file (must be encoded in UTF-8).
Output file path. By default, file.Rnw
produces
file-knitr.Rnw
); if text
is not NULL, no output file will be
produced.
An alternative way to provide the Sweave code as a character
string. If text
is provided, file
will be ignored.
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).
The motivation of the changes in the syntax: https://yihui.org/knitr/demo/sweave/
Sweave2knitr(text = "<>=") # this is valid
Sweave2knitr(text = "<>=") # dev='png'
Sweave2knitr(text = "<>=")
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")
if (interactive()) knit("Sweave-test-knitr.Rnw") # or knit2pdf() directly
unlink("Sweave-test-knitr.Rnw")
Run the code above in your browser using DataLab