Sweave Templates
Using LaTeX Style Sweavel | Output
The most advanced way to use
Sweave is through the R package
SweaveListingUtils (see the third approach on this page) which does things such as listing all the functions in all the attached packages and highlighting these function names in all R code listings.
SweaveListingUtils uses LaTeX's
listings package to pretty-print R code. The
Sweavel.sty package for LaTeX uses
listings similarly but provides an easier way to customize the output and does not need you to run an R function to set this up as
SweaveListingUtils does.
Sweavel substitutes LaTeX
listings package commands for the usual
Sweave Sinput and
Soutput environments. Having
\usepackage{Sweavel} in your
.Rnw file will cause
Sweave to not use its default style package
Sweave.sty. To install
Sweavel.sty on your Linux/Unix system, download the
.sty file and issue the following shell commands:
sudo cp ~/doc/latex/texinput/Sweavel.sty /usr/share/R/share/texmf/.
sudo mktexlsr
Alternatively, copy the
.sty file to your project directory, especially if you want to customize it and have the local copy override any system copy.
With this approach, you can easily have LaTeX commands inside your R code by enclosing the command inside (* *). This is particularly useful for symbolic references to sections, pages, figures, and tables without the document. Here is a template using this approach.
pdf output is found at the link above. There is a symbolic link to a section in the document in an R comment.
%Usage: R CMD Sweave template3.Rnw = Sweave template3
% rubber -d template3
% To get .R file: R CMD Stangle template3.Rnw = Stangle template3
\documentclass{article}
\usepackage{relsize,setspace} % used by latex(describe( ))
\usepackage{url} % used in bibliography
\usepackage[superscript,nomove]{cite} % use if \cite is used and superscripts wanted
% Remove nomove if you want superscripts after punctuation in citations
\usepackage{lscape} % for landscape mode tables
\textwidth 6.75in % set dimensions before fancyhdr
\textheight 9.25in
\topmargin -.875in
\oddsidemargin -.125in
\evensidemargin -.125in
\usepackage{fancyhdr} % this and next line are for fancy headers/footers
\pagestyle{fancy}
\newcommand{\bc}{\begin{center}} % abbreviate
\newcommand{\ec}{\end{center}}
\newcommand{\code}[1]{{\smaller\texttt{#1}}}
\usepackage{Sweavel}
% Uncomment some of the following to use some alternatives:
% \def\Sweavesize{\normalsize} (changes size of typeset R code and output)
% \def\Rcolor{\color{black}}
% \def\Routcolor{\color{green}}
% \def\Rcommentcolor{\color{red}}
% To change background color or R code and/or output, use e.g.:
% \def\Rbackground{\color{white}}
% \def\Routbackground{\color{white}}
% To use rgb specifications use \color[rgb]{ , , }
% To use gray scale use e.g. \color[gray]{0.5}
% If you change any of these after the first chunk is produced, the
% changes will have effect only for the next chunk.
\SweaveOpts{keep.source=TRUE}
% To produce both postscript and pdf graphics, remove the eps and pdf
% parameters in the next line. Set default plot size to 5 x 3.5 in.
\SweaveOpts{prefix.string=graphics/plot, eps = FALSE, pdf = TRUE}
\SweaveOpts{width=5, height=3.5}
% To omit code and its output throughout, add \SweaveOpts{echo=f, results=hide}
\title{An Analysis}
\author{Jane Doe\\\smaller Department of Biostatistics\\\smaller Vanderbilt University School of Medicine}
\begin{document}
\maketitle
% Use the following 3 lines for long reports needing navigation
\tableofcontents
%\listoftables
%\listoffigures % not used unless figure environments used
<<echo=f>>=
spar <- function(mar=c(3.25+bot-.45*multi,3.5+left,.5+top+.25*multi,.5+rt),
lwd = if(multi)1 else 1.75,
mgp = if(multi) c(1.5, .365, 0) else c(2.4-.4, 0.475, 0),
tcl = if(multi)-0.25 else -0.4,
bot=0, left=0, top=0, rt=0, ps=14,
mfrow=NULL, ...)
{
multi <- length(mfrow) > 0
par(mar=mar, lwd=lwd, mgp=mgp, tcl=tcl, ...)
if(multi) par(mfrow=mfrow)
}
options(SweaveHooks=list(fig=spar)) # run spar() before every plot
options(prompt=' ',continue=' ') # remove prompt characters at start of lines
options(Hverbose=FALSE) # Silently load Hmisc and Design
require(Design)
# The following line is only needed if the prselect function is needed.
# prselect will be added to the next version of Hmisc. It allows for
# selective deletion of R output in the report.
source('http://biostat.mc.vanderbilt.edu/cgi-bin/viewvc.cgi/*checkout*/Hmisc/trunk/R/Misc.s')
@
\section{Descriptive Statistics}\label{descStats}
<<results=tex>>=
getHdata(support) # Use Hmisc/getHdata to get dataset from VU DataSets wiki
d <- subset(support, select=c(age,sex,race,edu,income,hospdead,slos,dzgroup,
meanbp,hrt))
latex(describe(d), file='')
@
Race is reduced to three levels (white, black, OTHER) because of low
frequencies in other levels (minimum relative frequency set to 0.05).
<<>>=
d <- upData(d,
race = combine.levels(race, minlev = 0.05))
@
\section{Redundancy Analysis and Variable Interrelationships}
\bc
% Note: giving a chunk name to each code chunk that produces a figure
% makes it easy to know which plots to send to a collaborator, and
% will not allow numbered orphan plots to be left when code chunks are
% inserted into the file. The default in Sweave is for plots to be
% numbered by the chunks producing them.
<<vc,fig=t>>=
v <- varclus(~., data=d)
plot(v)
redun(~age+sex+race+edu+income+dzgroup+meanbp+hrt, data=d)
# Alternative: redun(~., data=subset(d, select=-c(hospdead,slos)))
@
\ec
Note that the clustering of black with white is not interesting; this just means that these are mutually exclusive higher frequency categories, causing them to be negatively correlated.
\section{Logistic Regression Model}
Here we fit a tentative binary logistic regression model. The
coefficients are not very useful so they are not printed.
<<z,eval=f,echo=t>>=
dd <- datadist(d); options(datadist='dd')
f <- lrm(hospdead ~ rcs(age,4) + sex + race + dzgroup + rcs(meanbp,5),
data=d) # see Section (*\ref{descStats}*) for descriptive statistics
f
<<echo=f>>=
z <- capture.output( {
<<z>>
} )
prselect(z, 'S.E.') # keep only summary stats; or:
# prselect(z, stop='S.E.', j=-1) # keep only coefficients
@
<<results=tex>>=
latex(anova(f), where='h', file='') # can also try where='htbp'
@
\section{Test Calculations}
\bc
<<testp,fig=t>>=
x <- 3; y <- 2
if(x <= y) 'this' else 'that'
if(y >= x) 'that' else 'this'
x^y
plot(runif(20),runif(20))
@
\ec
\section{Computing Environment}
These analyses were done using the following versions of R\cite{Rsystem}, the
operating system, and add-on packages \code{Hmisc}\cite{Hmisc},
\code{Design}\cite{Design}, and others:
<<echo=f,results=tex>>=
s <- toLatex(sessionInfo())
cat(s[-grep('Locale',s)], sep='\n')
@
% Note: Rsystem reference is defined inside feh.bib. It is a slightly
% edited version of the output of citation().
\bibliography{/home/harrelfe/bib/feh.bib}
\bibliographystyle{unsrt}
% Use \bibliographystyle{abbrv} if want references alphabetized
\end{document}
Using LaTeX Style Sweavev and Perl Script s2latx.pl | Output
To have the most full control over pretty printing of
R code, including allowing for symbolic references to figure numbers, sections, and page numbers from the
LaTeX document inside comments in the R code [note: a new version of
SweaveListingUtils now allows this, and the material below will be updated to reflect that], use the
Sweavev LaTeX style and the Perl script
s2latx.pl.
Sweavev also makes nice boxes around
R output. The Perl script is executed by LaTeX or
pdflatex to pretty-print the R code. By default,
Sweavev uses the same colors for code, comments, and
R output as used by
SweaveListingUtils (see below). Specify
\usepackage[bw]{Sweavev} to only use black and white. After downloading the style file, run the following commands to make it available to all your LaTeX applications:
sudo cp Sweavev.sty /usr/share/R/share/texmf/.
sudo mktexlsr
Save the
s2latx script as
~/bin/s2latx.pl or in
/usr/local/bin using
sudo. Since the
Perl script is executed by LaTeX, you need to invoke
latex or
pdflatex using the commands
latex --shell-escape myfile or
pdflatex --shell-escape myfile.
rubber (see below) will not work with
--shell-escape.
Here is a template using this approach.
%Usage: R CMD Sweave templatep.Rnw = Sweave templatep
% Runs model.Rnw to produce template.tex and graphics files in graphics/
% latex --shell-escape or pdflatex --shell-escape template; bibtex
% template; latex or pdflatex --shell-escape template
% (leave out last two steps if there are no bibliographic citations)
% To get .R file: Stangle template
\documentclass{article}
\usepackage{relsize,setspace} % used by latex(describe( ))
\usepackage{url} % might be used in bibliography
\usepackage[superscript,nomove]{cite} % use if \cite is used and superscripts wanted
% Remove nomove if you want superscripts after punctuation in citations
\usepackage{lscape} % for landscape mode tables
\textwidth 6.75in % set dimensions before fancyhdr
\textheight 9.25in
\topmargin -.875in
\oddsidemargin -.125in
\evensidemargin -.125in
\usepackage{fancyhdr} % this and next line are for fancy headers/footers
\pagestyle{fancy}
\newcommand{\bc}{\begin{center}} % abbreviate
\newcommand{\ec}{\end{center}}
\newcommand{\code}[1]{\smaller\texttt{#1}}
\usepackage{Sweavev} % note the letter l at the end
% use \usepackage[bw]{Sweavev} for black&white
\SweaveOpts{keep.source=TRUE}
\title{An Analysis}
\author{Jane Doe\\\smaller Department of Biostatistics\\\smaller Vanderbilt University School of Medicine}
\begin{document}
<<echo=f>>=
spar <- function(mar=c(3.25+bot-.45*multi,3.5+left,.5+top+.25*multi,.5+rt),
lwd = if(multi)1 else 1.75,
mgp = if(multi) c(1.5, .365, 0) else c(2.4-.4, 0.475, 0),
tcl = if(multi)-0.25 else -0.4,
bot=0, left=0, top=0, rt=0, ps=14,
mfrow=NULL, ...)
{
multi <- length(mfrow) > 0
par(mar=mar, lwd=lwd, mgp=mgp, tcl=tcl, ...)
if(multi) par(mfrow=mfrow)
}
options(SweaveHooks=list(fig=spar)) # run spar() before every plot
options(prompt=' ',continue=' ') # remove prompt characters at start of lines
@
% To produce both postscript and pdf graphics, remove the eps and pdf
% parameters in the next line. Set default plot size to 6x4 in.
\SweaveOpts{prefix.string=graphics/plot, eps = FALSE, pdf = TRUE}
\SweaveOpts{width=6, height=4}
% \setkeys{Gin}{width=0.85\textwidth} # would override height and width
\maketitle
% Use the following 3 lines for long reports needing navigation
\tableofcontents
%\listoftables
%\listoffigures % not used unless figure environments used
% results=tex below makes SweaveListingUtils highlight function names in
% Hmisc and Design
<<echo=F,results=tex>>=
options(Hverbose=FALSE) # Silently load Hmisc and rms
require(rms)
# The following line is only needed if the prselect function is needed.
# prselect will be added to the next version of Hmisc. It allows for
# selective deletion of R output in the report.
source('http://biostat.mc.vanderbilt.edu/cgi-bin/viewvc.cgi/*checkout*/Hmisc/trunk/R/Misc.s')
@
\section{Descriptive Statistics}
<<results=tex>>=
getHdata(support) # Use Hmisc/getHdata to get dataset from VU DataSets wiki
d <- subset(support, select=c(age,sex,race,edu,income,hospdead,slos,dzgroup,
meanbp,hrt))
latex(describe(d), file='')
@
Race is reduced to three levels (white, black, OTHER) because of low
frequencies in other levels (minimum relative frequency set to 0.05).
<<>>=
d <- upData(d,
race = combine.levels(race, minlev = 0.05))
@
\section{Redundancy Analysis and Variable Interrelationships}
\bc
% Note: giving a chunk name to each code chunk that produces a figure
% makes it easy to know which plots to send to a collaborator, and
% will not allow numbered orphan plots to be left when code chunks are
% inserted into the file. The default in Sweave is for plots to be
% numbered by the chunks producing them.
<<vc,fig=T>>=
v <- varclus(~., data=d)
plot(v)
redun(~age+sex+race+edu+income+dzgroup+meanbp+hrt, data=d)
# Alternative: redun(~., data=subset(d, select=-c(hospdead,slos)))
@
\ec
Note that the clustering of black with white is not interesting; this just means that these are mutually exclusive higher frequency categories, causing them to be negatively correlated.
\section{Logistic Regression Model}
Here we fit a tentative binary logistic regression model. The
coefficients are not very useful so they are not printed.
<<z,eval=FALSE,echo=T>>=
dd <- datadist(d); options(datadist='dd')
f <- lrm(hospdead ~ rcs(age,4) + sex + race + dzgroup + rcs(meanbp,5),
data=d)
f
<<echo=F>>=
z <- capture.output( {
<<z>>
} )
prselect(z, 'S.E.') # keep only summary stats; or:
# prselect(z, stop='S.E.', j=-1) # keep only coefficients
@
<<results=tex>>=
latex(anova(f), where='h', file='') # can also try where='htbp'
@
\section{Test Calculations}
\bc
<<testp,fig=T>>=
x <- 3; y <- 2
if(x <= y) 'this' else 'that'
if(y >= x) 'that' else 'this'
x^y
plot(runif(20),runif(20))
@
\ec
\section{Computing Environment}
These analyses were done using the following versions of R\cite{Rsystem}, the
operating system, and add-on packages \code{Hmisc}\cite{Hmisc},
\code{Design}\cite{Design}, and others:
<<echo=F,results=tex>>=
s <- toLatex(sessionInfo())
cat(s[-grep('Locale',s)], sep='\n')
@
%Input more results
\input{template2}
% Note: Rsystem reference is defined inside feh.bib. It is a slightly
% edited version of the output of citation().
\bibliography{/home/harrelfe/bib/feh.bib}
\bibliographystyle{unsrt}
% Use \bibliographystyle{abbrv} if want references alphabetized
\end{document}
Using SweaveListingUtils | Output
This template assumes you have installed the R package
SweaveListingUtils which allows you to greatly beautify how the R code, comments, and output are typeset. The LaTeX package
listings is assumed to be installed on your system (it is on most). Note that there is a Linux package
rubber you can install that automatically runs
latex and
bibtex as many times as needed. Run it using for example
rubber model to compile
model.tex. Use
rubber -d model to run
pdflatex in place of
latex.
%Usage: R CMD Sweave template.Rnw
% Runs model.Rnw to produce template.tex and graphics files in graphics/
% latex or pdflatex template; bibtex template; latex or pdflatex template
% (leave out last two steps if there are no bibliographic citations,
% or automate with rubber -d template)
% To get .R file: Stangle template
\documentclass{article}
\usepackage{relsize,setspace} % used by latex(describe( ))
\usepackage{url} % used in bibliography
\usepackage[superscript,nomove]{cite} % use if \cite is used and superscripts wanted
% Remove nomove if you want superscripts after punctuation in citations
\usepackage{lscape} % for landscape mode tables
\textwidth 6.75in % set dimensions before fancyhdr
\textheight 9.25in
\topmargin -.875in
\oddsidemargin -.125in
\evensidemargin -.125in
\usepackage{fancyhdr} % this and next line are for fancy headers/footers
\pagestyle{fancy}
\newcommand{\bc}{\begin{center}} % abbreviate
\newcommand{\ec}{\end{center}}
% The next 10 lines are used if you are beautifying R code and output with SweaveListingUtils
\usepackage{listings}
\usepackage[nogin]{Sweave}
% Use nogin to respect height and width as specified below, otherwise all widths will be changed to 80% of the text width
\SweaveOpts{keep.source=TRUE}
<<<SweaveListingspreparations, results=tex, echo=FALSE>>=
require(SweaveListingUtils)
SweaveListingPreparations()
spar <- function(mar=c(3.25+bot-.45*multi,3.5+left,.5+top+.25*multi,.5+rt),
lwd = if(multi)1 else 1.75,
mgp = if(multi) c(1.5, .365, 0) else c(2, 0.475, 0),
tcl = if(multi)-0.25 else -0.4,
bot=0, left=0, top=0, rt=0, ps=14,
mfrow=NULL, ...)
{
multi <- length(mfrow) > 0
par(mar=mar, lwd=lwd, mgp=mgp, tcl=tcl, ps=ps, ...)
if(multi) par(mfrow=mfrow)
}
options(SweaveHooks=list(fig=spar)) # run spar() before every plot
options(prompt=' ',continue=' ') # remove prompt characters at start of lines
@
% To control colors, use something like the following:
% r <- function(x) col2rgb(x)/255
% SweaveListingPreparations(Rcolor=r('green'), Rcomment=r('red'), Rout=r('blue'))
% For b+w documents use Rcolor=r('black'),Rcomment=r(gray(.3)),Rout=r('black')
\title{An Analysis}
\author{Jane Doe\\\smaller Department of Biostatistics\\\smaller Vanderbilt University School of Medicine}
\begin{document}
% To produce both postscript and pdf graphics, remove the eps and pdf
% parameters in the next line. Set default plot size to 6x4 in.
\SweaveOpts{prefix.string=graphics/plot, eps = FALSE, pdf = TRUE}
\SweaveOpts{width=6, height=4}
%\setkeys{Gin}{width=0.85\textwidth} will undo width=6, height=4
\maketitle
% Use the following 3 lines for long reports needing navigation
\tableofcontents
%\listoftables
%\listoffigures % not used unless figure environments used
% results=tex below makes SweaveListingUtils highlight function names in
% Hmisc and Design
<<echo=F,results=tex>>=
options(Hverbose=FALSE) # Silently load Hmisc and Design
require(Design)
# The following line is only needed if the prselect function is needed.
# prselect will be added to the next version of Hmisc. It allows for
# selective deletion of R output in the report.
source('http://biostat.mc.vanderbilt.edu/cgi-bin/viewvc.cgi/*checkout*/Hmisc/trunk/R/Misc.s')
@
\section{Descriptive Statistics}
<<results=tex>>=
getHdata(support) # Use Hmisc/getHdata to get dataset from VU DataSets wiki
d <- subset(support, select=c(age,sex,race,edu,income,hospdead,slos,dzgroup,
meanbp,hrt))
latex(describe(d), file='')
@
Race is reduced to three levels (white, black, OTHER) because of low
frequencies in other levels (minimum relative frequency set to 0.05).
<<>>=
d <- upData(d,
race = combine.levels(race, minlev = 0.05))
@
\section{Redundancy Analysis and Variable Interrelationships}
\bc
% Note: giving a chunk name to each code chunk that produces a figure
% makes it easy to know which plots to send to a collaborator, and
% will not allow numbered orphan plots to be left when code chunks are
% inserted into the file. The default in Sweave is for plots to be
% numbered by the chunks producing them.
<<vc,fig=T>>=
v <- varclus(~., data=d)
plot(v)
redun(~age+sex+race+edu+income+dzgroup+meanbp+hrt, data=d)
# Alternative: redun(~., data=subset(d, select=-c(hospdead,slos)))
@
\ec
Note that the clustering of black with white is not interesting; this just means that these are mutually exclusive higher frequency categories, causing them to be negatively correlated.
\section{Logistic Regression Model}
Here we fit a tentative binary logistic regression model. The
coefficients are not very useful so they are not printed.
<<z,eval=FALSE,echo=T>>=
dd <- datadist(d); options(datadist='dd')
f <- lrm(hospdead ~ rcs(age,4) + sex + race + dzgroup + rcs(meanbp,5),
data=d)
f
<<echo=F>>=
z <- capture.output( {
<<z>>
} )
prselect(z, 'S.E.') # keep only summary stats; or:
# prselect(z, stop='S.E.', j=-1) # keep only coefficients
@
<<results=tex>>=
latex(anova(f), where='h', file='') # can also try where='htbp'
@
\section{Test Calculations}
\bc
<<testp,fig=T>>=
x <- 3; y <- 2
if(x <= y) 'this' else 'that'
if(y >= x) 'that' else 'this'
x^y
plot(runif(20),runif(20))
@
\ec
\section{Computing Environment}
These analyses were done using the following versions of R\cite{Rsystem}, the
operating system, and add-on packages \code{Hmisc}\cite{Hmisc},
\code{Design}\cite{Design}, and others:
<<echo=F,results=tex>>=
s <- toLatex(sessionInfo())
cat(s[-grep('Locale',s)], sep='\n')
@
% Note: Rsystem reference is defined inside feh.bib. It is a slightly
% edited version of the output of citation().
\bibliography{/home/harrelfe/bib/feh.bib}
\bibliographystyle{unsrt}
% Use \bibliographystyle{abbrv} if want references alphabetized
\end{document}
If you have a master document that does not produce any R graphics, and a series of sections in separate
.Rnw files, the master document can contain the setup up to but not including the definition of
spar, and each separate
.Rnw file to be
\input from the master document should start with
<<echo=FALSE>>=
spar <- function(mar=c(3.25+bot-.45*multi,3.5+left,.5+top+.25*multi,.5+rt),
lwd = if(multi)1 else 1.75,
mgp = if(multi) c(1.5, .365, 0) else c(2.4-.4, 0.475, 0),
tcl = if(multi)-0.25 else -0.4,
bot=0, left=0, top=0, rt=0, ps=14,
mfrow=NULL, ...)
{
multi <- length(mfrow) > 0
par(mar=mar, lwd=lwd, mgp=mgp, tcl=tcl, ...)
if(multi) par(mfrow=mfrow)
}
options(SweaveHooks=list(fig=spar)) # run spar() before every plot
options(prompt=' ',continue=' ') # remove prompt characters at start of lines
@
\SweaveOpts{prefix.string=plot, eps = FALSE, pdf = TRUE, keep.source=TRUE}
\SweaveOpts{width=6, height=4}
You may have to have
require or
library commands in each section, as you run each section separately using e.g.
R CMD Sweave section.Rnw.
Using LaTeX figure Environments for Plots
If you want plots to float, have captions, or you want to reference figures symbolically in your report (e.g.,
See Figure \ref{myfig}) you need to enclose the figures in a
figure environment. You can do this in standard
Sweave by having
\begin{figure} and
\end{figure} enclose the code chunk, but this will put the
R code at the top of the figure. To have full control of the issue, use the following pattern. If you are using
Sweave to make a presentation, you will want figure setup and closure (
dev.off) commands to be suppressed from the final
pdf file. This can be done by adding
#rm# to any line you want to disappear, and running the
.tex file created by
Sweave through the
rmlines shell script, e.g.,
rmlines my.tex.
% Put the following in your master =.tex= or =.Rnw= file:
%\fg{basefilename}{label}{caption}
\newcommand{\fg}[3]{\begin{figure}[htbp]%
\leavevmode%
\centerline{\includegraphics{#1}}%
\caption{#3}%
\label{#2}%
\end{figure}}
%\fgh{basefilename}{label}{caption}{short caption for TOC}
\newcommand{\fgh}[4]{\begin{figure}[htbp]%
\leavevmode%
\centerline{\includegraphics{#1}}%
\caption[#4]{#3}%
\label{#2}%
\end{figure}}
% Put at the top of each =.Rnw= file:
<<echo=f>>=
ppdf <- function(file, w=4.5, h=3, ...) # set your own default height and width
{
pdf(paste(substitute(file),'pdf',sep='.'), width=w, height=h)
# use e.g. paste('pdf/',substitute(file),'.pdf',sep='') to put in subdirectory
spar(...)
}
doff <- function() invisible(dev.off()) # invisible to prevent R output
spar <- function(mar=c(3.25+bot-.45*multi,3.5+left,.5+top+.25*multi,.5+rt),
lwd = if(multi)1 else 1.75,
mgp = if(multi) c(1.5, .365, 0) else c(2.4-.4, 0.475, 0),
tcl = if(multi)-0.25 else -0.4,
bot=0, left=0, top=0, rt=0, ps=14,
mfrow=NULL, ...)
{
multi <- length(mfrow) > 0
par(mar=mar, lwd=lwd, mgp=mgp, tcl=tcl, ps=ps, ...)
if(multi) par(mfrow=mfrow)
}
# Default: par(mar=c(3.25,3.5,.5,.5))
options(SweaveHooks=list(fig=spar)) # run spar() before every plot
options(prompt=' ',continue=' ') # remove prompt characters at start of lines
@
# Make a plot. File name will be summary.pdf in current working directory
# Modify ppdf if you want to automatically put graphics in a subdirectory
<<>>=
ppdf(summary) #rm#
# Use e.g. ppdf(summary, h=4, w=5) to change size or ppdf(myplot, mfrow=c(1,2)) for multiple plots
plot(f) # Figure \ref{zz} [note zz can be a single word or more than one word separated by .]
doff() #rm#
@
# s2latx.pl called by Sweavev will automatically remove lines ending in doff() from the listing without needing #rm#
\fg{summary}{zz}{Univariable summaries}
See also
http://addictedtor.free.fr/misc/sweave for results of Romain Francois'
highlight approach.