Paketet parallel – parSapply

Effektiv R-kod

Colin Gillespie

Jumping Rivers & Newcastle University

Apply-familjen

Det finns parallella versioner av

  • apply()- parApply()
  • sapply()- parSapply()
    • applicerar en funktion på en vektor, dvs. en for-loop
  • lapply()- parLapply()
    • applicerar en funktion på en lista
Effektiv R-kod

Funktionen sapply()

sapply() är bara ett annat sätt att skriva en for-loop

Loopen

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

Kan skrivas som

sapply(1:10, simulate)

Vi applicerar en funktion på varje värde i en vektor

Effektiv R-kod

Byta till parSapply()

Samma recept som vanligt!

  1. Läs in paketet
  2. Skapa ett kluster
  3. Byt till parSapply()
  4. Stopp!
Effektiv R-kod

Exempel: Pokémon-strider

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

Effektiv R-kod

Bootstrapping

I en perfekt värld skulle vi ta urval från populationen, men det är inte möjligt

I stället antar vi att det ursprungliga urvalet representerar populationen

  1. Ta urval med återläggning från dina data
    • Samma datapunkt kan förekomma flera gånger
  2. Beräkna korrelationsstatistiken från det nya urvalet
  3. Upprepa
Effektiv R-kod

En enskild 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))
Effektiv R-kod

Konvertera till parallell körning

  • Läs in paketet
  • Ange antal kärnor
  • Skapa ett klusterobjekt
  • Exportera funktioner/data
  • Byt till parSapply()
  • Stopp!
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)
Effektiv R-kod

Tidsåtgång

Effektiv R-kod

Nu kör vi en övning!

Effektiv R-kod

Preparing Video For Download...