lyx_mirror/lib/examples/sweave.lyx
Guillaume Munch d6b1dc4724 Update Sweave, Knitr manual and showcase the new Navigate menu
Also mention needauth option
2017-01-09 18:22:22 +01:00

1964 lines
32 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#LyX 2.3 created this file. For more info see http://www.lyx.org/
\lyxformat 508
\begin_document
\begin_header
\save_transient_properties true
\origin /systemlyxdir/examples/
\textclass article
\begin_preamble
%% maxwidth is the original width if it's less than linewidth
%% otherwise use linewidth (to make sure the graphics do not exceed the margin)
\def\maxwidth{%
\ifdim\Gin@nat@width>\linewidth
\linewidth
\else
\Gin@nat@width
\fi
}
\end_preamble
\options nogin
\use_default_options true
\begin_modules
sweave
\end_modules
\maintain_unincluded_children false
\language english
\language_package auto
\inputencoding default
\fontencoding global
\font_roman "palatino" "default"
\font_sans "lmss" "default"
\font_typewriter "lmtt" "default"
\font_math "auto" "auto"
\font_default_family default
\use_non_tex_fonts false
\font_sc false
\font_osf false
\font_sf_scale 100 100
\font_tt_scale 100 100
\graphics default
\default_output_format default
\output_sync 0
\bibtex_command default
\index_command default
\paperfontsize default
\spacing single
\use_hyperref false
\papersize default
\use_geometry true
\use_package amsmath 1
\use_package amssymb 1
\use_package cancel 0
\use_package esint 1
\use_package mathdots 1
\use_package mathtools 0
\use_package mhchem 1
\use_package stackrel 0
\use_package stmaryrd 0
\use_package undertilde 0
\cite_engine basic
\cite_engine_type default
\biblio_style plain
\use_bibtopic false
\use_indices false
\paperorientation portrait
\suppress_date false
\justification true
\use_refstyle 0
\index Index
\shortcut idx
\color #008000
\end_index
\leftmargin 3cm
\topmargin 3cm
\rightmargin 3cm
\bottommargin 3cm
\secnumdepth 3
\tocdepth 3
\paragraph_separation indent
\paragraph_indentation default
\quotes_language english
\papercolumns 1
\papersides 1
\paperpagestyle default
\tracking_changes true
\output_changes false
\html_math_output 0
\html_css_as_file 0
\html_be_strict false
\author 2047637253 "Guillaume Munch"
\end_header
\begin_body
\begin_layout Standard
\change_inserted 2047637253 1483897614
\begin_inset Note Note
status open
\begin_layout Plain Layout
\change_inserted 2047637253 1483897614
\begin_inset Flex Sweave Options
status open
\begin_layout Plain Layout
\change_inserted 2047637253 1483897614
prefix=TRUE,prefix.string=sweave-prefix,keep.source=FALSE
\end_layout
\end_inset
\end_layout
\end_inset
\change_unchanged
\end_layout
\begin_layout Standard
\begin_inset ERT
status open
\begin_layout Plain Layout
%%
\backslash
maxwidth was defined in the preamble; see document settings
\end_layout
\begin_layout Plain Layout
\backslash
setkeys{Gin}{width=
\backslash
maxwidth}
\end_layout
\end_inset
\end_layout
\begin_layout Title
Using Sweave with \SpecialChar LyX
\end_layout
\begin_layout Author
Yihui Xie
\begin_inset Foot
status collapsed
\begin_layout Plain Layout
Department of Statistics, Iowa State University.
Email:
\begin_inset CommandInset href
LatexCommand href
name "xie@yihui.name"
target "xie@yihui.name"
type "mailto:"
\end_inset
\end_layout
\end_inset
\begin_inset ERT
status collapsed
\begin_layout Plain Layout
\backslash
and
\end_layout
\end_inset
Gregor Gorjanc
\begin_inset ERT
status collapsed
\begin_layout Plain Layout
\backslash
and
\end_layout
\end_inset
Jean-Marc Lasgouttes
\end_layout
\begin_layout Standard
Sweave is a tool in the R language (
\begin_inset Flex URL
status collapsed
\begin_layout Plain Layout
http://www.r-project.org
\end_layout
\end_inset
) for dynamic report generation using the ideas of literate programming.
R code can be mixed into a \SpecialChar LaTeX
document, and will be executed in R when the
document is compiled; the results are written into the \SpecialChar TeX
output.
\end_layout
\begin_layout Standard
Since \SpecialChar LyX
2.0, Sweave can be used out of the box with any document class using
the
\family sans
Sweave
\family default
module.
We can add the
\family sans
Sweave
\family default
module to a \SpecialChar LyX
document from
\family sans
Document\SpecialChar menuseparator
Settings\SpecialChar menuseparator
Modules
\family default
.
In this manual, we demonstrate some common features of Sweave and explain
how the module works.
A PDF version of this manual can be found at
\begin_inset Flex URL
status collapsed
\begin_layout Plain Layout
https://github.com/downloads/yihui/lyx/sweave.pdf
\end_layout
\end_inset
.
\change_inserted 2047637253 1483898587
\end_layout
\begin_layout Standard
\change_inserted 2047637253 1483899123
Since \SpecialChar LyX
2.3, it is necessary to enable the use of
\emph on
needauth
\emph default
converters in
\family sans
Preferences\SpecialChar menuseparator
File Handling\SpecialChar menuseparator
Converters
\family default
in order to compile with Sweave.
\change_unchanged
\end_layout
\begin_layout Section
System Requirements
\end_layout
\begin_layout Standard
The
\family sans
Sweave
\family default
module depends on the executable
\family typewriter
Rscript
\family default
, so it has to be in the
\family sans
PATH
\family default
variable of the system.
It is usually not a problem for Linux and Mac OS users, but may be confusing
to Windows users; if you do not understand what is
\family sans
PATH
\family default
under Windows, you may either use the R script
\family sans
add-R-path-win.R
\family default
in the repository
\begin_inset Flex URL
status collapsed
\begin_layout Plain Layout
https://github.com/yihui/lyx
\end_layout
\end_inset
to change it automatically (not recommended; you should learn
\family sans
PATH
\family default
anyway), or go to
\family sans
Tools\SpecialChar menuseparator
Preferences\SpecialChar menuseparator
Paths\SpecialChar menuseparator
PATH prefix
\family default
to add the bin path of R (recommended), which is often like
\family sans
C:
\backslash
Program Files
\backslash
R
\backslash
R-x.x.x
\backslash
bin
\family default
and you can find it in R:
\end_layout
\begin_layout Standard
\change_inserted 2047637253 1483897627
\begin_inset Flex Chunk
status open
\begin_layout Plain Layout
\change_inserted 2047637253 1483897627
\begin_inset Argument 1
status open
\begin_layout Plain Layout
\change_inserted 2047637253 1483897627
where-is-R-bin,eval=FALSE
\end_layout
\end_inset
\end_layout
\begin_layout Plain Layout
\change_inserted 2047637253 1483897627
R.home('bin')
\end_layout
\end_inset
\change_unchanged
\end_layout
\begin_layout Standard
After you have done these changes, you need to reconfigure \SpecialChar LyX
by
\family sans
Tools\SpecialChar menuseparator
Reconfigure
\family default
.
If
\family typewriter
Rscript
\family default
is not present in
\family sans
PATH
\family default
, the
\family sans
Sweave
\family default
module will be unavailable.
It is recommended to use the latest version of R, since Sweave is still
being updated.
Another dependency is introduced by the \SpecialChar LaTeX
style file
\family sans
Sweave.sty
\family default
which is shipped with R under this path (it is not on CTAN):
\end_layout
\begin_layout Standard
\change_inserted 2047637253 1483897639
\begin_inset Flex Chunk
status open
\begin_layout Plain Layout
\change_inserted 2047637253 1483897639
\begin_inset Argument 1
status open
\begin_layout Plain Layout
\change_inserted 2047637253 1483897639
sweave-sty,eval=FALSE
\end_layout
\end_inset
\end_layout
\begin_layout Plain Layout
\change_inserted 2047637253 1483897639
file.path(R.home('share'), 'texmf', 'tex', 'latex')
\end_layout
\end_inset
\change_unchanged
\end_layout
\begin_layout Standard
Mik\SpecialChar TeX
users may add the texmf directory to the list of root directories in
Mik\SpecialChar TeX
through Mik\SpecialChar TeX
settings.
Further note that
\family sans
Sweave.sty
\family default
depends on the
\series bold
fancyvrb
\series default
package and
\emph on
may
\emph default
depend on
\series bold
ae
\series default
.
If \SpecialChar LyX
cannot find
\family sans
Sweave.sty
\family default
, it will directly copy from R, so the Sweave module works even if you do
not know where is this style file.
\end_layout
\begin_layout Section
Sweave Examples
\end_layout
\begin_layout Standard
Before we write an Sweave document, we can set some Sweave options; the
command is
\family typewriter
\backslash
SweaveOpts{}
\family default
in Sweave and it can be inserted in a \SpecialChar LyX
document by
\family sans
Insert\SpecialChar menuseparator
Custom Insets\SpecialChar menuseparator
Sweave Options
\family default
, or just use \SpecialChar TeX
code to write it (
\family sans
Insert\SpecialChar menuseparator
\SpecialChar TeX
Code
\family default
).
For example, we can set a global option
\family typewriter
echo=FALSE
\family default
in the beginning of a document to suppress all R code (by default, both
R code and its output will show up in the \SpecialChar LaTeX
document).
\end_layout
\begin_layout Standard
To write R code in \SpecialChar LyX
, you can first
\change_inserted 2047637253 1483898412
insert
\change_deleted 2047637253 1483898419
switch to the
\change_unchanged
\family typewriter
Chunk
\family default
\change_inserted 2047637253 1483898437
insets from
\family sans
Insert\SpecialChar menuseparator
Custom Insets\SpecialChar menuseparator
Chunk
\change_deleted 2047637253 1483898459
\family default
environment in the layout styles list (droplist in the top-left corner in
the toolbar)
\change_unchanged
, or you can simply open a \SpecialChar TeX
code environment and write Sweave code chunks
in it.
\change_deleted 2047637253 1483898024
The latter approach is recommended since it is more stable.
\change_inserted 2047637253 1483961753
However, \SpecialChar LyX
provides a summary of all the
\family typewriter
Chunk
\family default
insets in the document in the
\family sans
Navigate\SpecialChar menuseparator
Literate Programming
\family default
and
\family sans
View\SpecialChar menuseparator
Outline Pane
\family default
menus.
\change_unchanged
\end_layout
\begin_layout Standard
Some R options can be useful to the Sweave output as well, e.g.
\family typewriter
width
\family default
and
\family typewriter
useFancyQuotes
\family default
.
The former option can adjust the width of the output, and the latter can
avoid a common problem with quotes.
Users are encouraged to read the Sweave manual in R for more details.
\end_layout
\begin_layout Standard
\change_inserted 2047637253 1483897653
\begin_inset Flex Chunk
status open
\begin_layout Plain Layout
\change_inserted 2047637253 1483897653
\begin_inset Argument 1
status open
\begin_layout Plain Layout
\change_inserted 2047637253 1483897653
setup, keep.source=TRUE
\end_layout
\end_inset
\end_layout
\begin_layout Plain Layout
\change_inserted 2047637253 1483897653
## the option 'digits' can set the (approximate) number of digits
\end_layout
\begin_layout Plain Layout
\change_inserted 2047637253 1483897653
options(width = 70, useFancyQuotes = FALSE, digits = 4)
\end_layout
\end_inset
\end_layout
\begin_layout Standard
\change_inserted 2047637253 1483897653
\begin_inset Flex Chunk
status open
\begin_layout Plain Layout
\change_inserted 2047637253 1483897653
\begin_inset Argument 1
status open
\begin_layout Plain Layout
\change_inserted 2047637253 1483897653
sweave-manual, eval=FALSE, keep.source=TRUE
\end_layout
\end_inset
\end_layout
\begin_layout Plain Layout
\change_inserted 2047637253 1483897653
## view the Sweave vignette (requires R >= 2.13.0)
\end_layout
\begin_layout Plain Layout
\change_inserted 2047637253 1483897653
vignette("Sweave", package = "utils")
\end_layout
\end_inset
\change_unchanged
\end_layout
\begin_layout Standard
A simple example that will run in any S engine:
\end_layout
\begin_layout Standard
\change_inserted 2047637253 1483897659
\begin_inset Flex Chunk
status open
\begin_layout Plain Layout
\change_inserted 2047637253 1483897659
\begin_inset Argument 1
status open
\begin_layout Plain Layout
\change_inserted 2047637253 1483897659
print-integers, keep.source=TRUE
\end_layout
\end_inset
\end_layout
\begin_layout Plain Layout
\change_inserted 2047637253 1483897659
## the integers from 1 to 10 are
\end_layout
\begin_layout Plain Layout
\change_inserted 2047637253 1483897659
1:10
\end_layout
\end_inset
\end_layout
\begin_layout Standard
\change_inserted 2047637253 1483897659
\begin_inset Flex Chunk
status open
\begin_layout Plain Layout
\change_inserted 2047637253 1483897659
\begin_inset Argument 1
status open
\begin_layout Plain Layout
\change_inserted 2047637253 1483897659
hide-results, results=hide
\end_layout
\end_inset
\end_layout
\begin_layout Plain Layout
\change_inserted 2047637253 1483897659
## intentionally hide the output by setting results=hide
\end_layout
\begin_layout Plain Layout
\change_inserted 2047637253 1483897659
print(1:20)
\end_layout
\end_inset
\change_unchanged
\end_layout
\begin_layout Standard
We can also emulate a simple calculator:
\end_layout
\begin_layout Standard
\change_inserted 2047637253 1483897665
\begin_inset Flex Chunk
status open
\begin_layout Plain Layout
\change_inserted 2047637253 1483897665
\begin_inset Argument 1
status open
\begin_layout Plain Layout
\change_inserted 2047637253 1483897665
calculator
\end_layout
\end_inset
\end_layout
\begin_layout Plain Layout
\change_inserted 2047637253 1483897665
1 + pi
\end_layout
\begin_layout Plain Layout
\change_inserted 2047637253 1483897665
sin(pi/6)
\end_layout
\end_inset
\change_unchanged
\end_layout
\begin_layout Standard
Now we look at some Gaussian data:
\end_layout
\begin_layout Standard
\change_inserted 2047637253 1483897670
\begin_inset Flex Chunk
status open
\begin_layout Plain Layout
\change_inserted 2047637253 1483897670
\begin_inset Argument 1
status open
\begin_layout Plain Layout
\change_inserted 2047637253 1483897670
rnorm
\end_layout
\end_inset
\end_layout
\begin_layout Plain Layout
\change_inserted 2047637253 1483897670
set.seed(123) # for reproducibility
\end_layout
\begin_layout Plain Layout
\change_inserted 2047637253 1483897670
x <- rnorm(20)
\end_layout
\begin_layout Plain Layout
\change_inserted 2047637253 1483897670
print(x)
\end_layout
\begin_layout Plain Layout
\change_inserted 2047637253 1483897670
t1 <- t.test(x)
\end_layout
\end_inset
\change_unchanged
\end_layout
\begin_layout Standard
Note that we can easily integrate some numbers into standard text; this
is done with the command
\family typewriter
\backslash
Sexpr{}
\family default
, and the corresponding \SpecialChar LyX
menu is
\family sans
Insert\SpecialChar menuseparator
Custom Insets\SpecialChar menuseparator
S/R expression
\family default
, or alternatively just use \SpecialChar TeX
code.
For example, the third element of the vector
\family typewriter
x
\family default
is
\begin_inset Flex S/R expression
status collapsed
\begin_layout Plain Layout
x[3]
\end_layout
\end_inset
(i.e.
\family typewriter
x[3]
\family default
) and the
\begin_inset Formula $p$
\end_inset
-value of the test is
\begin_inset Flex S/R expression
status collapsed
\begin_layout Plain Layout
format.pval(t1$p.value)
\end_layout
\end_inset
.
You can round these numbers using functions like
\emph on
round()
\emph default
in R.
\end_layout
\begin_layout Standard
\family roman
\series medium
\shape up
\size normal
\emph off
\bar no
\noun off
\color none
Now we look at a summary of the
\family typewriter
\series default
\shape default
\size default
\emph default
\bar default
\noun default
\color inherit
iris
\family roman
\series medium
\shape up
\size normal
\emph off
\bar no
\noun off
\color none
dataset:
\end_layout
\begin_layout Standard
\change_inserted 2047637253 1483897677
\begin_inset Flex Chunk
status open
\begin_layout Plain Layout
\change_inserted 2047637253 1483897677
\begin_inset Argument 1
status open
\begin_layout Plain Layout
\change_inserted 2047637253 1483897677
iris-summary
\end_layout
\end_inset
\end_layout
\begin_layout Plain Layout
\change_inserted 2047637253 1483897677
summary(iris[,-5])
\end_layout
\end_inset
\change_unchanged
\end_layout
\begin_layout Standard
\begin_inset Float table
wide false
sideways false
status open
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
Quantiles of the first four variables in the
\family typewriter
iris
\family default
data.
\begin_inset CommandInset label
LatexCommand label
name "tab:xtable-demo"
\end_inset
\end_layout
\end_inset
\change_inserted 2047637253 1483897685
\begin_inset Flex Chunk
status open
\begin_layout Plain Layout
\change_inserted 2047637253 1483897698
\begin_inset Argument 1
status open
\begin_layout Plain Layout
\change_inserted 2047637253 1483897692
xtable-demo,results=tex,echo=FALSE
\change_unchanged
\end_layout
\end_inset
\end_layout
\begin_layout Plain Layout
\change_inserted 2047637253 1483897699
if (require('xtable')) {
\end_layout
\begin_layout Plain Layout
\change_inserted 2047637253 1483897699
print(xtable(sapply(iris[,-5], quantile)), floating=FALSE)
\end_layout
\begin_layout Plain Layout
\change_inserted 2047637253 1483897699
} else cat('the xtable package is not available! please install.packages("xtable"
)')
\change_unchanged
\end_layout
\end_inset
\change_unchanged
\end_layout
\end_inset
\end_layout
\begin_layout Standard
Usually people do not like such
\begin_inset Quotes eld
\end_inset
raw
\begin_inset Quotes erd
\end_inset
output, and we can polish these messy numbers with the
\series bold
xtable
\series default
package.
Table
\begin_inset CommandInset ref
LatexCommand ref
reference "tab:xtable-demo"
\end_inset
is an example demonstrating how to use the
\series bold
xtable
\series default
package with Sweave; note the chunk option
\family typewriter
results=tex
\family default
makes sure that the R output is written out as raw \SpecialChar LaTeX
code instead of being
wrapped in a special environment (
\family typewriter
Soutput
\family default
).
\end_layout
\begin_layout Standard
Figure
\begin_inset CommandInset ref
LatexCommand ref
reference "fig:iris-pairs"
\end_inset
and
\begin_inset CommandInset ref
LatexCommand ref
reference "fig:iris-boxplots"
\end_inset
are two simple examples of producing graphics output with Sweave.
\end_layout
\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status open
\begin_layout Plain Layout
\align center
\begin_inset Note Note
status open
\begin_layout Plain Layout
Both eps and pdf are set to true so that both latex and pdflatex work.
In practice, you would probably just choose one.
\end_layout
\end_inset
\end_layout
\begin_layout Plain Layout
\align center
\change_inserted 2047637253 1483897765
\begin_inset Flex Chunk
status open
\begin_layout Plain Layout
\change_inserted 2047637253 1483897772
\begin_inset Argument 1
status open
\begin_layout Plain Layout
\change_inserted 2047637253 1483897770
iris-pairs,fig=TRUE,width=4.5,height=4.5,eps=TRUE,pdf=TRUE
\change_unchanged
\end_layout
\end_inset
\end_layout
\begin_layout Plain Layout
\change_inserted 2047637253 1483897776
pairs(iris, col = iris$Species)
\change_unchanged
\end_layout
\end_inset
\change_unchanged
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
Scatter plot matrix of the
\family typewriter
iris
\family default
data.
\begin_inset CommandInset label
LatexCommand label
name "fig:iris-pairs"
\end_inset
\end_layout
\end_inset
\end_layout
\end_inset
\end_layout
\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status open
\begin_layout Plain Layout
\align center
\change_inserted 2047637253 1483897883
\begin_inset Flex Chunk
status open
\begin_layout Plain Layout
\change_inserted 2047637253 1483897883
\begin_inset Argument 1
status open
\begin_layout Plain Layout
\change_inserted 2047637253 1483897883
iris-boxplots,fig=TRUE,width=7,height=2,keep.source=F,eps=T,pdf=T
\end_layout
\end_inset
\end_layout
\begin_layout Plain Layout
\change_inserted 2047637253 1483897883
par(mar=c(4,5,.1,.3), las=1)
\end_layout
\begin_layout Plain Layout
\change_inserted 2047637253 1483897883
boxplot(Sepal.Length~Species,data=iris,horizontal=TRUE,xlab='Sepal.Length')
\end_layout
\end_inset
\change_unchanged
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
Boxplots of sepal length grouped by species.
\begin_inset CommandInset label
LatexCommand label
name "fig:iris-boxplots"
\end_inset
\end_layout
\end_inset
\end_layout
\end_inset
\end_layout
\begin_layout Standard
We can also export all the R code in an Sweave document as a single R script
(
\family sans
File\SpecialChar menuseparator
Export\SpecialChar menuseparator
R/S code
\family default
), which is done via
\family typewriter
R CMD Stangle
\family default
.
\change_inserted 2047637253 1483898877
\end_layout
\begin_layout Section
The
\family sans
Sweave
\family default
Module
\end_layout
\begin_layout Standard
The
\family sans
Sweave
\family default
module declares that a \SpecialChar LyX
document contains literate programming components
with R, so that \SpecialChar LyX
will handle such documents according to the specific converter
s (see the Customization manual).
The
\family sans
Sweave
\family default
module uses the
\family sans
sweave
\family default
converter, which essentially consists of an R script
\family sans
lyxsweave.R
\family default
under the
\family sans
scripts
\family default
directory of \SpecialChar LyX
.
This script takes an
\family sans
Rnw
\family default
document from \SpecialChar LyX
and call Sweave to process it to a \SpecialChar TeX
document, then \SpecialChar LyX
takes
care of the rest of work.
\end_layout
\begin_layout Standard
The converter from the
\family sans
sweave
\family default
format to \SpecialChar LaTeX
is a call to R via the command line as:
\end_layout
\begin_layout Standard
\begin_inset ERT
status open
\begin_layout Plain Layout
\backslash
begin{verbatim}
\end_layout
\begin_layout Plain Layout
Rscript --no-save --no-restore $$s/scripts/lyxsweave.R $$p$$i $$p$$o $$e
$$r
\end_layout
\begin_layout Plain Layout
\backslash
end{verbatim}
\end_layout
\end_inset
\end_layout
\begin_layout Standard
The \SpecialChar LyX
library directory
\family typewriter
$$s
\family default
can be found from the menu
\family sans
Help\SpecialChar menuseparator
About \SpecialChar LyX
\family default
.
All the rest of options passed to R are explained in the R script, and
the \SpecialChar LyX
Customization manual also has detailed explanations about
\family typewriter
$$i
\family default
,
\family typewriter
$$o
\family default
,
\family typewriter
$$e
\family default
and
\family typewriter
$$r
\family default
.
General users do not need to know clearly what they mean, but here we need
to explain a few issues in the R code:
\end_layout
\begin_layout Enumerate
the encoding string of the \SpecialChar LyX
document is passed to R as an command line option;
possible values are
\family typewriter
ISO-8859-15
\family default
and
\family typewriter
UTF-8
\family default
, etc.
The encoding is used for R to read the
\family sans
Rnw
\family default
document correctly.
\end_layout
\begin_layout Enumerate
the R code chunks in the Sweave document are executed under the directory
of the \SpecialChar LyX
document (if you are not sure, put
\family typewriter
getwd()
\family default
in a code chunk to see what is the current working directory).
In this case, you can put data files under the same directory and use relative
paths in R to guarantee reproducibility, i.e.
we do not need to write hard-coded paths which may not exist in other systems.
\end_layout
\begin_layout Enumerate
if \SpecialChar LaTeX
cannot find
\family sans
Sweave.sty
\family default
, this R script will copy it to the temporary directory automatically where
the \SpecialChar LaTeX
compilation takes place.
\end_layout
\begin_layout Enumerate
Sweave will use the filename of the Rnw file as the prefix string for the
graphics output by default; one known issue (
\begin_inset CommandInset href
LatexCommand href
name "#7551"
target "http://www.lyx.org/trac/ticket/7551"
\end_inset
) is that if the filename (without extension) contains dots, \SpecialChar LaTeX
can fail to
deal with such files in
\family typewriter
\backslash
includegraphics{}
\family default
.
Therefore, we have set the default value of the prefix to be the filename
with all the dots being replaced by
\begin_inset Quotes eld
\end_inset
-
\begin_inset Quotes erd
\end_inset
.
We can also solve this problem in Sweave directly: set the Sweave option
\family typewriter
prefix.string
\family default
to be a character string without dots, and this option will override the
default value.
\end_layout
\begin_layout Standard
We have pre-specified an option
\family typewriter
noae
\family default
for the Sweave package.
This option stops Sweave from loading these two packages:
\end_layout
\begin_layout Standard
\begin_inset ERT
status open
\begin_layout Plain Layout
\backslash
begin{verbatim}
\end_layout
\begin_layout Plain Layout
\backslash
RequirePackage[T1]{fontenc}
\end_layout
\begin_layout Plain Layout
\backslash
RequirePackage{ae}
\end_layout
\begin_layout Plain Layout
\backslash
end{verbatim}
\end_layout
\end_inset
\end_layout
\begin_layout Standard
\SpecialChar LyX
can deal with the font encoding by default, so there is no need to ask
Sweave to do this (furthermore, this may bring clashes of package options);
besides, the users can load the
\series bold
ae
\series default
package by themselves in the preamble if needed.
\end_layout
\begin_layout Section
Trouble Shooting
\end_layout
\begin_layout Standard
Since \SpecialChar LyX
2.0, we can see the detailed information during compilation via
\family sans
View\SpecialChar menuseparator
View Messages
\family default
.
This is extremely helpful for trouble shooting the process of R will
be shown in the message panel, and we will be able to know which chunk
goes wrong in cases of errors.
For example, when you compile this document, you can see messages like
below:
\end_layout
\begin_layout Standard
\begin_inset ERT
status open
\begin_layout Plain Layout
\backslash
begin{verbatim}
\end_layout
\begin_layout Plain Layout
17:58:47.868: Processing code chunks with options ...
\end_layout
\begin_layout Plain Layout
17:58:47.885: 1 : echo keep.source term verbatim (label=setup)
\end_layout
\begin_layout Plain Layout
17:58:47.889: 2 : echo keep.source (label=sweave-manual)
\end_layout
\begin_layout Plain Layout
17:58:47.908: 3 : echo keep.source term verbatim (label=print-integers)
\end_layout
\begin_layout Plain Layout
....
\end_layout
\begin_layout Plain Layout
17:58:47.941: Loading required package: xtable
\end_layout
\begin_layout Plain Layout
17:58:47.976: 9 : echo term verbatim pdf (label=iris-pairs)
\end_layout
\begin_layout Plain Layout
....
\end_layout
\begin_layout Plain Layout
17:58:48.116: You can now run (pdf)latex on 'sweave.tex'
\end_layout
\begin_layout Plain Layout
\backslash
end{verbatim}
\end_layout
\end_inset
\end_layout
\begin_layout Standard
The string after
\family typewriter
label=
\family default
is the chunk label.
If any chunk causes an error in R, you will see the error message here
immediately.
\end_layout
\begin_layout Standard
Another
\change_deleted 2047637253 1483899012
known
\change_unchanged
issue
\change_inserted 2047637253 1483898966
with the \SpecialChar TeX
code environment
\change_unchanged
is the Sweave code chunk may fail when we change the alignment of the chunk
paragraph in \SpecialChar LyX
(using
\family sans
Paragraph settings
\family default
), because \SpecialChar LyX
may add a macro like
\family typewriter
\backslash
centering{}
\family default
before the code chunk without adding a new line, which will lead to a code
chunk like this:
\end_layout
\begin_layout Standard
\begin_inset ERT
status open
\begin_layout Plain Layout
\backslash
begin{verbatim}
\end_layout
\begin_layout Plain Layout
\backslash
centering{}<<xtable-demo,results=tex,echo=FALSE>>=
\end_layout
\begin_layout Plain Layout
\backslash
end{verbatim}
\end_layout
\end_inset
\end_layout
\begin_layout Standard
This is not a legitimate Sweave code chunk, since
\family typewriter
<<>>=
\family default
must start in a new line with nothing before it.
\change_inserted 2047637253 1483899083
This does not happen when using the Chunk inset instead of the \SpecialChar TeX
code environmen
t.
\change_unchanged
\change_deleted 2047637253 1483898988
Therefore we recommend you to double check the real source code via
\family sans
View\SpecialChar menuseparator
View Source
\family default
when changing the alignment of a chunk paragraph, and make sure
\family typewriter
<<>>=
\family default
appears in a new line.
This explains why we manually added an empty line in the code chunk in
Table
\begin_inset CommandInset ref
LatexCommand ref
reference "tab:xtable-demo"
\end_inset
.
\change_unchanged
\end_layout
\begin_layout Section
Resources
\end_layout
\begin_layout Standard
The homepage of Sweave is at
\begin_inset Flex URL
status collapsed
\begin_layout Plain Layout
http://www.stat.uni-muenchen.de/~leisch/Sweave/
\end_layout
\end_inset
.
The CRAN task view on
\begin_inset Quotes eld
\end_inset
Reproducible Research
\begin_inset Quotes erd
\end_inset
has a list of Sweave-related packages which can be potentially useful;
see
\begin_inset Flex URL
status collapsed
\begin_layout Plain Layout
http://cran.r-project.org/web/views/ReproducibleResearch.html
\end_layout
\end_inset
.
Questions about \SpecialChar LyX
and Sweave can be posted to the \SpecialChar LyX
mailing list (
\begin_inset Flex URL
status collapsed
\begin_layout Plain Layout
http://www.lyx.org/MailingLists
\end_layout
\end_inset
).
More \SpecialChar LyX
examples are provided at
\begin_inset Flex URL
status collapsed
\begin_layout Plain Layout
https://github.com/yihui/lyx
\end_layout
\end_inset
.
\end_layout
\begin_layout Section
FAQ
\end_layout
\begin_layout Subsection
How to use Sweave with beamer?
\end_layout
\begin_layout Standard
You will end up with \SpecialChar LaTeX
errors if you use Sweave in normal beamer slides in
\SpecialChar LyX
; the reason is the beamer frame that contains verbatim R code.
The solution is to use a
\emph on
FragileFrame
\emph default
instead of a normal
\emph on
Frame
\emph default
, or to pass the option
\family typewriter
fragile
\family default
to the frame title via
\family sans
Insert\SpecialChar menuseparator
Frame Options
\family default
.
\end_layout
\begin_layout Subsection
Can I define my own R script to compile the Rnw document?
\end_layout
\begin_layout Standard
Yes, of course.
First you need to understand how the R script
\family typewriter
$$s
\family sans
/scripts/lyxsweave.R
\family default
works, which was introduced previously, and we recommend you to read the
R source code as well (on how R takes the paths and uses
\emph on
Sweave()
\emph default
to handle the Rnw document).
Then you put your customized
\family sans
lyxsweave.R
\family default
under the
\family sans
scripts
\family default
directory of your
\emph on
user directory
\emph default
(again, see
\family sans
Help\SpecialChar menuseparator
About \SpecialChar LyX
\family default
).
Note \SpecialChar LyX
will check the
\emph on
user directory
\emph default
before going to its own
\emph on
library directory
\emph default
; if an R script
\family sans
lyxsweave.R
\family default
is found in the user directory, it will be used.
It is not recommended to hack the script under the \SpecialChar LyX
library directory directly,
since updating \SpecialChar LyX
will override you modified script (the user directory will
not be affected).
\end_layout
\begin_layout Standard
Beside the support for the official Sweave in R, the
\series bold
knitr
\series default
package is also supported, which is an alternative tool to Sweave; the
corresponding module is named
\family sans
Rnw (knitr)
\family default
.
\end_layout
\end_body
\end_document