mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-21 05:00:59 +00:00
1772 lines
28 KiB
Plaintext
1772 lines
28 KiB
Plaintext
#LyX 2.4 created this file. For more info see https://www.lyx.org/
|
||
\lyxformat 600
|
||
\begin_document
|
||
\begin_header
|
||
\save_transient_properties true
|
||
\origin /systemlyxdir/examples/Modules/
|
||
\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 no
|
||
\language english
|
||
\language_package auto
|
||
\inputencoding utf8
|
||
\fontencoding auto
|
||
\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_sans_osf false
|
||
\font_typewriter_osf false
|
||
\font_roman_osf false
|
||
\font_sf_scale 100 100
|
||
\font_tt_scale 100 100
|
||
\use_microtype false
|
||
\use_dash_ligatures false
|
||
\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 1
|
||
\use_package esint 1
|
||
\use_package mathdots 1
|
||
\use_package mathtools 1
|
||
\use_package mhchem 1
|
||
\use_package stackrel 1
|
||
\use_package stmaryrd 1
|
||
\use_package undertilde 1
|
||
\cite_engine basic
|
||
\cite_engine_type default
|
||
\biblio_style plain
|
||
\use_bibtopic false
|
||
\use_indices false
|
||
\paperorientation portrait
|
||
\suppress_date true
|
||
\justification true
|
||
\use_refstyle 0
|
||
\use_minted 0
|
||
\use_lineno 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
|
||
\is_math_indent 0
|
||
\math_numbering_side default
|
||
\quotes_style english
|
||
\dynamic_quotes 0
|
||
\papercolumns 1
|
||
\papersides 1
|
||
\paperpagestyle default
|
||
\tracking_changes false
|
||
\postpone_fragile_content false
|
||
\output_changes false
|
||
\html_math_output 0
|
||
\html_css_as_file 0
|
||
\html_be_strict false
|
||
\end_header
|
||
|
||
\begin_body
|
||
|
||
\begin_layout Standard
|
||
\begin_inset Note Note
|
||
status open
|
||
|
||
\begin_layout Plain Layout
|
||
\begin_inset Flex Sweave Options
|
||
status open
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
prefix=TRUE,prefix.string=sweave-prefix,keep.source=FALSE
|
||
\end_layout
|
||
|
||
\end_inset
|
||
|
||
|
||
\end_layout
|
||
|
||
\end_inset
|
||
|
||
|
||
\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:"
|
||
literal "false"
|
||
|
||
\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
|
||
|
||
.
|
||
\end_layout
|
||
|
||
\begin_layout Standard
|
||
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.
|
||
\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
|
||
\begin_inset Flex Chunk
|
||
status open
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
\begin_inset Argument 1
|
||
status open
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
where-is-R-bin,eval=FALSE
|
||
\end_layout
|
||
|
||
\end_inset
|
||
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
R.home('bin')
|
||
\end_layout
|
||
|
||
\end_inset
|
||
|
||
|
||
\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
|
||
\begin_inset Flex Chunk
|
||
status open
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
\begin_inset Argument 1
|
||
status open
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
sweave-sty,eval=FALSE
|
||
\end_layout
|
||
|
||
\end_inset
|
||
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
file.path(R.home('share'), 'texmf', 'tex', 'latex')
|
||
\end_layout
|
||
|
||
\end_inset
|
||
|
||
|
||
\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 insert
|
||
\family typewriter
|
||
Chunk
|
||
\family default
|
||
insets from
|
||
\family sans
|
||
Insert\SpecialChar menuseparator
|
||
Custom Insets\SpecialChar menuseparator
|
||
Chunk
|
||
\family default
|
||
, or you can simply open a \SpecialChar TeX
|
||
code environment and write Sweave code chunks
|
||
in it.
|
||
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.
|
||
\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
|
||
\begin_inset Flex Chunk
|
||
status open
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
\begin_inset Argument 1
|
||
status open
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
setup, keep.source=TRUE
|
||
\end_layout
|
||
|
||
\end_inset
|
||
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
## the option 'digits' can set the (approximate) number of digits
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
options(width = 70, useFancyQuotes = FALSE, digits = 4)
|
||
\end_layout
|
||
|
||
\end_inset
|
||
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Standard
|
||
\begin_inset Flex Chunk
|
||
status open
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
\begin_inset Argument 1
|
||
status open
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
sweave-manual, eval=FALSE, keep.source=TRUE
|
||
\end_layout
|
||
|
||
\end_inset
|
||
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
## view the Sweave vignette (requires R >= 2.13.0)
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
vignette("Sweave", package = "utils")
|
||
\end_layout
|
||
|
||
\end_inset
|
||
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Standard
|
||
A simple example that will run in any S engine:
|
||
\end_layout
|
||
|
||
\begin_layout Standard
|
||
\begin_inset Flex Chunk
|
||
status open
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
\begin_inset Argument 1
|
||
status open
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
print-integers, keep.source=TRUE
|
||
\end_layout
|
||
|
||
\end_inset
|
||
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
## the integers from 1 to 10 are
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
1:10
|
||
\end_layout
|
||
|
||
\end_inset
|
||
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Standard
|
||
\begin_inset Flex Chunk
|
||
status open
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
\begin_inset Argument 1
|
||
status open
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
hide-results, results=hide
|
||
\end_layout
|
||
|
||
\end_inset
|
||
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
## intentionally hide the output by setting results=hide
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
print(1:20)
|
||
\end_layout
|
||
|
||
\end_inset
|
||
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Standard
|
||
We can also emulate a simple calculator:
|
||
\end_layout
|
||
|
||
\begin_layout Standard
|
||
\begin_inset Flex Chunk
|
||
status open
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
\begin_inset Argument 1
|
||
status open
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
calculator
|
||
\end_layout
|
||
|
||
\end_inset
|
||
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
1 + pi
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
sin(pi/6)
|
||
\end_layout
|
||
|
||
\end_inset
|
||
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Standard
|
||
Now we look at some Gaussian data:
|
||
\end_layout
|
||
|
||
\begin_layout Standard
|
||
\begin_inset Flex Chunk
|
||
status open
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
\begin_inset Argument 1
|
||
status open
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
rnorm
|
||
\end_layout
|
||
|
||
\end_inset
|
||
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
set.seed(123) # for reproducibility
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
x <- rnorm(20)
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
print(x)
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
t1 <- t.test(x)
|
||
\end_layout
|
||
|
||
\end_inset
|
||
|
||
|
||
\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
|
||
\begin_inset Flex Chunk
|
||
status open
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
\begin_inset Argument 1
|
||
status open
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
iris-summary
|
||
\end_layout
|
||
|
||
\end_inset
|
||
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
summary(iris[,-5])
|
||
\end_layout
|
||
|
||
\end_inset
|
||
|
||
|
||
\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
|
||
|
||
|
||
\begin_inset Flex Chunk
|
||
status open
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
\begin_inset Argument 1
|
||
status open
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
xtable-demo,results=tex,echo=FALSE
|
||
\end_layout
|
||
|
||
\end_inset
|
||
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
if (require('xtable')) {
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
print(xtable(sapply(iris[,-5], quantile)), floating=FALSE)
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
} else cat('the xtable package is not available! please install.packages("xtable"
|
||
)')
|
||
\end_layout
|
||
|
||
\end_inset
|
||
|
||
|
||
\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
|
||
\begin_inset Flex Chunk
|
||
status open
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
\begin_inset Argument 1
|
||
status open
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
iris-pairs,fig=TRUE,width=4.5,height=4.5,eps=TRUE,pdf=TRUE
|
||
\end_layout
|
||
|
||
\end_inset
|
||
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
pairs(iris, col = iris$Species)
|
||
\end_layout
|
||
|
||
\end_inset
|
||
|
||
|
||
\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
|
||
\begin_inset Flex Chunk
|
||
status open
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
\begin_inset Argument 1
|
||
status open
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
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
|
||
|
||
par(mar=c(4,5,.1,.3), las=1)
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
boxplot(Sepal.Length~Species,data=iris,horizontal=TRUE,xlab='Sepal.Length')
|
||
\end_layout
|
||
|
||
\end_inset
|
||
|
||
|
||
\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
|
||
.
|
||
\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 "https://www.lyx.org/trac/ticket/7551"
|
||
literal "false"
|
||
|
||
\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 issue with the \SpecialChar TeX
|
||
code environment 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.
|
||
This does not happen when using the Chunk inset instead of the \SpecialChar TeX
|
||
code environmen
|
||
t.
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Section
|
||
Resources
|
||
\end_layout
|
||
|
||
\begin_layout Standard
|
||
The user manual of Sweave is at
|
||
\begin_inset Flex URL
|
||
status collapsed
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
https://stat.ethz.ch/R-manual/R-devel/library/utils/doc/Sweave.pdf
|
||
\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
|
||
|
||
https://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
|