X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=lib%2Fexamples%2Fsweave.lyx;h=e11bcf9fef2771b9ad40ee4f70bd7358c508032e;hb=3fd0cc27d47d79513487e56a254c90e1794b6b0e;hp=e7b593ac9a1beff6149c4c8e31634b83851d3151;hpb=d7c4cb73ec61de6e2b221b9effe4cc02da486ca1;p=lyx.git diff --git a/lib/examples/sweave.lyx b/lib/examples/sweave.lyx index e7b593ac9a..e11bcf9fef 100644 --- a/lib/examples/sweave.lyx +++ b/lib/examples/sweave.lyx @@ -1,27 +1,43 @@ -#LyX 2.0 created this file. For more info see http://www.lyx.org/ -\lyxformat 413 +#LyX 2.3 created this file. For more info see http://www.lyx.org/ +\lyxformat 544 \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 default -\inputencoding auto +\language_package auto +\inputencoding default \fontencoding global -\font_roman default -\font_sans default -\font_typewriter default +\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 -\font_tt_scale 100 - +\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 @@ -31,26 +47,43 @@ sweave \spacing single \use_hyperref false \papersize default -\use_geometry false -\use_amsmath 1 -\use_esint 1 -\use_mhchem 1 -\use_mathdots 1 +\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 false +\suppress_date true +\justification true \use_refstyle 0 +\use_minted 0 \index Index \shortcut idx \color #008000 \end_index +\leftmargin 3cm +\topmargin 3cm +\rightmargin 3cm +\bottommargin 3cm \secnumdepth 3 \tocdepth 3 -\paragraph_separation skip -\defskip medskip -\quotes_language english +\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 @@ -63,25 +96,22 @@ sweave \begin_body -\begin_layout Title -A Test File -\end_layout +\begin_layout Standard +\begin_inset Note Note +status open -\begin_layout Author -Friedrich Leisch -\begin_inset Foot -status collapsed +\begin_layout Plain Layout +\begin_inset Flex Sweave Options +status open \begin_layout Plain Layout -LyX -\begin_inset Quotes eld -\end_inset -port -\begin_inset Quotes erd +prefix=TRUE,prefix.string=sweave-prefix,keep.source=FALSE +\end_layout + \end_inset - by Gregor Gorjanc + \end_layout \end_inset @@ -90,118 +120,242 @@ port \end_layout \begin_layout Standard -A simple example that will run in any S engine: The integers from 1 to 10 - are -\end_layout +\begin_inset ERT +status open -\begin_layout Chunk -<>= -\end_layout +\begin_layout Plain Layout -\begin_layout Chunk -1:10 +%% +\backslash +maxwidth was defined in the preamble; see document settings \end_layout -\begin_layout Chunk -<>= -\end_layout +\begin_layout Plain Layout -\begin_layout Chunk -print(1:20) -\end_layout -\begin_layout Chunk -@ % the above is just to ensure that 2 code chunks can follow each other +\backslash +setkeys{Gin}{width= +\backslash +maxwidth} \end_layout -\begin_layout Standard -We can also emulate a simple calculator: -\end_layout +\end_inset -\begin_layout Chunk \end_layout -\begin_layout Chunk -<>= +\begin_layout Title +Using Sweave with \SpecialChar LyX + \end_layout -\begin_layout Chunk -1 + 1 +\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 -\begin_layout Chunk -1 + pi +\end_inset + + +\begin_inset ERT +status collapsed + +\begin_layout Plain Layout + + +\backslash +and \end_layout -\begin_layout Chunk -sin(pi/2) +\end_inset + + Gregor Gorjanc +\begin_inset ERT +status collapsed + +\begin_layout Plain Layout + + +\backslash +and \end_layout -\begin_layout Chunk -@ +\end_inset + + Jean-Marc Lasgouttes \end_layout \begin_layout Standard -Now we look at Gaussian data: -\end_layout +Sweave is a tool in the R language ( +\begin_inset Flex URL +status collapsed -\begin_layout Chunk +\begin_layout Plain Layout +http://www.r-project.org \end_layout -\begin_layout Chunk -<<>>= -\end_layout +\end_inset -\begin_layout Chunk -library(stats) +) 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 Chunk -x <- rnorm(20) +\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 -\begin_layout Chunk -print(x) +\end_inset + +. \end_layout -\begin_layout Chunk -print(t1 <- t.test(x)) +\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 Chunk -@ +\begin_layout Section +System Requirements \end_layout \begin_layout Standard -Note that we can easily integrate some numbers into standard text: The third - element of vector +The +\family sans +Sweave +\family default + module depends on the executable \family typewriter -x +Rscript \family default - is -\begin_inset Flex S/R expression +, 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 -x[3] +https://github.com/yihui/lyx \end_layout \end_inset -, the -\begin_inset Formula $p$ + 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 --value of the test is -\begin_inset Flex S/R expression -status collapsed + +\end_layout \begin_layout Plain Layout -format.pval(t1$p.value) +R.home('bin') \end_layout \end_inset @@ -210,26 +364,48 @@ format.pval(t1$p.value) \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 famous iris dataset, and we want to see - the commands in the code chunks: +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 Sweave Options +\begin_inset Flex Chunk +status open + +\begin_layout Plain Layout + +\begin_inset Argument 1 status open \begin_layout Plain Layout -echo=true,keep.source=true +sweave-sty,eval=FALSE \end_layout \end_inset @@ -237,69 +413,161 @@ echo=true,keep.source=true \end_layout -\begin_layout Chunk -<>= -\end_layout +\begin_layout Plain Layout -\begin_layout Chunk -# A comment +file.path(R.home('share'), 'texmf', 'tex', 'latex') \end_layout -\begin_layout Chunk -data(iris) +\end_inset + + \end_layout -\begin_layout Chunk -summary(iris) +\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 Chunk -@ % def +\begin_layout Section +Sweave Examples \end_layout \begin_layout Standard -\begin_inset Float figure -placement tbph -wide false -sideways false -status collapsed - -\begin_layout Chunk +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 Chunk +\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 Chunk -\align center +\begin_layout Standard +\begin_inset Flex Chunk +status open -<>= -\begin_inset Newline newline -\end_inset +\begin_layout Plain Layout -library(graphics) -\begin_inset Newline newline -\end_inset +\begin_inset Argument 1 +status open + +\begin_layout Plain Layout + +setup, keep.source=TRUE +\end_layout -pairs(iris) -\begin_inset Newline newline \end_inset -@ + \end_layout \begin_layout Plain Layout -\begin_inset Caption -\begin_layout Plain Layout -Pairs plot of the iris data. +## the option 'digits' can set the (approximate) number of digits \end_layout -\end_inset - +\begin_layout Plain Layout +options(width = 70, useFancyQuotes = FALSE, digits = 4) \end_layout \end_inset @@ -308,31 +576,32 @@ Pairs plot of the iris data. \end_layout \begin_layout Standard -\begin_inset Float figure -placement tbph -wide false -sideways false -status collapsed +\begin_inset Flex Chunk +status open -\begin_layout Chunk -\align center +\begin_layout Plain Layout -<>= -\begin_inset Newline newline -\end_inset +\begin_inset Argument 1 +status open + +\begin_layout Plain Layout + +sweave-manual, eval=FALSE, keep.source=TRUE +\end_layout -boxplot(Sepal.Length~Species,data=iris) -\begin_inset Newline newline \end_inset -@ + \end_layout \begin_layout Plain Layout -\begin_inset Caption + +## view the Sweave vignette (requires R >= 2.13.0) +\end_layout \begin_layout Plain Layout -Boxplot of sepal length grouped by species. + +vignette("Sweave", package = "utils") \end_layout \end_inset @@ -340,48 +609,71 @@ Boxplot of sepal length grouped by species. \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 Chunk -<>= +\begin_layout Plain Layout + +## the integers from 1 to 10 are \end_layout -\begin_layout Chunk -function.that.comes.only.with.Splus(x) +\begin_layout Plain Layout + +1:10 \end_layout -\begin_layout Chunk -@ +\end_inset + + \end_layout \begin_layout Standard -\begin_inset Float figure -wide false -sideways false +\begin_inset Flex Chunk status open -\begin_layout Chunk -\align center +\begin_layout Plain Layout -<>= -\begin_inset Newline newline -\end_inset +\begin_inset Argument 1 +status open + +\begin_layout Plain Layout + +hide-results, results=hide +\end_layout -boxplot(Sepal.Length~Species,data=iris) -\begin_inset Newline newline \end_inset -@ + \end_layout \begin_layout Plain Layout -\begin_inset Caption + +## intentionally hide the output by setting results=hide +\end_layout \begin_layout Plain Layout -Boxplot of sepal length grouped by species + +print(1:20) \end_layout \end_inset @@ -389,10 +681,1087 @@ Boxplot of sepal length grouped by species \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{}<>= +\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