CREACION DE DOCUMENTOS HTML CON EL PAQUETE KNITR DE R.

por Carlos LESMES
Universidad Santo Tomás.
email: lesmes@member.ams.org
twitter: @carloslesmes3

Introducción

Con el fin incentivar la escritura de artículos y de desarrollos estadísticos de los estudiantes y docentes en la faculatd de Estadística de la USTA, este post, muestra como crear documentos HTML. Escribiendo poco código se obtiene una agradable salida en la web. Inserte trozos, chunks, de código R y fórmulas de LaTeX en un documento HTML, no es necesario conocer HTML. Para hacer documentos HTML se necesita un manejo adecuado de la sintaxis, la que a veces es engorrosa. No hay que programar. También es una alternativa para quienes no gustan de LaTeX.

Este post muestra las características de R Markdown usando knitr en RStudio versión 0.96.33. RStudio incluye un botón de referencia rápida de Markdown. Botón MD al lado de Knit HTML. Estas herramientas permiten procesar datos e incluir los análisis en un reporte de forma similar al Sweave, el cual corre R dentro de un documento LaTeX, permitiendo el análisis de datos experimentales. Esta forma de trabajo y divulgación se puede ver en reproducible research.

Específicamente, se muestra como trabajar con R Markdown y con el paquete knitr de R en Rstudio y es un ejemplo básico de como manejar la salida y las gráficas de la consola de R usando R Markdown. Se utilizan algunas de las opciones de los chunks para controlar la entrada y la salida. Además se muestra cómo incluir fórmulas matemáticas con LaTeX y tablas, así como traer archivos de páginas web o del cada vez más popular freemium : dropbox.

Es muy útil que usted vea el código fuente junto con la salida. Así se pueden ver las opciones de los chunks y como se compila el documento.

Para trabajar con R Markdown es necesario:

(1) Instalar R.
(2) Instalar la última versión de RStudio (a la fecha de publicación la versión es la 0.96.33).
(3) Instalar la última version del paquete knitr.
(4) Abrir R Studio y vaya a File - New - R Markdown
(5) Pegar el código que encuentra en scriptMD
(6) Hacer clic en Knit HTML.

Elaboración de un chunk.

Para insertar un chunk de código R vaya a Chunks - Insert chunks, o manualmente, y se producirá el siguiente chunk:

```r
# inserte código r
```

El cual recibirá el código R. Veamos algunos ejemplos de opciones en los chunks. Rstudio autocompleta las opciones y presenta las alternativas de cada una de ellas. Con el siguiente chunk:

```r
a <- 5
b <- 7
a + b
```

se obtendrá el código y la salida:

a <- 5
b <- 7
a + b
## [1] 12

El siguiente chunk de código de R:

```r
x <- 1:6
y <- rexp(6, 5)
df <- data.frame(x, y)
df
summary(df)
```

producirá la entrada y la salida como sigue:

x <- 1:6
y <- rexp(6, 5)
df <- data.frame(x, y)
df
##   x       y
## 1 1 0.24147
## 2 2 0.19009
## 3 3 0.03745
## 4 4 0.25505
## 5 5 0.17753
## 6 6 0.06370
summary(df)
##        x              y         
##  Min.   :1.00   Min.   :0.0374  
##  1st Qu.:2.25   1st Qu.:0.0921  
##  Median :3.50   Median :0.1838  
##  Mean   :3.50   Mean   :0.1609  
##  3rd Qu.:4.75   3rd Qu.:0.2286  
##  Max.   :6.00   Max.   :0.2550

Dos chunks con opción warning=TRUE/FALSE, aqui se utilizó la opción echo=TRUE para que aparezca el código R.

```r
> x <- c(1, 2)
> y <- c(1, 2, 5)
> x + y
```
> x <- c(1, 2)
> y <- c(1, 2, 5)
> u <- pi
> x + y
## Warning: longitud de objeto mayor no es múltiplo de la longitud de uno
## menor
## [1] 2 4 6
> x <- c(1, 2)
> y <- c(1, 2, 5)
> x + y
## [1] 2 4 6

Se pueden hacer opciones globlales, es decir, para todo el documento, con un chunk de la siguiente forma:

# todas las gráficas tendrán tamaño 5x5 pulgadas
opts_chunk$set(fig.width = 5, fig.height = 5)

También soporta código R en texto: por ejemplo el valor de u es 3.1416, 4 veces e es 10.8731 y 2+2 son 4. (vea el código fuente)

Cargue los paquetes que vaya a necesitar:

suppressPackageStartupMessages(library(googleVis))
library(ggplot2)
library(lattice)

Gráficos

Las imágenes generadas por knitr son guardadas en un archivo de imágenes. Sinembargo, también aparecen en la salida de HTML usando un data URI scheme. Esto significa que las puede pegar en un blog o en un foro de discusión y no tiene que preocuparse por encontrar un sitio para almecenar las imágenes, están incrustadas en el HTML.

Para obtener una gráfica muy sencilla:

```r
g <- rexp(40)
hist(g, main = "Título", xlab = "", ylab = "")
```
g <- rexp(40)
hist(g, main = "Título", xlab = "", ylab = "")

plot of chunk graf1

Otra gráfica con opción de tamaño: fig.height=3,fig.width=3 y prompt=TRUE, el siguiente código :

```r
> set.seed(456)
> x <- rexp(100, 1)
> y <- rexp(100, 1)
> plot(x, y)
```
> set.seed(456)
> x <- rexp(100, 1)
> y <- rexp(100, 1)
> plot(x, y)

plot of chunk ejemplo

Note que se incluyó el prompt de R.

Notese que a diferencia de Sweave, no se necesita escribir fig=TRUE, y recuerde que todos los chunks que se crean pertenecen a la misma sesión de R.

