Cosas chulas para probar en R

Virginia Peón
4 min readJan 11, 2019

--

Estas navidades he aprovechado a jugar con R y quiero compartir con vosotros algunas librerías con las que he estado trasteando.

Barra de progreso

¿Eres impaciente? ¿Te gusta saber cuánto falta para que finalice un bucle? Entonces te gustará vsMisc:

# install.packages("svMisc")require(svMisc)for (i in 0:101) {
progress(i, progress.bar = TRUE)
Sys.sleep(0.02)
if (i == 101) cat("Done!\n")
}

Alejar las etiquetas de los gráficos para que no se solapen

¿Estás haciendo un gráfico con ggplot y las etiquetas se pisan unas a otras? Prueba con ggrepel:

# Gráfico standarlibrary(ggplot2)ggplot(mtcars, aes(wt, mpg, label = rownames(mtcars))) +
geom_text() +
geom_point(color = 'red') +
theme_classic(base_size = 16)
# Gráfico con ggrepel# install.packages("ggrepel")
library(ggrepel)
ggplot(mtcars, aes(wt, mpg, label = rownames(mtcars))) +
geom_text_repel() +
geom_point(color = 'red') +
theme_classic(base_size = 16)

Visualizar dependencias dentro de un paquete

¿Curioso por naturaleza? Con DependenciesGraphs podrás estudiar las dependencias de las funciones de un paquete:

# devtools::install_github("datastorm-open/DependenciesGraphs")require(DependenciesGraphs)# Cargar la librería que queremos estudiar
library(plyr,quietly = TRUE)
# Dependencias de la función count del paquete plyr
plot(funDependencies("package:plyr","count"))
# Todas las dependencias de plyr
plot(envirDependencies("package:plyr"))

Crear gifs

¿Quieres dar vida a tus gráficos? Con magick podrás crear gifs:

# install.packages("magick")dir.create("examples")
setwd("examples")
# Gif para contar de 10 a 1# Un archivo png para cada imagen
png(file="example%02d.png", width=200, height=200)
for (i in c(10:1, "G0!")){
plot.new()
text(.5, .5, i, cex = 6)
}
dev.off()
# Convertir archivos .png en uno one .gif usando ImageMagick.
system("convert -delay 80 *.png example_1.gif")
# Borrar los archivos png
file.remove(list.files(pattern=".png"))

API Prophet

¿Has oído hablar del API de Prophet de Facebook para realizar pronósticos de series temporales? Puedes usarla con R y el paquete prophet:

# install.packages("prophet")library(prophet)df <- data.frame(
ds = seq(as.Date('2015-01-01'), as.Date('2016-01-01'), by = 'd'),
y = sin(1:366/200) + rnorm(366)/10)
plot(y ~ ds, df, type = "l") # Gráfico de los datos
m <- prophet(df)
future <- make_future_dataframe(m, periods = 365)plot(m, forecast)
prophet_plot_components(m, forecast)
prophet_plot_components(m, forecast)

Gráficos en tiempo real

¿Sabes que con R puedes hacer tener un gráfico de tus datos en tiempo real con flus.console()?

# Función para simular los datos en tiempo realdataRow <- function(){

Sys.sleep(1)

aRow <- data.frame(Sys.time(), rnorm(1))
names(aRow) <- c("date", "data")

return(aRow)

}

Vamos a generar un gráfico que vaya aumentando según tengamos más datos

i <- 1while(1){

ifelse(i == 1,
df <- rbind(dataRow(), dataRow()),
df <- rbind(df, dataRow())
)

flush.console()

plot(df$date, df$data, type='l', xlab="", ylab="")

i <- 2

}

Vamos a generar un gráfico que sólo muestre una ventana de los últimos 10 datos:

window <- 10
i <- 1
while(1){

if(i == 1) {
df <- rbind(dataRow(), dataRow())
} else if(i <= window) {
df <- rbind(df, dataRow())
} else {
df[i%%window, ] <- dataRow()
}
df <- df[order(df$date), ]

flush.console()

plot(df$date, df$data, type='l', xlab="", ylab="")
i <- i+1}

Juegos

Si ya has llegado hasta aquí probando todo lo anterior te has ganado un merecido descanso. A jugar con fun :-)

  • Clásico buscaminas.
# install.packages("fun")library(fun)if (interactive()) {
if (.Platform$OS.type == "windows")
x11() else x11(type = "Xlib")
mine_sweeper()
}
  • Puzzle.
if (interactive()) {
if (.Platform$OS.type == "windows")
x11() else x11(type = "Xlib")
sliding_puzzle()
sliding_puzzle(z = matrix(0:11, 3, 4))
}
  • Apagar las luces.
if (interactive()) {
if (.Platform$OS.type == "windows")
x11() else x11(type = "Xlib")
lights_out()
}

--

--