Category: Spanish

Informes dinámicos, elegantes, rápidos y flexibles con R: knitr (Rmd, Rnw, Lyx-LATEX)

El paquete knitr: una forma de tejer nuestros informes.

El paquete knitr nos permite generar informes html y pdf mediante módulos (o “chuncks”), y así “tejer” (de ahí el icono de knitr) un documento en pequeñas funciones manejables. En particular, nos permite:

  1. obtener un informe rápido y flexible, 
  2. generar un archivo html (Rmd) o pdf (Rwn), 
  3. integrar herramientas como LATEX (el programa amigable de LATEX que recomiendo -y uso- es LyX).
En el siguiente video se muestra cómo instalar el paquete (simplemente, install.packages(“knitr”)) y adaptar RStudio para trabajar con él (options->cambiar de Sweave a knitr). Se detallan cómo formar los módulos para trabajar con Rmd y/o con Rnw.

En la página web de knitr podrán obtener archivos de ejemplos para descargar y aprender a usar knitr.

Generar informes pdf con código LATEX

Por ejemplo, para Rnw basta con darle las siguientes órdenes básicas:

Primero file->new->Rnw. Verás que el archivo ya comienza con la información básica que necesitas.

\documentclass{article}
\usepackage[T1]{fontenc}
 
\begin{document}
 
Here is a code chunk.
 
<<foo, fig.height=4>>=
1+1
letters
chartr('xie', 'XIE', c('xie yihui', 'Yihui Xie'))
par(mar=c(4, 4, .2, .2)); plot(rnorm(100))
@
 
You can also write inline expressions, e.g. $\pi=\Sexpr{pi}$, and \Sexpr{1.598673e8} is a big number.
 
\end{document}

Aquí está el resultado en pdf.

Generar informes html con código LATEX

Por ejemplo, para Rmd basta con darle las siguientes órdenes básicas:

Primero file->new->Rmd. Nuevamente, el archivo comienza con el código básico que necesitamos para construir el documento.

# A minimal R Markdown example
 
A quote:
 
> Markdown is not LaTeX.
 
To compile me, run this in R:
 
library(knitr)
knit('001-minimal.Rmd')
 
