Anasayfa » Mühendis Çantam, Bioinformatics

Parallel Processing in R – pblapply

15 Mart 2018 351 views Yorum Yok

Merhaba arkadaslar,

Server’daki bos duran processor’lari zayi etmemek ve ayni zamanda kendi zamanimizi da zayi etmemek icin güzel bir hayat kurtarıcı paket geliyor: pbapply. Aslında apply family’sinden cok farki yok, ancak çok daha rahat bir kullanım sunuyor. Ben pblapply icin kullandigim bir fonksiyonu sizinle paylasacagim:

Once cluster oluşturuyoruz. detectCores() ile gelen uygun processor’larin hepsini kullanmak sıkıntı olabilir. O yüzden -1 demek ideal. Ama server’i sizden baska kullananlar da varsa -4, -5 gibi değiştirebilirsiniz.

Ikinci adimda fonksiyonumuz icin ihtiyacımız olacak tum user-defined fonksiyonları ve variable’lari giriyoruz. Benim ornegimde user-defined fonksiyon yok, o yüzden sadece variable var 2 tane. Burada amacim meth.si (450K – methylated signal intensity)‘daki her rowname icin (ki bunlar benim cpg island’larim) assay.types dataframe’inde denk geldigi ID’yi bulup, bu ID’ye karsilik gelen Infinium Design Type’i alıyorum. Karsilik gelen “I” ve “II” degerlerini de onetwo variable’i olarak tutuyorum.

Bu benim specific ornegim, ancak siz tanimladiginiz FUN fonksiyonun da baska bir library’den fonksiyon kullanmak isteyebilirsiniz. O zaman da comment seklinde duran kismi kullanacaksınız. library fonksiyonunun içerisine de kullanacaginiz tum library isimlerini yazacaksınız.

Ben pb*apply fonksiyonlarından pblapply‘i kullanıyorum. Bu fonksiyonunun içerisinde tanimladigimiz Xfunction‘a input olarak verdigimiz her i degeri icin tekrarlanacak olan kisim, yani her processor’a independently dagitilacak olan kisim. pbapply fonksiyonlari, FUN olarak tanimladiginiz fonksiyon içerisinde oluşturulan en son degeri sizin outputunuza atıyor (benim ornegimde onetwo içerisine atanıyor). That’s it.

cluster = parallel::makeCluster(detectCores() – 1)

parallel::clusterExport(cl = cluster, varlist = c(“assay.types”, “meth.si”))

# invisible(parallel::clusterEvalQ(cl = cluster, expr = library(library1, library2)))

onetwo = pbapply::pblapply(cl = cluster, X = 1:nrow(meth.si), FUN = function(i){
assay.types$Infinium_Design_Type[which(assay.types$ID == rownames(meth.si)[i])]
})

Yoruma Açığız! :)

Be nice. İçeriği çirkin olmadığı sürece her yoruma, öneriye ve soruya "evet" :)

Etiketler: , , , , ,