You are on page 1of 6

Usar Sweave con LYX

Yihui Xie*

Gregor Gorjanc

Jean-Marc Lasgouttes

23 de agosto de 2012
Sweave es una utilidad del lenguaje R (http://www.r-project.org) para la generacin de informes dinmicos usando las ideas de la programacin literaria. El cdigo R se puede mezclar en un
documento LATEX y se ejecutar en R cuando se compile el documento. Los resultados se escriben en
la salida TEX.
Desde LYX 2.0, Sweave puede usarse directamente con cualquier clase de documento gracias al
mdulo Sweave, lo que significa que no es necesario modificar manualmente el archivo preferences o
aadir presentaciones especiales como literate-article.layout y literate-book.layout como se haca antes.
Podemos aadir el mdulo Sweave a un documento LYX desde Documento . Configuracin . Mdulos.
En este manual mostraremos algunas de las principales caractersticas de Sweave y explicaremos
como trabaja el mdulo. Se puede hallar (en ingls) una versin PDF de este manual en https://
github.com/downloads/yihui/lyx/sweave.pdf.

1.

Requerimientos del sistema

El mdulo Sweave depende del ejecutable Rscript, de forma que debe estar en la variable PATH
del sistema. Esto normalmente no es ningn problema para los usuarios de Linux y Mac OS, pero
puede ser confuso para los usuarios de Windows. Si no sabe qu es el PATH en Windows, puede
utilizar el archivo de R add-R-path-win.R del repositorio https://github.com/yihui/lyx para cambiarlo automticamente (no se recomienda ya que, en todo caso, debera aprender algo sobre las rutas
o PATH), o ir a Herramientas . Preferencias . Rutas . Prefijo PATH para aadir la ruta hacia el binario
de R (recomendado) que con frecuencia es algo como C:\Archivos de programa\R\R-x.x.x\bin y que
puede hallar en R:
> R.home('bin')
Despus de hacer estos cambios, debe reconfigurar LYX con Herramientas . Reconfigurar. Si Rscript
no est en la variable PATH, el mdulo Sweave no ser accesible. Se recomienda utilizar la ltima
versin de R, ya que Sweave todava se est actualizando. Otra dependencia la presenta el archivo de
estilo LATEX Sweave.sty que se adjunta con R en esta ruta (no est en CTAN):
> file.path(R.home('share'), 'texmf', 'tex', 'latex')
Los usuarios de MikTEX pueden aadir la carpeta texmf a la lista de carpetas raz (root directories)
en MikTEX a travs de las preferencias de MikTEX. Adems hay que hacer notar que Sweave.sty depende del paquete fancyvrb y puede depender de ae. Si LYX no puede hallar Sweave.sty, directamente
lo copiar de R, luego el mdulo Sweave funcionar incluso aunque usted desconozca donde est
este archivo de estilo.
* Department of Statistics, Iowa State University. Email: xie@yihui.name.
Traduccin de Francesc Carmona fcarmona@ub.edu

2.

Ejemplos Sweave

Antes de escribir un documento Sweave, debemos fijar algunas opciones de Sweave. La instruccin es \SweaveOpts{} en Sweave y se puede insertar en un documento LYX con Insertar . Recuadro
personalizado . Opciones de Sweave, o escribindola simplemente como cdigo TEX (Insertar . Cdigo
TeX). Por ejemplo, podemos fijar una opcin global echo=FALSE al principio de un documento para
suprimir todo el cdigo R (por defecto, tanto el cdigo R como su resultado se mostrarn en el documento LATEX final).
Para escribir cdigo R en LYX, primero debe cambiar al entorno Trozo en el listado de estilos de
presentacin (lista desplegable arriba en la esquina izquierda de la barra de herramientas) o simplemente puede abrir un entorno de cdigo TEX y escribir los trozos de cdigo Sweave en l. La ltima
propuesta es la recomendada ya que es ms estable.
Algunas opciones de R pueden ser tiles tambin en los resultados de Sweave, por ejemplo width
y useFancyQuotes. La opcin de formato ajusta el ancho de los resultados y la ltima puede prevenir
un problema habitual con las comillas. Recomendamos encarecidamente que los usuarios lean el
manual de Sweave en R para ms detalles.
> ## la opcin 'digits' puede fijar (aprox.) el nmero de dgitos
> options(width = 70, useFancyQuotes = FALSE, digits = 4)
> ## ver la vieta Sweave (requiere R >= 2.13.0)
> vignette("Sweave", package = "utils")
Un ejemplo sencillo que funcionar en cualquier motor S:
> ## los enteros de 1 a 10 son
> 1:10
[1]

