parallel पैकेज - parSapply

कार्यकुशल R कोड लिखना

Colin Gillespie

Jumping Rivers & Newcastle University

apply फैमिली

{{1}} के parallel वर्शन मौजूद हैं

  • apply() - parApply()
  • sapply() - parSapply()
    • वेक्टर पर फंक्शन लगाना, यानी for लूप
  • lapply() - parLapply()
    • लिस्ट पर फंक्शन लगाना
कार्यकुशल R कोड लिखना

sapply() फंक्शन

sapply() एक for लूप लिखने का दूसरा तरीका है

लूप

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

इसे ऐसे भी लिख सकते हैं

sapply(1:10, simulate)

हम वेक्टर के हर मान पर एक फंक्शन लगा रहे हैं

कार्यकुशल R कोड लिखना

parSapply() पर स्विच करना

रेसिपी वही है!

  1. पैकेज लोड करें
  2. एक क्लस्टर बनाएँ
  3. parSapply() पर स्विच करें
  4. रोकें!
कार्यकुशल R कोड लिखना

उदाहरण: Pokemon बैटल्स

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

कार्यकुशल R कोड लिखना

Bootstrapping

आदर्श स्थिति में, हम population से दोबारा सैंपल लेते; पर ऐसा संभव नहीं

इसके बजाय, मान लेते हैं कि मूल सैंपल population का प्रतिनिधि है

  1. अपने डेटा से replacement के साथ सैंपल लें
    • वही बिंदु कई बार आ सकता है
  2. नए सैंपल से correlation सांख्यिकी निकालें
  3. दोहराएँ
कार्यकुशल R कोड लिखना

एक single 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))
कार्यकुशल R कोड लिखना

Parallel में बदलना

  • पैकेज लोड करें
  • कोर की संख्या तय करें
  • एक क्लस्टर ऑब्जेक्ट बनाएँ
  • फंक्शन/डेटा एक्सपोर्ट करें
  • parSapply() पर स्वैप करें
  • रोकें!
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)
कार्यकुशल R कोड लिखना

Timings

कार्यकुशल R कोड लिखना

अभ्यास करते हैं!

कार्यकुशल R कोड लिखना

Preparing Video For Download...