mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-26 06:15:16 +00:00
1851 lines
28 KiB
Plaintext
1851 lines
28 KiB
Plaintext
#LyX 2.4 created this file. For more info see https://www.lyx.org/
|
||
\lyxformat 620
|
||
\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_roman_osf false
|
||
\font_sans_osf false
|
||
\font_typewriter_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
|
||
\tablestyle default
|
||
\tracking_changes false
|
||
\output_changes false
|
||
\change_bars false
|
||
\postpone_fragile_content false
|
||
\html_math_output 0
|
||
\html_css_as_file 0
|
||
\html_be_strict false
|
||
\docbook_table_output 0
|
||
\docbook_mathml_prefix 1
|
||
\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
|
||
placement document
|
||
alignment document
|
||
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"
|
||
nolink "false"
|
||
|
||
\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"
|
||
nolink "false"
|
||
|
||
\end_inset
|
||
|
||
and
|
||
\begin_inset CommandInset ref
|
||
LatexCommand ref
|
||
reference "fig:iris-boxplots"
|
||
nolink "false"
|
||
|
||
\end_inset
|
||
|
||
are two simple examples of producing graphics output with Sweave.
|
||
\end_layout
|
||
|
||
\begin_layout Standard
|
||
\begin_inset Float figure
|
||
placement document
|
||
alignment document
|
||
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
|
||
placement document
|
||
alignment document
|
||
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 converters (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 environment.
|
||
|
||
\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
|