Gráficas múltiples.

También, a difrencia de Sweave se pueden incluir varias gráficas en un chunk:

```r
boxplot(x, y)
plot(x, y)
```
boxplot(x, y)

plot of chunk graf2

plot(x, y)

plot of chunk graf2

Gráficas con ggplot2 y lattice.

Aqui ggplot2 y lattice funcionan muy bien:

```r
qplot(x, y)
```
qplot(x, y)

plot of chunk graf3

```r
xyplot(y ~ x)
```
xyplot(y ~ x)

plot of chunk graf4

```r
qplot(hp, mpg, data = mtcars) + geom_smooth()
```
qplot(hp, mpg, data = mtcars) + geom_smooth()

plot of chunk graf5

Notese que a difrencia de Sweave no hay que imprimir los gráficos de lattice directamente.

Versatilidad para traer archivos de datos.

Traiga archivos de la web, o de su dropbox a R y haga los análisis necesarios.

autos <- read.csv("http://dl.dropbox.com/s/880vobpzc9pskg1/autos.csv", head = TRUE, 
    sep = ";")
autos
##   carros mulas camionetas
## 1      1     2          4
## 2      3     5          4
## 3      6     4          6
## 4      4     5          6
## 5      9    12         16
summary(autos)
##      carros        mulas        camionetas  
##  Min.   :1.0   Min.   : 2.0   Min.   : 4.0  
##  1st Qu.:3.0   1st Qu.: 4.0   1st Qu.: 4.0  
##  Median :4.0   Median : 5.0   Median : 6.0  
##  Mean   :4.6   Mean   : 5.6   Mean   : 7.2  
##  3rd Qu.:6.0   3rd Qu.: 5.0   3rd Qu.: 6.0  
##  Max.   :9.0   Max.   :12.0   Max.   :16.0

Utilizando la opción cache

Algunos análisis pueden ser demorados en una primera corrida pero con esta opción las siguientes corridas son más rápidas. Por ejemplo algo como:

```r
for (j in 1:10000) {
    lm((j + 1) ~ j)
}
```

Incluir fórmulas matemáticas de LaTeX.

Se pueden incluir ecuaciones usando la notación de LaTeX entre signos pesos, para ecuaciones en texto, o pares de signos pesos, para ecuaciones desplegadas.

Una ecuación en linea de texto como:
el siguiente modelo de regresión:\( y_i = \beta_{0} + \beta_{1} x_i + e_i \).

Y fórmulas desplegadas:

\[ \frac{sin(x)}{1+\cos(x)} \]
\[ e^{i\pi}+1=0 \]
\[ \int_{-\infty}^{\infty}\frac{1}{\sqrt{2\pi}}e^{-\frac{x^{2}}{2}} dx =1 \]

Tablas con R markdown.

Vea el código fuente para ver como se produce la siguiente tabla:

Día Gastos
1 Domingo $ 20000
2 Lunes $ 15000
3 Martes $ 10000

Hiperlinks.

Si le gusta este post visite mis publicaciones en misRpubs.

Imágenes

usta

Citas.

Si todos fueramos iguales, la Estadística no
existiría.


Conclusión.

Algunos ejemplos de googleVis.

Estos ejemplos son tomados de la ayuda del paquete googleVis de R. Se muestran aqui para mostrar la versatilidad de R markdown.

T <- gvisTable(Exports, options = list(width = 200, height = 280))
G <- gvisGeoChart(Exports, locationvar = "Country", colorvar = "Profit", options = list(width = 360, 
    height = 280, dataMode = "regions"))
TG <- gvisMerge(T, G, horizontal = TRUE, tableOptions = "bgcolor=\"#CCCCCC\" cellspacing=10")

print(TG, "chart")
PopTable <- gvisTable(Population, options = list(width = 600, height = 300, 
    page = "enable"))
print(PopTable, "chart")

Vea más opciones de los chunks de Sweave y knitr en options.


No olvide hacer las referencias…

citation("googleVis")
## 
## To cite the googleVis package in publications use:
## 
##   Markus Gesmann and Diego de Castillo. Using the Google
##   Visualisation API with R. The R Journal, 3(2):40-44, December
##   2011.
## 
## A BibTeX entry for LaTeX users is
## 
##   @Article{,
##     title = {googleVis: Interface between R and the Google Visualisation API},
##     author = {Markus Gesmann and Diego de Castillo},
##     journal = {The R Journal},
##     year = {2011},
##     volume = {3},
##     number = {2},
##     pages = {40--44},
##     month = {December},
##     url = {http://journal.r-project.org/archive/2011-2/RJournal_2011-2_Gesmann+de~Castillo.pdf},
##   }
citation("knitr")
## 
## To cite package 'knitr' in publications use:
## 
##   Yihui Xie (2012). knitr: A general-purpose package for dynamic
##   report generation in R. R package version 0.8.
##   http://CRAN.R-project.org/package=knitr
## 
## A BibTeX entry for LaTeX users is
## 
##   @Manual{,
##     title = {knitr: A general-purpose package for dynamic report generation in R},
##     author = {Yihui Xie},
##     year = {2012},
##     note = {R package version 0.8},
##     url = {http://CRAN.R-project.org/package=knitr},
##   }

Referencias

Yihui Xie (2012). knitr: A general-purpose package for dynamic report generation in R. R package version 0.5.http://CRAN.R-project.org/package=knitr

Esta página y su contenido son responsabilidad del autor y no necesariamente representa los puntos de vista y opiniones de la Universidad Santo Tomas, Usta. La información se da sin garantía expresa de precisión y exactitud. El uso de la información de esta página pertenece al usuario.

Generado el día : Mar 18 sept 12:35:21 2012 - knitr