Independientemente de las herramientas utilizadas para el análisis de datos, normalmente la manera de exponer los resultados es un documento de Word o una presentación Powerpoint.
En esta entrada crearemos una presentación Powerpoint e insertaremos una serie de gráficos y texto programáticamente, utilizando juntos los paquetes OfficeR y rvg. También aprovecharemos la ocasión para presentar (para quien no lo conozca) el operador ‘Pipe’ de gran utilidad a la hora de anidar funciones.

El paquete OfficeR permite acceder y manipular documentos Word y presentaciones PowerPoint, mientras que rvg, nos permitirá insertar las visualizaciones de R como objetos de Office que podremos manipular desde el documento.

Vamos a crear un template de PowerPoint en blanco, sin diapositivas. A continuación, utilizando R añadiremos diapositivas con texto y gráficos.
Advertencia, no es objeto de este post llegar a una presentación ‘bonita’, sino mostrar la funcionalidad 🙂

Necesitaremos tener instalados los paquetes:
– officer
– magrittr
– ggplot2
– rvg
Estos paquetes instalaran otros por tener dependencia.
Cargamos los paquetes:

library(officer)
library(magrittr)
library(ggplot2)
library(rvg)

Vamos a cargar en la sesión de R el template Powerpoint que guardamos antes, y comprobaremos la información del ‘layout’ del objeto rpptx con ‘layout_summary’, esta función también forma parte del paquete OfficeR y nos ofrece información sobre el diseño de las diapositivas.

my_presentation <- read_pptx("C:/BlogR/template.pptx")
layout_summary(my_presentation)

Esto nos devuelve:

                   layout       master
1              Title Slide Office Theme
2  Title and Vertical Text Office Theme
3  Vertical Title and Text Office Theme
4        Title and Content Office Theme
5           Section Header Office Theme
6              Two Content Office Theme
7               Comparison Office Theme
8               Title Only Office Theme
9                    Blank Office Theme
10    Content with Caption Office Theme
11    Picture with Caption Office Theme

Si quisiéramos cambiar algo en el máster de template.pptx deberíamos abrir la presentación Powerpoint y en ‘Slide Master’ dentro de ‘View’, ‘Master Layout’ cambiar los diseños:

A continuación, vamos a definir una serie de variables con el contenido que vamos a incluir en la presentación:

title1 <- "Summary"
title2 <- "Chart from image"
title3 <- "Editable chart using barplot()"
intro <- "In this post we are playing around to create and edit a Powerpoint presentation using R"
text1 <- "This visualization is embeded from an image file"
text2 <- "Now, this is an editable visualization created using barplot()"
footer <- "SolidQ 2017"

Paréntesis antes de continuar: El ‘Pipe’!
Antes de avanzar vamos a comentar el operador ‘%>%’ para que se entienda claramente el código a continuación. Este operador pertenece al paquete magrittr y nos permite ir anidando el código. Para verlo claro lo mejor es un ejemplo simple:
Supongamos que quiero resolver y = cos(log(x)), esto lo resolveríamos como:

y <- x %>% log() %>% cos()

Como vemos es una manera de anidar el código escribiendo ‘de dentro hacia afuera’ y en ocasiones puede resultar mucho más cómodo de escribir, y por supuesto, de leer.
Si buscamos sobre el pipe en R encontraremos múltiples referencias al lenguaje F#, pero si no se ha tenido la fortuna de utilizar este lenguaje (como es el caso de un servidor), quizá suene más ‘|’ de Shell o Terminal, en donde se anidan comandos.

Ahora que conocemos %>% vamos a añadir una diapositiva a nuestra presentación:

Repasemos el flujo que se puede ver en el código de arriba.
– Leemos y pasamos el fichero template.pptx al objeto my_presentation.
– Añadimos una diapositivas con add_slide, le decimos que use el diseño (layout) ‘Title Slide’ y el master ‘Office Theme’.
– Con ph_with_text añadimos el texto de tipo ‘ctrTitle’, es decir el título.
– De la misma forma añadimos un subtítulo ‘subTitle’ y un pie de página ‘ftr’.

Continuando de la misma forma añadiremos más diapositivas con texto y gráficos, resaltamos ph_with_img() a la que le pasamos la ruta de la imagen y ph_with_vg() a la que le pasamos la gráfica de R directamente . Utilizaremos datos aleatorios de ejemplo porque en esta sesión de R no tenemos ningún dataset de ejemplo cargado, pero nos sirve para ilustrar la idea.

my_presentation <-
  # Load template
  read_pptx("C:/BlogR/template.pptx") %>%
  # Add a slide
  add_slide(layout="Title Slide", master="Office Theme") %>%
  # Add title (ctrTitle)
  ph_with_text(type = "ctrTitle", str = "My first PPT made in R!!") %>% 
  # Add subtitle (subTitle)
  ph_with_text(type = "subTitle", str = "A simple way to embed R visualizations in Office!!") %>% 
  ph_with_text(type = "ftr", str = footer ) %>%

  # Summary Slide, add text using variables:
  add_slide(layout = "Title and Content", master = "Office Theme") %>% 
  ph_with_text(type = "title", index = 1, str = title1) %>%
  ph_with_text(type="body",str = intro ) %>% 
  ph_with_text(type = "ftr", str = footer ) %>%
  ph_with_text(type = "sldNum", str = "1" ) %>%
  ph_with_text(type = "dt", str = format(Sys.Date(),"%B %d,%Y")) %>%
  
  # Slide with Chart from an image:
  add_slide(layout = "Content with Caption", master = "Office Theme") %>%
  ph_with_text(type = "title", index = 1, str = title2) %>%
  ph_with_text(type = "body", index = 2,str = text1) %>% 
  ph_with_img(type = "body", index = 1, src = "C:/BlogR/visualization.PNG") %>%
  ph_with_text(type = "ftr", str = footer ) %>%
  ph_with_text(type = "sldNum", str = "2" ) %>%
  ph_with_text(type = "dt", str = format(Sys.Date(),"%B %d,%Y")) %>%
  
  # Slide with chart from R
  add_slide(layout = "Content with Caption", master = "Office Theme") %>%
  ph_with_text(type = "title", index = 1, str = title3) %>%
  ph_with_text(type = "body", index = 2,str = text2) %>% 
  ph_with_vg(code = barplot(sample(1:100,15),xlab="Day",ylab="SaleAmount"), type = "body") %>%
  ph_with_text(type = "ftr", str = footer ) %>%
  ph_with_text(type = "sldNum", str = "3" ) %>%
  ph_with_text(type = "dt", str = format(Sys.Date(),"%B %d,%Y")) %>%
  
  print( target = "C:/BlogR/officer_sample.pptx")  %>%
  invisible()

 

El resultado:

Y en particular en la última diapositiva tendremos un gráfico editable desde el Powerpoint 🙂

    

Esto es todo por hoy, ahí queda este recurso como uno más entre las capacidades de ‘autodocumentación’ que ofrece R.

A gusto del consumidor queda el cómo aprovechar estas funcionalidades.

Saludos!