[R] Sweave: R chunk inside caption?

Marc Schwartz marc_schwartz at me.com
Tue Aug 21 21:35:19 CEST 2012


On Aug 21, 2012, at 2:03 PM, Alexander Shenkin <ashenkin at ufl.edu> wrote:

> Hi Folks,
> 
> I'm surprised, but I didn't find this question addressed anywhere.  I'd
> like to generate a LaTeX caption with R code.  I've tried the code
> below, but I get the following TeX error:
> 
>    ! Argument of \@caption has an extra }.
>    <inserted text>
>    \par
>    l.21 }
> 
> Any thoughts?  Perhaps I'll have to write the "\caption{}" text with R?
> 
> thanks!
> 
> 
> Sweave document:
> 
>    \documentclass{article}
>    \title {test}
>    \author {me}
>    \usepackage{Sweave}
>    \begin {document}
>    \maketitle
>    \DeclareGraphicsExtensions{.pdf,.png}
> 
>    \begin {figure}
>    <<label=fig1, echo=FALSE, fig=TRUE, pdf=false, png=true>>=
>        plot(runif(100), runif(100))
>    @
>    \caption {
>    This is the caption with some r-code
>    <<>>=
>        2*2
>    @
>    }
>    \label {fig:1}
>    \end {figure}
> 
>    \end{document}
> 
> 
> TeX document:
> 
>    \documentclass{article}
>    \title {test}
>    \author {me}
>    \usepackage{Sweave}
>    \begin {document}
>    \maketitle
>    \DeclareGraphicsExtensions{.pdf,.png}
>    \begin {figure}
>    \includegraphics{test-fig1}
>    \caption {
>    This is the caption with some r-code
>    \begin{Schunk}
>    \begin{Sinput}
>> 2*2
>    \end{Sinput}
>    \begin{Soutput}
>    [1] 4
>    \end{Soutput}
>    \end{Schunk}
>    }
>    \label {fig:1}
>    \end {figure}
>    \end{document}


You can use \Sexpr{} to include R code within the LaTeX, but the code needs to return a scalar. 

For example:

\documentclass{article}
\usepackage{Sweave}

\begin{document}

\begin{figure}[tbp]
\centering
<<fig=TRUE,width=6,height=6>>=
  plot(1:10)
@
\caption{This is the caption \Sexpr{round(sqrt(2), 2)} with an R scalar included}
\end{figure}

\end{document}


will return:


\documentclass{article}
\usepackage{Sweave}

\begin{document}

\begin{figure}[tbp]
\centering
\begin{Schunk}
\begin{Sinput}
>   plot(1:10)
\end{Sinput}
\end{Schunk}
\includegraphics{caption-001}
\caption{This is the caption 1.41 with an R scalar included}
\end{figure}

\end{document}


In general, if the R code is not very simple (eg. it is multiple lines/function calls, etc.), I will generally have the R code in an R chunk, assign the result to a scalar and then include that scalar in the \Sexpr{}:

This is referenced in the Sweave manual and FAQ:

  http://www.statistik.lmu.de/~leisch/Sweave/

Regards,

Marc Schwartz




More information about the R-help mailing list