9 10

> ## ocultamos intencionadamente el resultado con results=hide


> print(1:20)
Podemos tambin emular una simple calculadora:
> 1 + pi
[1] 4.142
> sin(pi/6)
[1] 0.5
Ahora vemos unos datos gausianos:
> set.seed(123) # para que sea reproducible
> x <- rnorm(20)
> print(x)
[1] -0.56048 -0.23018 1.55871 0.07051
[8] -1.26506 -0.68685 -0.44566 1.22408
[15] -0.55584 1.78691 0.49785 -1.96662

0.12929 1.71506
0.35981 0.40077
0.70136 -0.47279

> t1 <- t.test(x)

0.46092
0.11068

Cuadro 1: Cuantiles de las cuatro primeras variables de los datos iris.


Sepal.Length Sepal.Width Petal.Length Petal.Width
0%
4.30
2.00
1.00
0.10
25 %
5.10
2.80
1.60
0.30
50 %
5.80
3.00
4.35
1.30
75 %
6.40
3.30
5.10
1.80
100 %
7.90
4.40
6.90
2.50
Hay que destacar que podemos integrar fcilmente algunos nmeros en el texto estndar. Esto se
consigue com la instruccin \Sexpr{} y su correspondiente men LYX es Insertar . Recuadro personalizado . Expresin S/R o alternativamente como cdigo TEX. Por ejemplo, el tercer elemento del vector
es 1.55870831414912 (x[3]) y el p-valor del test es 0.52. Puede redondear estos nmeros con funciones
como round() en R.
Ahora veremos un resumen de la base de datos iris:
> summary(iris[,-5])
Sepal.Length
Min.
:4.30
1st Qu.:5.10
Median :5.80
Mean
:5.84
3rd Qu.:6.40
Max.
:7.90

Sepal.Width
Min.
:2.00
1st Qu.:2.80
Median :3.00
Mean
:3.06
3rd Qu.:3.30
Max.
:4.40

Petal.Length
Min.
:1.00
1st Qu.:1.60
Median :4.35
Mean
:3.76
3rd Qu.:5.10
Max.
:6.90

Petal.Width
Min.
:0.1
1st Qu.:0.3
Median :1.3
Mean
:1.2
3rd Qu.:1.8
Max.
:2.5

Normalmente a la mayora no les gusta este resultado tal cual y podemos pulir estos nmeros
bastos con el paquete xtable. El Cuadro 1 es un ejemplo que muestra como usar el paquete xtable con
Sweave. Observe que la opcin del trozo results=tex garantiza que el resultado de R se escribir
como cdigo LATEX tal cual, en lugar de insertarse en un entorno especial (Soutput).
Las figuras 1 y 2 son dos ejemplos sencillos de resultados grficos producidos con Sweave.
Podemos exportar todo el cdigo R de un documento Sweave en un nico archivo R (Archivo .
Exportar . Cdigo R/S), lo que se consigue a travs de R CMD Stangle.

3.

El mdulo Sweave

