[datatable-help] Looking for a faster method
Arunkumar Srinivasan
aragorn168b at gmail.com
Sun Aug 25 22:58:56 CEST 2013
How about this?
system.time(out <- data.table(id=seq(vec2), val=vec2, key="val")[J(vec1)][, list(list(id)), by=val]$V1)
user system elapsed
0.098 0.004 0.103
Arun
On Sunday, August 25, 2013 at 10:27 PM, arun wrote:
> Hi,
> I tried a ?data.table() method to solve the problem in the link below.
>
> http://r.789695.n4.nabble.com/how-to-combine-apply-and-which-or-alternative-ways-to-do-so-td4674424.html#a4674434
>
> But, it was not that fast.
>
> set.seed(24)
> vec1<- sample(1e5,1e3,replace=FALSE)
> set.seed(48)
> vec2<- sample(1e3,1e6,replace=TRUE)
> system.time({res1<- tapply(vec1,1:1e3,FUN=function(i) {which(vec2==i)})})
# user system elapsed
> # 3.912 0.000 3.880
>
> system.time(res2<- sapply(vec1,function(x) which(vec2%in%x)))
> # user system elapsed
> # 24.368 0.000 23.247
>
vecR1<-unlist(res1)
> names(vecR1)<-NULL
> vecR2<- unlist(res2)
> identical(vecR1,vecR2)
> #[1]TRUE
>
> library(data.table)
> dt1<- data.table(vec1,Group=1:1e3,key='Group')
> system.time({res3<- dt1[,list(list(which(vec1==vec2))),by=Group]})##Not that fast
> # user system elapsed
> # 3.756 0.120 3.886 ######
> identical(vecR1,unlist(res3$V1))
> #[1] TRUE
>
>
>
> Is there a faster way?
>
> Thanks.
>
> A.K.
> _______________________________________________
> datatable-help mailing list
> datatable-help at lists.r-forge.r-project.org (mailto:datatable-help at lists.r-forge.r-project.org)
> https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/datatable-help/attachments/20130825/631b6fdb/attachment.html>
More information about the datatable-help
mailing list