Более быстрые способы обработки в R - CUTOFF - PullRequest
0 голосов
/ 19 мая 2018

Я задаю вам следующий вопрос.Предположим, у меня есть следующая база данных, и я пытаюсь рассчитать каждое из распределений в дб (функция em дает значение каждого среднего бимодального распределения).Проблема в том, что обработка идет очень медленно.Это займет 2,3 минуты только для 6 идентификаторов (представьте, если я должен сделать это для тысяч идентификаторов).Можете ли вы придумать другой, более быстрый способ обработки этих данных (например, параллельно, с другой функцией, использующей более одного ядра)?

Спасибо!

N <- 100000

components <- sample(1:3,prob=c(0.3,0.5,0.2),size=N,replace=TRUE)
mus <- c(0,10,3)
sds <- sqrt(c(1,1,0.1))

samples <- rnorm(n=N,mean=mus[components],sd=sds[components])

db<-data.frame(id=c('a','b','c','d','e','f'),dist=c(samples,samples*0.9,samples*1.1,samples*1.2,samples*0.98,samples*0.88))
db$id<-as.character(db$id)

# install.packages("bbmle")
# devtools::install_github("choisy/cutoff")
library(cutoff)

IDS<-unique(db$id)

system.time(
bimod <- lapply(1:length(unique(db$id)), function(x){
                                        x<-db[db$id==IDS[x],]$dist

                                        tryCatch({ em(x,"normal","normal") }, error=function(e){cat("ERROR :",conditionMessage(e), "\n")}) 
  })
)

126.675  11.697 140.838
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...