El mdulo Sweave declara que un documento LYX contiene componentes de programacin literaria
con R, de manera que LYX manejar tales documentos de acuerdo con los convertidores especficos
(ver el Manual de personalizacin). El mdulo Sweave usa el convertidor sweave, el cual consiste
esencialmente en un archivo de instrucciones R lyxsweave.R en la carpeta scripts de LYX. Este archivo
de instrucciones toma un documento Rnw de LYX y llama a Sweave para procesarlo en un documento
TEX, entonces LYX se encarga del resto del trabajo.
El convertidor desde el formato sweave a LATEX es una llamada a R a travs de una instruccin en
la terminal tal como:
Rscript --no-save --no-restore $$s/scripts/lyxsweave.R $$p$$i $$p$$o $$e $$r
La carpeta de paquetes $$s de LYX se puede hallar desde el men Ayuda . Acerca de LYX. Todas las
dems opciones que se pasan a R se explican en el archivo de instrucciones R y tambin el Manual de
personalizacin de LYX contiene explicaciones detalladas sobre $$i, $$o, $$e y $$r. Los usuarios normales no necesitan saber qu significan estas opciones, pero vamos a explicar aqu algunos intrngulis
del cdigo R:
3

> pairs(iris, col = iris$Species)

2.0
0.5

Species

Petal.Width

6.5

Petal.Length

6.5

4.5

4.5

Sepal.Width

2.0

0.5

2.0

3.5

Sepal.Length

3.5

1.0 2.0 3.0

2.0

1.0 2.0 3.0

Figura 1: Matriz de grficos de dispersin de los datos iris.

> par(mar = c(4, 5, 0.1, 0.3), las = 1)


> boxplot(Sepal.Length ~ Species, data = iris, horizontal = TRUE,
+
xlab = "Sepal.Length")

virginica

versicolor
setosa
4.5

5.0

5.5

6.0

6.5

7.0

7.5

Sepal.Length
Figura 2: Diagramas de caja de la longitud del spalo agrupada por especie.

8.0

