Pachetul parallel - parSapply

Scrierea codului R eficient

Colin Gillespie

Jumping Rivers & Newcastle University

Familia apply

Există versiuni paralele ale

  • apply()- parApply()
  • sapply()- parSapply()
    • aplicarea unei funcții pe un vector, adică o buclă for
  • lapply()- parLapply()
    • aplicarea unei funcții pe o listă
Scrierea codului R eficient

Funcția sapply()

sapply() este o altă modalitate de a scrie o buclă for

Bucla

for(i in 1:10)
    x[i] <- simulate(i)

Poate fi scrisă ca

sapply(1:10, simulate)

Aplicăm o funcție fiecărei valori dintr-un vector

Scrierea codului R eficient

Trecerea la parSapply()

Aceeași rețetă!

  1. Încărcați pachetul
  2. Creați un cluster
  3. Treceți la parSapply()
  4. Opriți!
Scrierea codului R eficient

Exemplu: bătălii Pokémon

plot(pokemon$Defense, pokemon$Attack)
abline(lm(pokemon$Attack ~ pokemon$Defense), col = 2)
cor(pokemon$Attack, pokemon$Defense)
0.437

Scrierea codului R eficient

Bootstrapping

Ideal, am reeșantiona din populație; dar nu putem

În schimb, presupunem că eșantionul original este reprezentativ pentru populație

  1. Eșantionați cu înlocuire din datele dvs.
    • Același punct poate apărea de mai multe ori
  2. Calculați corelația din noul eșantion
  3. Repetați
Scrierea codului R eficient

Un singur bootstrap

bootstrap <- function(data_set) {
    # Sample with replacement
    s <- sample(1:nrow(data_set), replace = TRUE)
    new_data <- data_set[s,]

    # Calculate the correlation
    cor(new_data$Attack, new_data$Defense)
}
# 100 independent bootstrap simulations
sapply(1:100, function(i) bootstrap(pokemon))
Scrierea codului R eficient

Conversia la execuție paralelă

  • Încărcați pachetul
  • Specificați numărul de nuclee
  • Creați un obiect cluster
  • Exportați funcții/date
  • Treceți la parSapply()
  • Opriți!
library("parallel")
no_of_cores <- 7
cl <- makeCluster(no_of_cores)
clusterExport(cl,
  c("bootstrap", "pokemon"))
parSapply(cl, 1:100,
  function(i) bootstrap(pokemon))
stopCluster(cl)
Scrierea codului R eficient

Timpi de execuție

Scrierea codului R eficient

Să exersăm!

Scrierea codului R eficient

Preparing Video For Download...