R en paralelo (pero ahora, con futuros)

Esta entrada extiende y mejora una homónima de 2014.

El problema de entonces consistía en calcular por separado y en paralelo objetos A, B y C para combinarlos después. Cuando, por supuesto, el cálculo de A, B y C es pesado.

El muy reciente paquete future incorpora a R un mecanismo disponible en otros lenguajes de programación: un cierto tipo de datos, los futuros, que contienen promesas de valores que se calculan fuera del hilo principal del programa. Se usan, por ejemplo, para realizar llamadas a APIs, operaciones de IO o (y esto es más pertinente para usuarios de R) cálculos que llevan su tiempico.

Mirad el código de entonces y comparadlo con:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
library(future)

plan(multiprocess)

a0 <- future({
  Sys.sleep(3)
  10
})

b0 <- future({
  Sys.sleep(3)
  11
})

system.time(
  res <- list(value(a0), value(b0))
)

Para más detalles, las viñetas.