See [output here](https://github.com/yihui/knitr-examples/blob/master/001-minimal.md).
 
## code chunks
 
A _paragraph_ here. A code chunk below (remember the three backticks):
 
```{r}
1+1
.4-.7+.3 # what? it is not zero!
`
``
 
## graphics
 
It is easy.
 
```{r}
plot(1:10)
hist(rnorm(1000))
`
``
 
## inline code
 
Yes I know the value of pi is `r pi`, and 2 times pi is `r 2*pi`.
 
## math
 
Sigh. You cannot live without math equations. OK, here we go: $\alpha+\beta=\gamma$. Note this is not supported by native markdown. You probably want to try RStudio, or at least the R package **markdown**, or the function `knitr::knit2html()`.
 
## nested code chunks
 
You can write code within other elements, e.g. a list
 
1. foo is good
```{r}
strsplit('hello indented world', ' ')[[1]]
`
``
2. bar is better
 
## conclusion
 
Nothing fancy. You are ready to go. When you become picky, go to the [knitr website](http://yihui.name/knitr/).
 
![knitr logo](http://yihui.name/knitr/images/knit-logo.png)

Una vez que guardes los archivos de códigos, para ver los informes solo tienes que poner en la consola de R:

library(knitr)
knit('knitr-minimal.Rnw')
knit('knitr-minimal.Rhtml')
knit('knitr-minimal.Rmd')

En próximas entradas comentaré cómo pasar de un tipo de archivo a otro y nuevas herramientas de knitr a explorar.

Saludos!

Graficar con estilo xkcd en R!

Ahora podemos crear gráficos en R con el estilo xkcd! 


Web: http://xkcd.com

Los comics xkcd son creados por Randall Munroe (un cómic web de romance, sarcasmo, matemáticas e idioma” –en español-), un diseñador de robots de la NASA, natural de Chesterfield, Virginia (actualmente vive en Somerville, Massachusetts).

Para crear nuestros propios gráficos debemos instalar el paquete xkcd. En el propio paquete, se encuentran ejemplos de gráficos de puntos, histogramas, etc.
library(xkcd)
vignette
("xkcd-intro")
Por ejemplo, podemos crear el siguiente gráfico:

Knitr: integrar código R en archivos de distintos formatos

Knitr

Knitr es un paquete nuevo de R que permite integrar código R en archivos de distintos formatos (ver tabla 1 y figura 1). Es más potente que los anteriores paquetes Sweave, pdfSweave o cacheSweave.

Ver la entrada anterior sobre knitr.

Format Source file ending Output R Code Chunk R expression
Rnw Rnw (.Rnw) Tex, pdf
<<R example>>=
x <- 1+1
rnorm(5)
@
\Sexpr{pi}
Github format markdown Markdown (.Rmd or .md) md, html
``` {r example}
x <- 1+1
rnorm(5)
```
`r pi`.
HTML Rhtml .html
<!--R example
x <- 1+1
rnorm(5)
end.rcode-->
<!--rinline pi -->

reStructuredText .Rst .rst .. {R example}

.. x <- 1+1

.. rnorm(5)

.. ..

NOTE:include space after the ..

:r:`pi`
Tabla 1. Tipos de archivos que maneja knitr. Fuente: http://www.rstudio.com/shiny/

Aquí tienes una introducción al paquete knitr.

Knitr nos permite utilizar Markdown y R juntos! 

¿Que puede hacer markdown por mi?

  •  Quiero olvidarme del instrumento para pensar sólo en lo que estoy escribiendo
  •  Quiero escribir sin preocuparme del aspecto
  •  Quiero reutilizar lo que ya sé
  •  Quiero índices, bibliografía, …
  •  Quiero documentos ligeros
  •  Quiero escribir como me convenga, para el lector lo que necesite
  •  Quiero poder recortar y pegar a sin problemas
  •  Quiero trabajar con mis colegas

Proceso en investigación reproducible

  1. Elaboración del documento donde se auna la escritura del código y los textos necesarios. En markdonw y R la extensión del fichero es .Rmd
  2. Procesado del documento por la aplicación correspondiente a lenguaje de trabajo, en nuestro caso R. Creación de un documento en el formato deseado; en nuetro caso un documento .md
  3. Procesado, en su caso, del documento resultante, por ejemplo: elaboración de un documento .pdf.
Para un adecuado seguimiento del trabajo, al final o el inicio, conviene añadir:
print(sessionInfo(), locale = FALSE)

Tipos de archivos que podemos generar

En un post anterior, he colgado un video sobre cómo usar knitr, mediante archivos Rnw y Rmd.

Rnw

Descargar el archivo exampleSweave.rnw.
  • Para construir un archivo tex.
Sweave(file="exampleSweave.Rnw")
  • Para convertir el archivo tex a un pdf.
tools::texi2dvi(file="exampleSweave.tex", pdf=TRUE)
  • Para extraer el código R de los trozos o módulos (“chunks”).
Stangle(file="exampleSweave.Rnw")
  • Para producir un archivo html.
Sweave("filename.rnw", driver=RweaveHTML)
    library(knitr)
    knit('knitr-minimal.Rnw')

    También podemos utilizar el programa pandoc (conversor universal) para convertir el archivo Rnw a otros formatos:

    # system("pandoc -s exampleSweave.Rnw -o exampleSweave.pdf") 
    # system("pandoc -s exampleSweave.Rnw -o exampleSweave.docx")
    # system("pandoc -s exampleSweave.Rnw -o exampleSweave.html")

    Rmd

    # Create mark down (.md) file 
    knit("example.Rmd")
    knit2html("example.Rmd")
    knit2pdf("example.Rmd")

     manipular

    require(knitr)
    # Produce the markdown (.md) file
    knit("example.Rmd")

    # help on the output and input formats accepted which include json, html, html5, odt, docx and epub and slide formats slidy, beamer, dzslides etc
    system("pandoc -h")
    # pdf file
    pandoc("example.md", format="latex")
    # html file
    pandoc("example.md", format="html5+lhs")
    # OpenOffice File
    pandoc("example.md", format="odt")
    # Microsoft Word
    pandoc("example.md", format="docx")

    Podemos ver el archivo Rmd de entrada slides.Rmd y el archivo html de salida slides.html.

    También podemos utilizar pandoc de la siguiente manera.

    knit("slides.Rmd")
    system("pandoc -s -S -i -t dzslides --mathjax slides.md -o slides.html")

    Programas relacionados con knitr

    Slidify: resultados html5

    Un paquete relacionado con knitr es Slidify (http://ramnathv.github.io/slidify/), que permite realizar presentaciones html5 a partir de nuestros archivos Markdown.

    Ayuda a crear, personalizar y compartir documentos elegantes, dinámicos e interactivos a través de HTML5 – R – Markdown.

     

    Información extra que puedes necesitar.

    • Cómo instalar Lyx-LATEX

    • Diferencias entre Sweave y Knitr

    • Instalación de Pandoc

    Los usuarios de Windows están de suerte. Instalar Pandoc en Windows ahora es muy fácil. Se puede hacer desde R con el paquete installr. Una vez instalado este paquete en R, ejecutaremos la instrucción
    library(installr)
    install.pandoc()

    • Utilizar pander: el paquete Pandoc en R

    Logo, vuelve la tortuga con TurtleGraphics en R!

    No pude contenerme. Navegando en busca de ampliar algunas herramientas de R, me he topado con este proyecto que me ha recordado mi niñez. Se trata del paquete  TurtleGraphics que acerca a R el programa Logo. Logo es un lenguaje de programación creado por los años sesenta y que sirve para trabajar con niños y jóvenes dado que es muy sencillo. Recuerdo conocerlo gracias al profesor de informática de la escuela cuando era muy pequeña; era aquella tortuga que hacíamos girar y crear mandalas con algunas pequeñas órdenes. Bueno, la tortuga ha dado el salto y ya está en R! me parece genial esta oportunidad de acercar el lenguaje de programación a los niños y además enseñarles programas con tanto potencial como R.

    Aquí tienen un manual Paso a Paso para aprender a manejar esta tortuga en R.  Con una lista de órdenes sencillas podemos crear gráficos como el siguiente:

    Fundamentalmente consiste en presentar a los niños retos intelectuales que puedan ser resueltos mediante el desarrollo de programas en Logo. El proceso de revisión manual de los errores contribuye a que el niño desarrolle habilidades metacognitivas al poner en práctica procesos de autocorrección. Es conocido por poder manejar con facilidad gráficas tortuga, listas, archivos y recursividad

    instalaciones conocidas en el lenguaje de programación Logo. La idea clave detrás del paquete es animar a los niños a aprender a programar y demostrar que el trabajo con los ordenadores puede ser divertido y creativo. 

    Sobre el paquete  TurtleGraphics

    El paquete TurtleGraphics permite crear gráficos simples o más sofisticados sobre la base de líneas. La tortuga, descrito por su ubicación y orientación, se mueve con comandos que están en relación con su posición. La línea que deja tras de sí se puede controlar mediante la desactivación o estableciendo su color y tipo.

    El paquete TurtleGraphics ofrece funciones para avanzar o retroceder por una distancia determinada y girar la tortuga por un ángulo elegido. Distintas opciones de gráficos, por ejemplo, el color, el tipo o la visibilidad de la línea, también se pueden cambiar fácilmente. 

    Le recomendamos que lo pruebes tú mismo. Disfrutar y divertirse!

    CARONTE: Una función en R para crear archivos de landmarks en 2D en formato TNT, a partir de archivos en formato TPS

    En 2010, Santiago Catalano, Pablo Goloboff y Norberto Giannini, implementarón el uso de landmarks (datos morfogeométricos) en un contexto filogenético. El enfoque esta basado en encontrar para cada uno de los landmarks, la posición ancestral que minimiza la distancia entre los puntos del ancestro/descendiente (entre las terminales y los nodos) a través del árbol. Maximizando el grado en el cual posiciones similares de cada uno de los landmarks en diferentes taxa puedan estar representando o sean explicados por ancestría común(es decir, via Parsimonia). (Catalano et al., 2010).

    Los algoritmos para la optimización de landmarks bajo el principio de parsimonia son descritos en (Goloboff & Catalano, 2011) y el método esta basado en una primera aproximación usando rejillas y subsecuente-mente haciendo un refinamiento iterativo de los puntos inicialmente estimados. Estos algoritmos son implementados en el programa TNT (Tree Analysis using New Technologies; Goloboff et al. 2003, 2008).
    Recientemente, Catalano & Goloboff (2012) presentaron un método que utiliza los dos pasos (mapeo y alineamiento de configuraciones) dentro de un solo proceso al mismo tiempo, en el que para un árbol dado, se producen múltiples alineamientos y asignaciones de estados ancestrales, tales que la sumatoria de las distancias euclidianas entre los landmarks correspondientes a través de los nodos del árbol son minimizadas.
    Finalmente, ellos implementaron búsquedas de árboles  usando datos continuos de información morfogeométrica/landmarks, pero por ahora este artículo no ha sido publicado. (comunicación personal) 


    Como ya lo dije, TNT implementa el uso de landmarks en un contexto filogenético. Entonces, este programa toma los datos de landmarks en formato TNT (.tnt) para hacer sus análisis.

    El problema es que la mayoría de programas que se usan para digitalizar landmarks en 2D y 3D (TPSdig, Morpheus, Morphologika, etc) e incluso los paquetes de R que entre sus funciones tiene la digitalización de landmarks (shapes, geomorph, etc) dan como output o escriben los datos de coordenadas en formato TPS, el cual casi que podría decirse que es el formato universal de datos de landmarks. 

    Santiago Catalano resolvió este problema de incompatibilidad de formatos, y escribió un pequeño programa en MS-DOS, llamado TPS2TNT, el cual permite escribir archivos TNT desde un archivo TPS. 
    Este programa, a pesar de ser muy útil y hasta el momento el único de su tipo posee algunas limitaciones prácticas para su utilización (entre otras):
    -Al ser escrito para MS-DOS, restringe su utilización a usuarios del sistema operativo de Microsoft Windows. (aunque podría intentarse usar bajo wine en Linux y/u otro tipo de programas en Mac OS )
    -Aunque se han publicado en la red tutoriales o algunas instrucciones para su utilización, 
    e incluso video-tutoriales, la verdad es que la interfaz y las instrucciones del programa son muy poco amigables con el usuario, y ademas esta poco documentado tanto su código como su utilización.

    -El programa, en algunas ocasiones, no recibe archivos en formato TPS que hayan sido generados por otro software sin antes ser limpiados de algunas lineas que hacen imposible su utilización. (Por ejemplo, el programa tpsRelw, adiciona a los archivos .tps comentarios como el siguiente para cada especie que esta en el archivo:


    COMMENT=GLS aligned (from tpsRelw, ver. 1.49)

    de manera que para poder utilizar TPS2TNT, el usuario debe previamente eliminar estas lineas una por una manualmente dentro de su archivo en formato .tps, lo cual hace un poco tediosa la manipulación y aumenta por supuesto el tiempo requerido a medida que aumenta el número de taxa del análisis.


    CARONTE:

    Caronte, es una función que permite pasar archivos de datos de landmarks de 2 dimensiones en formato TPS (.tps) a formato TNT (tnt), que trata de evitar los problemas prácticos que sufre TPS2TNT. 
    Caronte fue escrita en lenguaje R, por Ambrosio Torres (quien les escribe) del Laboratorio de Sistemática & Biogeografía, Universidad Industrial de Santander (Bucaramanga, Colombia), esta función necesita que este instalado el paquete ‘geomorph‘ de R, escrito por Dean Adams, Erik Otarola-Castillo, Emma Sherra y que la versión de R instalada en el computador sea ≥ 2.10.
    Caronte fue escrita utilizando R 3.1.0. en una distribución Ubuntu 12.04 de 64 bits (x86_64-pc-linux-gnu), bajo licencia GPL (>= 2).
    El nombre de la función esta basado en la mitología griega, específicamente en Caronte, quien era el barquero de Hades, el encargado de guiar las sombras errantes de los difuntos recientes de un lado a otro del rio Aqueronte si tenían un Óbolo para pagar el viaje, razón por la cual en la Antigua Grecia los cadáveres se enterraban con una moneda bajo la lengua. Aquellos que no podían pagar tenían que vagar cien años por las riberas del Aqueronte, tiempo después del cual Caronte accedía a portearlos sin cobrar.

    Como se usa la función:

    Una vez hayas descargado la función del repositorio de GibHub, (recuerda que la función se llama ‘caronte.R’ ), solo tienes que cargar el archivo en R o RStudio con el siguiente comando:


    >source(‘~/Desktop/my_folder/caronte.R’)

    El cuerpo de la función es el siguiente: 
    >caronte(x, algn = TRUE, w_algn_tps = FALSE)


    La función puede tomar tres argumentos que el usuario puede manipular libremente:


    -x es el nombre del archivo tps sin el .tps (por ejemplo, si tu archivo tps es llamado “datos.tps” tu solo pondras “datos”

    -algn es un argumento para alinear tus configuraciones/datos. Si tu escoges TRUE o T, caronte llamara a la función ‘gpagen’ del paquete “geomorph”, esta función hará un análisis generalizado de Procrustes (que puede ser para 2 o 3 dimensiones, 2 en nuestro caso). Mientras si tu escoges FALSE o F, significa que tu no quieres alinear tus datos o que quizá tus datos fuerón previamente alineados usando otro programa o el mismo R. Por defecto el argumento algn es TRUE.

    -w_algn_tps es un argumento que permite escribir los datos que acaban de ser alineados (obviamente en el caso de que tu hubieras escogido alinear tus datos, algn = T), de manera que si tu escoges w_algn_tps = TRUE o R, caronte llamara la función ‘writeland.tps’ del paquete “geomorph”, esta función escribe los nuevos datos que han sido alineados, en un archivo llamado “aligned_data.tps” dentro de tu directorio de trabajo, usando los datos originales sin alinear. En caso de que tu escojas FALSE o F, significa que tu no quieres escribir tus datos alineados en un archivo diferente del original. Por defecto, w_algn_tps is FALSE.


    FINALMENTE LA FUNCIÓN ESCRIBIRA EN NUESTRO DIRECTORIO DE TRABAJO, UN ARCHIVO EN FORMATO TNT QUE CONTENGA NUESTROS DATOS, LLAMADO “data_to_tnt.tnt”.


    Aquí tienen algunos ejemplos acerca de como usar la función caronte en la consola de R o en RStudio:
    >caronte(“datos”) ## si no especificas algn y w_algn_tps, los valores serán tomados por ##defecto
    >caronte(“datos”, algn=FALSE, w_algn_tps =TRUE)
    >caronte(“datos”, algn=T)
    >caronte(“datos”, w_algn=T)
    En el repositorio de GitHub hay 3 archivos de ejemplo para que puedan usar y probar la función en R, el primero es un archivo llamado “aves_birds.tps“, que son los datos originales, después hay una archivo llamado “aves_birds.tnt” que muestra como quedan los resultados en formato tnt después de haber utilizado la función caronte.
    El úlitmo archivo es llamado “aves_birds_algn.tps” que muestra como quedan escritos los datos alineados en formato tps después de haber utilizado la función caronte.

    Espero pronto poderles escribir nuevamente ya que tenía re-abandonado el blog, pero es que ahora tengo muchísimas cosas por hacer y ando ocupado hasta el cansancio.

    Espero también que les haya gustado la función y tan pronto como pueda les enseñare la extensión de la función caronte para datos en 3 dimensiones. Y así mismo como ya lo prometí utilizaré como guia el código de caronte para explicar principios básicos de programación en R.

    HASTA PRONTO!!