У меня есть данные о повторных продажах нескольких автомобилей с уникальными идентификаторами. Автомобиль может быть продан более одного раза.
Однако некоторые из идентификаторов ошибочны, поэтому я проверяю для каждого идентификатора, записан ли размер одинаковым для нескольких продаж. Если это не так, то я знаю, что идентификатор ошибочен.
Я пытаюсь сделать это с помощью следующего кода:
library("doMC")
Data <- data.frame(ID=c(15432,67325,34623,15432,67325,34623),Size=c("Big","Med","Small","Big","Med","Big"))
compare <- function(v) all(sapply( as.list(v[-1]), FUN=function(z) {isTRUE(all.equal(z, v[1]))}))
IsGoodId = function(Id){
Sub = Data[Data$ID==Id,]
if (length(Sub[,1]) > 1){
return(compare(Sub[,"Size"]))
}else{
return(TRUE)
}
}
WhichAreGood = mclapply(unique(Data$ID),IsGoodId)
Но это мучительно, ужасно, ужасно медленно на моем четырехъядерном i5.
Кто-нибудь может увидеть, где узкое место? Я новичок в оптимизации R.
Спасибо, -Н