1. la cadena de codificacin del documento LYX se pasa a R como una opcin de la lnea de comandos. Las posibles son ISO-8859-15, UTF-8, etc. R usa la codificacin para leer el documento
Rnw correctamente.
2. los trozos de cdigo R en el documento Sweave se ejecutan en la carpeta del documento LYX
(si no est seguro, ponga getwd() en un trozo de cdigo para ver cual es la carpeta de trabajo
actual). En este caso, puede situar los archivos de datos en la misma carpeta y usar las rutas
relativas en R para garantizar la reproducibilidad, es decir, no necesita escribir rutas completas
que pueden no existir en otros sistemas.
3. Si LATEX no puede hallar Sweave.sty, este archivo de rdenes R lo copiar en la carpeta temporal
donde se realiza la compilacin LATEX.
4. Sweave usa el nombre del archivo Rnw como cadena de prefijo por defecto para los resultados grficos. Un problema conocido (#7551) es que si el nombre del archivo (sin la extensin)
contiene puntos, LATEX puede fallar en el manejo de tales archivos en \includegraphics{}. En
consecuencia, hemos fijado el valor por defecto del prefijo para que sea el nombre del archivo con todos los puntos reemplazados con -. Tambin podemos resolver este problema en
Sweave directamente: fijaremos la opcin prefix.string de Sweave para que sea una cadena
de caracteres sin puntos y esta opcin sobreescribir el valor por defecto.
Hemos especificado una opcin noae para el paquete Sweave. Esta opcin evita que Sweave cargue
estos dos paquetes:
\RequirePackage[T1]{fontenc}
\RequirePackage{ae}
LYX puede hacer frente a la codificacin de caracteres por defecto, as que no hay ninguna necesidad de decirle a Sweave que lo haga (adems, esto puede traer conflictos de opciones de paquetes).
Por otra parte y si fuera necesario, los usuarios pueden cargar el paquete ae ellos mismos en el prembulo.

4.

Deteccin de problemas

Desde LYX 2.0 podemos ver la informacin detallada durante la compilacin a travs de Ver . Ver
mensajes. Esto es muy til para la resolucin de problemas. El proceso de R se mostrar en el panel
de mensajes y seremos capaces de saber qu trozos fallan en caso de errores. Por ejemplo, cuando
compile este documento, puede ver mensajes como el siguiente:
17:58:47.868: Processing code chunks with options ...
17:58:47.885: 1 : echo keep.source term verbatim (label=setup)
17:58:47.889: 2 : echo keep.source (label=sweave-manual)
17:58:47.908: 3 : echo keep.source term verbatim (label=print-integers)
....
17:58:47.941: Loading required package: xtable
17:58:47.976: 9 : echo term verbatim pdf (label=iris-pairs)
....
17:58:48.116: You can now run (pdf)latex on 'sweave.tex'
La cadena despus de label= es la etiqueta del trozo. Si un trozo causa un error en R, ver el
mensaje de error inmediatamente.
Otro problema conocido es que el trozo de cdigo Sweave puede fallar cuando cambiamos la
alineacin del prrafo del trozo en LYX (usando Configuracin del prrafo), ya que LYX puede aadir
una macro como \centering{} antes del trozo de cdigo sin aadir una nueva lnea , lo que derivar
en un trozo de cdigo como ste:
5

\centering{}<<xtable-demo,results=tex,echo=FALSE>>=
ste no es un trozo de cdigo legtimo, ya que <<>>= debe iniciar una nueva lnea, sin nada antes.
De manera que le recomendamos que realize un doble chequeo del cdigo fuente real a travs de
Ver . Ver fuente cuando cambie la alineacin de un prrafo de trozo y se asegure que <<>>= aparace
en una nueva lnea. Esto explica por qu aadimos manualmente una lnea en blanco en el trozo de
cdigo de la Tabla 1.

5.

Recursos

La pgina principal de Sweave es http://www.stat.uni-muenchen.de/~leisch/Sweave/. La vista


de tareas Reproducible Research del CRAN contiene una lista de paquetes relacionados con Sweave
que pueden ser potencialmente tiles: ver http://cran.r-project.org/web/views/ReproducibleResearch.
html. Se pueden hacer preguntas sobre LYX y Sweave en la lista de correo electrnico (http://www.
lyx.org/MailingLists). En https://github.com/yihui/lyx hallaremos ms ejemplos en LYX.

6.
6.1.

Preguntas frecuentes
Se puede usar Sweave con beamer?

Si usa Sweave en una presentacin beamer con LYX, sta finalizar con errores de LATEX. La razn
es que la diapositiva de beamer que contiene el ambiente verbatim con el cdigo R y sus resultados
debe tener una opcin fragile. Sin embargo, actualmente no hay una forma sencilla de hacer esto.
Una posibilidad es escribir cdigo TEX tal cual y la otra es usar el mdulo beamer-fragile.module que
se discute en #7273 (hay que poner este archivo en la carpeta layouts de la carpeta de usuario de LYX
y reconfigurar LYX). Despus de incluir este mdulo en su documento, debera poder usar Insertar .
Custom Insets . FragileFrame, lo que esencialmente es un \begin{frame}[fragile].

6.2.

Puedo definir mi propio conjunto de instrucciones R para compilar el documento Rnw?

S, por supuesto. En primer lugar usted debe entender cmo funciona el conjunto de instrucciones
de R $$s/scripts/lyxsweave.R, que ya hemos presentado anteriormente, y le recomendamos que lea
tambin el cdigo fuente de R (la forma en que R toma las rutas y usa Sweave() para manejar el
documento Rnw). Entonces usted puede poner su propio lyxsweave.R personalizado en la carpeta
scripts de su carpeta de usuario (de nuevo, consulte la Ayuda . Acerca de LYX). Ntese que LYX buscar
en la carpeta de usuario antes de ir a su propia carpeta de paquetes. Si un conjunto de instrucciones
lyxsweave.R se halla en la carpeta de usuario, se usar ste. No se recomienda modificar el archivo de
la carpeta de paquetes de LYX directamente, ya que una actualizacin de LYX sobreescribir el archivo
modificado (la carpeta de usuario no se ve afectada).
Adems del soporte al Sweave oficial en R, tambin se soporta el paquete knitr que es una utilidad
alternativa a Sweave. El mdulo correspondiente se denomina Rnw (knitr).

You might also like