Regarding G. Grothendieck's answer, I was wondering how split works well:
dt <- data.table( p = rep( LETTERS[1:25], 1E6), q = 25*1E6, key = "p" ) system.time( ll <- split(dt, dt[ ,p ] ) ) user system elapsed 5.237 1.340 6.563 system.time( ll <- lapply( unique(dt[,p]), function(x) dt[x] ) ) user system elapsed 1.179 0.363 1.541
So, if there is no better answer, I would stick with
lapply( unique(dt[,p]), function(x) dt[x] )
Beasterfield
source share