+ - 0:00:00
Notes for current slide
Notes for next slide

¿Cómo crear una API REST con R?

Pachá

Grupo de Usuarios de R Santiago

2018-04-11

1 / 12

DigitalOcean

  • Digitalocean.com
  • Voy a mostrar ejemplos usando una máquina virtual escalable
  • Es útil si necesito el output de un modelo que no puedo correr en mi notebook
  • Si no tienes cuenta puedes acceder con m.do.co/c/6119f0430dad y tendrás 100 USD de crédito
  • Usa la imagen que subí y que ya trae RStudio Server marketplace.digitalocean.com/apps/rstudio
2 / 12

Plumber

  • Genera una API REST
  • Similar a escribir paquetes de R
  • Usa los conceptos de get, post y put
3 / 12

Modelo lineal, parte 1

Modelo lineal usando datos de datos:

pacman::p_load_gh("pachamaltese/datos")
modelo <- lm(precio ~ quilate, data = diamantes)
coef(modelo)
## (Intercept) quilate
## -2256.361 7756.426
4 / 12

Modelo lineal, parte 2

Usando plumber

#* modelo
#* @param x variable independiente
#* @param y variable dependiente
#* @get /modelo
function(x, y) {
form <- as.formula(paste(y, x, sep = "~"))
summary(lm(form, data = diamantes))
}
5 / 12

Modelo lineal, parte 3

Para ejecutar:

r <- plumb("plumber.R")
r$run(port=8000)
6 / 12

Modelo lineal, parte 4

La prueba debe dar error, plumber por default devuelve un data.frame convertido a JSON.

Cambios necesarios:

#* modelo
#* @param x variable independiente
#* @param y variable dependiente
#* @get /modelo
function(x, y) {
form <- as.formula(paste(y, x, sep = "~"))
broom::tidy(lm(form, data = diamantes))
}
7 / 12

Modelo lineal, parte 5

Más opciones:

#* modelo2
#* @param x variable independiente
#* @param y variable dependiente
#* @param m modelo
#* @get /modelo2
function(x, y, m) {
form <- switch(m,
"lin" = as.formula(paste(y, x, sep = "~")),
"log" = as.formula(sprintf("I(log(%s)) ~ I(log(%s))", y ,x))
)
broom::tidy(lm(form, data = diamantes))
}
8 / 12

Advertencias

  • Plumber jamás debería usarse sin https cuando hay datos sensibles en uso
  • Sin una configuración https debería reservarse a la intranet
  • Por ejemplo, si no hago un control mínimo como x <- substr(x, 1, 5) un usuario podría pasar SELECT * FROM public.clientes u otro comando para obtener más datos de lo que quiero que vea
9 / 12

Extensiones

  • Se puede levantar el servicio con docker, pm2 o systemd
  • Se puede integrar con Shiny
10 / 12

Contacto

Twitter y Github: pachamaltese

Email: pacha arroba dcc punto uchile punto cl

11 / 12

This work is licensed as

Creative Commons Attribution-NonCommercial 4.0 International

To view a copy of this license visit https://creativecommons.org/licenses/by-nc/4.0/

12 / 12

DigitalOcean

  • Digitalocean.com
  • Voy a mostrar ejemplos usando una máquina virtual escalable
  • Es útil si necesito el output de un modelo que no puedo correr en mi notebook
  • Si no tienes cuenta puedes acceder con m.do.co/c/6119f0430dad y tendrás 100 USD de crédito
  • Usa la imagen que subí y que ya trae RStudio Server marketplace.digitalocean.com/apps/rstudio
2 / 12
Paused

Help

Keyboard shortcuts

, , Pg Up, k Go to previous slide
, , Pg Dn, Space, j Go to next slide
Home Go to first slide
End Go to last slide
Number + Return Go to specific slide
b / m / f Toggle blackout / mirrored / fullscreen mode
c Clone slideshow
p Toggle presenter mode
t Restart the presentation timer
?, h Toggle this help
Esc Back to slideshow