domingo, 12 de febrero de 2012

Una animación con R



La idea es sencilla. Se trata de componer un vídeo mediante la unión de imágenes como en una película de dibujos animados.
En este ejemplo, vamos a utilizar el parámetro de amplitud h de una función coseno

f(t) = h*cos(omega(t-rho))

con omega=1 y rho=0 fijos.

En primer lugar fijamos los parámetros y hacemos un gráfico preliminar:

h <- 1
rho <- 0
omega <- 1

x <- seq(-1.5*pi+0.5, 2*pi+0.5, length=250)
y <- h*cos(omega*(x-rho))
plot(x, y, type="l", ylim=c(-1.5,1.5))
abline(h=0, v=0, col="grey75")



Ahora vamos a crear una secuencia de imágenes variando el parámetro h entre los valores 1 y 1.5 primero, después bajándolo hasta 0.5 y luego subiéndolo otra vez hasta 1.
Para un vídeo de 8 segundos necesitamos al menos 8*25=200 imágenes.

hnew <- c(seq(1, 1.5, by=0.01),
seq(1.48, 0.5, by=-0.01),
seq(0.52, 1, by=0.01))

También debemos crear una carpeta donde guardaremos todas las imágenes separadas del resto de documentos. La carpeta debe existir realmente para que la podamos utilizar.

# imagesDir <- "C:/Mis documentos/R/video"
imagesDir <- "/home/francesc/R/video"

A continuación abrimos el dispositivo para crear múltiples imágenes en formato PNG, dentro de la carpeta escogida y con una numeración de tres dígitos correlativa.

png(file.path(imagesDir, "Rplot%03d.png"))

Ahora ya podemos generar las imágenes con un for.

for (i in 1:length(hnew)){
plot(x, y, type="l", ylim=c(-1.5,1.5),
main=expression(f(t)==h*cos(omega*t-omega*rho)), lwd=2)
abline(h=0, v=0, col="grey75")
h <- hnew[i]
lines(x, h*cos(omega*(x-rho)), col=2)
lines(c(0,0),c(0,h), col=2, lwd=2)
lines(c(-0.05,0.05),c(h,h), col=2, lwd=2)
lines(c(-0.05,0.05),c(0,0), col=2, lwd=2)
lines(c(0,1.8), c(h/2,0.85), col=2, lwd=2)
text(1.9,0.87, paste("h=", round(h,2), sep=""), adj=0, col=2)
text(1.9,1.1, "Changing the amplitude:", font=2, adj=0, col=2)
}
dev.off()

La última instrucción cierra el dispositivo png.
El último paso es crear el vídeo con algún programa específico. Una opción es ImageMagick que se puede ejecutar desde la consola con la instrucción:

convert /home/francesc/R/video/*.png video.mpeg

En este caso no ha funcionado (otras veces sí) y he utilizado el programa OpenShot que permite crear vídeos con la importación de una secuencia de imágenes con el mismo nombre que nosotros le hemos dado: Rplot%03d.png.

¿Os animáis a crear vuestros vídeos?

miércoles, 8 de febrero de 2012

Sweave desde un editor de texto


En algún otro artículo ya he resaltado la importancia de utilizar Sweave para mezclar código de R con texto y producir informes automáticos con resultados estadísticos y gráficos dinámicos. Sweave se puede utilizar desde LibreOffice, no sin ciertas dificultades, con el paquete odfWeave, pero sin duda los mejores resultados se obtienen con el texto en formato LaTeX.

Supongamos que tenemos una buena instalación de R y de algún programa de LaTeX para nuestro sistema operativo. Entonces se puede ejecutar Sweave desde la consola de R o incluso desde una GUI como RStudio, pero es mucho mejor ejecutarlo desde el propio editor de LaTeX que seguramente es donde hemos escrito el documento .Rnw que queremos compilar. Este es el objetivo: ejecutar Sweave sobre el documento que estamos editando sin salir del editor.

Sweave en un sistema Windows

Supongamos que utilizamos Texmaker con la distribución MikTeX de LaTeX, aunque el procedimiento es similar si utilizamos otro editor y otra distribución de LaTeX.
Sweave viene con la distribución estándar de R y se puede ejecutar desde su consola, pero yo prefiero compilar el documento directamente desde el editor. Para ello necesitamos un archivo llamado Sweave.bat que se puede obtener en el CRAN dentro del archivo batchfiles_x.x-x.zip. Para instalar el archivo Sweave.bat debemos dejarlo en alguna carpeta que sea accesible en nuestro PATH o añadir dicha carpeta al PATH.
Ahora ya deberíamos ser capaces de ejecutar este .bat desde la consola, sólo necesitamos indicarle al editor donde encontrarlo.
Abrimos Texmaker y seleccionamos Opciones -> Configurar Texmaker e incluir la orden:

Sweave.bat --pdf %.Rnw

en alguna de las categorías, por ejemplo como Montaje rápido.

Un detalle importante: en Windows hay una dificultad añadida ya que necesitamos que LaTeX sea capaz de hallar el archivo Sweave.sty. Para ello debemos añadir el siguiente path

C:\Archivos de programa\R\R-x.x.x\share\texmf

en las MikTeX Options: Roots como se indica en esa página.

Sweave en un sistema Mac OS X

Los pasos para poner a punto un ordenador Mac OS X son incluso más sencillos que los explicados para un ordenador con Windows. Necesitamos el script Sweave.sh que hallaremos en el CRAN.
Para instalarlo, debemos copiarlo en

/usr/local/bin

y, dentro del programa Terminal, escribimos

sudo chmod +x /usr/local/bin/Sweave.sh

para hacerlo ejecutable.

Ahora ya podemos ejecutar este script desde la consola. Sin embargo, para que podamos ejecutarlo desde TEXshop, sólo hay que indicarle a TEXShop donde hallar dicho Sweave.sh.
Abrimos TEXShop y buscamos TEXShop→Preferences. Hacemos click en la pestaña Misc y escribimos

/usr/local/bin/Sweave.sh −ld

en el campo LaTeX Progam Personal Script.

Sweave en un sistema Linux

Para poner a punto un ordenador con Linux, el procedimiento es también muy sencillo, aunque los detalles pueden variar ligeramente dependiendo de la distribución y el editor utilizados. El ejemplo que explicaré se basa en Kubuntu Linux y el editor es Kile.
Para ejecutar Sweave desde el editor necesitamos el script Sweave.sh que podemos hallar en el CRAN. Luego instalaremos ese script en

/usr/local/bin

entonces abrimos la Konsole y escribimos

sudo chmod +x /usr/local/bin/Sweave.sh

para hacerlo ejecutable.
El siguiente paso es indicarle a Kile donde hallar este script. Abrimos Kile y hacemos click en Settings→Configure Kile. Nos vamos a Tools→Build y añadiremos una nueva herramienta que podemos llamar Sweave. En la ventana superior escribiremos la orden Sweave.sh y

−ld '%source'

en la de abajo.
Recordemos que el archivo Sweave.sty debe ser accesible.

Más información en el artículo:
http://www.scribd.com/doc/6451985/Learning-to-Sweave-in-APA-Style