Creaci´
on de informes din´
amicos desde R
Manuel Oviedo de la Fuente
Tabla de Contenidos
1
Creaci´
on de vi˜
netas e informes
2
Creaci´
on de HTLM con el formato Markdown
´Indice
1
Creaci´
on de vi˜
netas e informes
2
Creaci´
on de HTLM con el formato Markdown
3
Bibliograf´ıa
Vi˜
netas
Una vi˜
neta es un documento que muestra las excelencias del paquete.
T´ıpicamente un manual paso a paso.
Por defecto, el c´
odigo de la vi˜
neta se coloca en el directorio inst\doc
o en el directorio vignettes.
El c´
odigo fuente (fichero con extensi´
on .Rnw, .Snw) se compila y
genera el PDF cuando se genera el fichero comprimido
La vi˜
neta consiste principalmente en c´
odigo L
ATEXque se mezcla con
c´
odigo R en chunks.
Un chunk comienza siempre con <<>>= y termina con @.
La herramienta por defecto en R es Sweave aunque la librer´ıa knitr
permite muchas m´
as opciones (por ejemplo, para usar con beamer).
Sweave I
Opciones de Sweave:<<split=FALSE>>: Divide la salida en varias partes. (TRUE no se usa en vi˜netas de paquete).
<<echo=TRUE>>: Se imprime o no el c´odigo.
<<label=nombre>>: Nombre para el chunk que puede usarse m´as adelante. <<prefix=TRUE>>: Todos los ficheros generados tendr´an un prefijo com´un. <<prefix.string=figures/nombre>>: Prefijo de las figuras.
<<fig=TRUE>>: Se incluye una figura.
<<pdf=TRUE, png=TRUE, eps=TRUE, jpg=TRUE>>: Formato de las figuras. <<eval=TRUE>>: Se eval´ua (o no) el c´odigo.
<<results=verbatim|tex|hide>>: Como se escriben los resultados <<width=6>>: Ancho en pulgadas de los gr´aficos.
<<height=6>>: Alto en pulgadas de los gr´aficos.
\Sexpr{expr}: Se usa para escribir una expresi´on en medio del texto.
Tipos de documentos y vi˜
netas:
\documentclass[opt1,opt2,...]{tipo}
article: para art´ıculos cient´ıficos, documentaci´on de programas. beamer: para presentaciones.
report: para documentos extensos con varios cap´ıtulos, tesis. book: para libros, letter: para cartas,...
Opciones de Sweave para figuras:
<<fig=TRUE>>: Se incluye una figura.
<<pdf=TRUE, png=TRUE, eps=TRUE, jpg=TRUE>>: Formato de las figuras. <<width=6>>: Ancho en pulgadas de los gr´aficos.
<<height=6>>: Alto en pulgadas de los gr´aficos. Veamos un ejemplo.
Tipos de documentos y vi˜
netas:
\documentclass[a4paper]{article} \title{ Ejemplo 1: Sweave} \author{ Autores }\begin{document} \maketitle
In this example we embed parts of the examples from the \texttt{kruskal.test} help page into a \LaTeX{} document : <<>>=
data(airquality,package="datasets") library("stats")
kruskal.test( Ozone ~ Month , data = airquality ) @
which shows that the location parameter of the Ozone distribution varies significantly from month to month. Finally we include a boxplot of the data:
<<fig=TRUE,echo=FALSE>>= library("graphics")
boxplot(Ozone ~ Month,data = airquality ) @
\end{document}
knitr
El paquete knitr permite la generaci´
on de informes din´
amicos con R,
combinando caracter´ısticas de otros paquetes en un solo paquete (knitr ≈
Sweave + cacheSweave + pgfSweave + weaver + animation::saveLatex +
R2HTML::RweaveHTML + highlight::HighlightWeaveLatex + 0.2 * brew
+ 0.1 * SweaveListingUtils + m´
as).
Editores para knitr http://yihui.name/knitr/demo/editors/:
RStudio: Descargar la ´
ultima versi´
on y compliar PDF con un solo clic
a trav´
es , http://yihui.name/knitr/demo/rstudio/.
Texmaker,TeXStudio: Se puede definir un comando personalizado
para procesar documentos Rnw.
knitr I
knitr permite una personalizaci´
on m´
as extensa y muchas m´
as opciones.
La funci´
on Sweave2knitr convierte c´
odigo de un formato al otro.
Opciones principales de knitr:
<<eval=TRUE|c(1,3:4)>>: Se eval´ua (o no) el c´odigo o las l´ıneas que se eval´uan. <<echo=TRUE|c(1,3:4)>>: Se imprime o no el c´odigo o las expresiones que se imprimen.
<<results=’markup’|’asis’|’hold’|’hide’>>: Como se escriben los resultados <<warnings=FALSE>>:Se escriben o no los warnings.
<<error=TRUE|FALSE>>: Debe parar R con los errores. <<split=TRUE>>: Se dividen o no los resultados. <<tidy=TRUE>>: Decora el c´odigo al escribirlo.
tidy.opts=list(keep.blank.line=FALSE, width.cutoff=60) permite elegir los detalles.
<<prompt=TRUE>>: Se incluye el prompt en los resultados. <<comment=’’>>: Car´acter para los comentarios.
knitr II
<<size=’normalsize’>>: Tama˜no de los resultados. <<background=’F7F7F7’>>: Color de fondo.
<<cache=TRUE>>: Se guarda en memoria el resultado.
Opciones de knitr para figuras
<<fig.path=’figure/’>>: Directorio donde se guardan las figuras
<<fig.keep=’high’|’all’|’none’|’first’|’last’>>: ¿Qu´e figura se guarda? <<fig.show=’asis’|’hold’|’animate’|’hide’>>: Como mostrar los plots. <<dev=’CairoPDF’>>: Un vector con los dispositivos gr´aficos: bmp, postscript, pdf, png, svg, jpeg, pictex, tiff, win.metafile, cairo pdf, cairo ps, CairoJPEG, CairoPNG, CairoPS, CairoPDF, CairoSVG, CairoTIFF, Cairo pdf, Cairo png, Cairo ps, Cairo svg, tikz. Las opciones de cada dispositivo se incluyen en dev.args.
<<fig.width=5, fig.height=6>>: Ancho y Alto en pulgadas de los gr´aficos. <<out.width=’.8, out.height=’>>: Reescalado de los gr´aficos en el texto. <<out.extra=’angle=90’>>: Lista de opciones para la salida.
<<fig.align=’center’>>: Alineamiento.
<<fig.env=’figure’, fig.cap=’Titulo’>>: Opciones para figuras. <<fig.width=5,fig.height=4,fig.align = 'center'>>=
boxplot(Ozone ~ Month,data = airquality,main="Box-Plot" ) @
....y ahora una animaci´
on con knitr
<<fig.show=’asis’|’hold’|’animate’|’hide’>>: Como mostrar los plots. <<echo=F,clock,fig.width=3, fig.height=3, out.width='.7\\linewidth', fig.show='animate', tidy=FALSE, crop=TRUE>>=
par(mar = rep(3, 4))
for (i in seq(pi/2, -4/3 * pi, length = 12)) { plot(0, 0, pch = 20, ann = FALSE, axes = FALSE) arrows(0, 0, cos(i), sin(i))
axis(1, 0, "VI"); axis(2, 0, "IX")
axis(3, 0, "XII"); axis(4, 0, "III"); box() }
@
Funciones gancho de knitr: Hooks
Son funciones que permiten personalizar la salida de knitr mediante el
objeto knit hooks. El uso b´
asico es knit_hooks$set(param = FUN),
donde param es el nombre de una opci´
on chunk, y FUN es un funci´
on.
Hay dos tipos de anzuelos: chunk hooks y output hooks.
Funciones gancho de knitr: chunk hooks
Funciones que se ejecutan antes o despu´es de un trozo de c´odigo cuando la opci´on CHUNK es no nula,
foo_hook = function(before, options, envir) {
if (before) { ## code to be run before a chunk } } else { ## code to be run after a chunk } }
Por ejemplo, para poner margenes m´as reducidos (arriba y derecha), <<setup, include=FALSE>>=
knit_hooks$set(small.mar = function(before, options, envir) { if (before) par(mar = c(4, 4, .1, .1)) })
@
LLamamos a la funci´on gancho en el siguiente CHUNK, <<miplot, small.mar=TRUE>>=
boxplot(Ozone ~ Month,data = airquality,main="Box-Plot" ) @
Funciones gancho de knitr: output hooks
Sirven para para modificar y pulir el resultado de los chunks. source: el c´odigo fuente
output: lo que sale por el terminal de R excepto advertencias, mensajes y errores
warning: mensajes de adevertencia de warning() message: mensajes de aviso de message() error: los errores del stop()
plot: salida de gr´aficos
inline: salida del c´odigo en l´ınea R chunk: toda la salida de un chunk
document: la salida de todo el documento
Funciones gancho de knitr: output hooks
<<setup, include=FALSE>>=
hook_output = knit_hooks$get("output")
knit_hooks$set(output = function(x, options) {
if (!is.null(n <- options$out.lines)) {
x = unlist(stringr::str_split(x, "\n"))
if (length(x) > n) {
# truncate the output
x = c(head(x, n), "....\n")
}
# paste first n lines together
x = paste(x, collapse = "\n")
}
hook_output(x, options)
})
´Indice
1
Creaci´
on de vi˜
netas e informes
2
Creaci´
on de HTLM con el formato Markdown
3
Bibliograf´ıa
Creaci´
on de HTLM con el formato Markdown
Markdown est´a dirigido principalmente a las p´aginas HTM y es f´acil de aprender y escribir. Ahora se trabaja en un fichero Rmd en el que los chunks vienen definidos por ```{r} y finaliza con ```.
## El argumento `before` es de tipo logico
## Si : `before == TRUE` ejecuta el codigo antes del chunk. ```{r}
knit_hooks$set(foo1 = function(before, options, envir) { if (before) {
'Antes del chunck' } else {
'Despues del chunck' }
}) ```
Creaci´
on de HTLM con el formato Markdown
R Markdown es un formato que permite una f´
acil creaci´
on de
documentos, presentaciones din´
amicas y informes de R
Combina la sintaxis de Markdown (lenguaje de marcado (markup
language) sencillo) con trozos de c´
odigo R incrustados que se ejecutan
de forma que el resultado se puede incluir en el documento final.
Los documentos de RMarkdown son totalmente reproducibles
(pueden regenerarse de forma autom´
atica cada vez que el c´
odigo o los
datos cambian)
Creaci´
on de HTLM con: Requerimientos
Una versi´
on reciente de R
Un editor de texto (por ejemplo el incorporado en RStudio)
Algunos packages adicionales de R accesibles desde el CRAN
(knitr,...)
Creaci´
on de HTLM con el formato Markdown: Esquema
del proceso
Creamos el documento RMarkdown con extensi´
on .Rmd.
El documento contiene los tags de Markdown con el texto y los
chunks de c´
odigo R
knitr procesa y produce un documento Markdown .md. El proceso
puede ejecutarse desde dentro de RStudio o con las instrucciones
library(knitr)
knit2html("myfile.Rmd")
browseURL("myfile.html)
@
knitr convierte el documento Markdown en un documento HTML
.html (por defecto) publicable o imprimible. Tambi´
en se pueden
general documentos PDF o Word.
Incorporaci´
on de ecuaciones y c´
odigo en el texto
Se puede incrustar ecuaciones LaTeX o MathML en archivos Markdown R
utilizando la siguiente sintaxis:
$$ecuaci´
on$$
y $ecuaci´
on$(para ecuaciones en l´
ınea)
<math ...> </ math>para ecuaciones MathML.
Tambi´
en puede evaluar expresiones R inline encerrando la expresi´
on dentro
de un back-tick ´
unica calificada con ’r’.
Creaci´
on de HTLM con Markdown: RStudio
Creaci´
on de tablas con RMarkdown
Una de las herramientas m´
as utilizadas es la creaci´
on de tablas a partir de
objetos de R. Es necesario tener cargado el package xtable de R.
Creaci´
on de HTLM con el formato Markdown
Otros enlaces con ejemplos de uso de markdown http://rmarkdown.rstudio.com/
http://rpubs.com/
Como convertir un Markdown en LaTex: Pandoc
Los archivos Markdown se pueden convertir a LaTeX a trav´es Pandoc y publicar un PDF utilizando la clase LaTeX de Chapman Hall,
http://johnmacfarlane.net/pandoc/installing.html. http://yihui.name/en/2013/10/markdown-or-latex/
´Indice
1
Creaci´
on de vi˜
netas e informes
2