Advertisement
Guest User

Untitled

a guest
Nov 10th, 2013
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
R 1.58 KB | None | 0 0
  1. > ff <- function() paste0(sample(letters, sample(5:8, 1), TRUE), collapse="")
  2. > ll <- unique(replicate(1e4, ff()))
  3. > DT <- data.table(v1=sample(ll, 1e6, TRUE), v2=sample(1:1e4, 1e6, TRUE), v3=sample(1:1e4, 1e6, TRUE))
  4. >
  5. > # add functions
  6. > eddi <- function(dt=copy(DT)) {
  7. +   dt[, list(v2=v2[v2 == v2[1]]), by = v1]
  8. + }
  9. >
  10. > andrey <- function(dt=copy(DT)) {
  11. +   dt[, .SD[v2 == v2[1],], by = v1]
  12. + }
  13. >
  14. > arun <- function(dt=copy(DT)) {
  15. +   tmp = dt[dt[, list(I=.I[1]), by=list(v1)]$I]
  16. +   setkey(dt)[tmp]
  17. + }
  18. >
  19. > # benchmark    
  20. > microbenchmark(a1 <- eddi(), a2 <- andrey(), a3 <- arun(), times=2)
  21. Unit: milliseconds
  22.            expr  min   lq median   uq  max neval
  23.    a1 <- eddi()  212  212    229  246  246     2
  24.  a2 <- andrey() 4234 4234   4258 4282 4282     2
  25.    a3 <- arun()  529  529    551  574  574     2
  26. >
  27. > setkey(a3, NULL)
  28.              v1   v2   v3
  29.     1: ufhjypjc 2260 3859
  30.     2:  wnraxyc  867 9698
  31.     3: ppvlahgr 6508 4440
  32.     4: eaveaoey 4396 5581
  33.     5:  mfoifvd 2005 5205
  34.    ---                  
  35.  9996:    rjrxx 2323 7954
  36.  9997:  hbymqhz 3723 2110
  37.  9998: kpiakpqh 1508 7807
  38.  9999:    efqek 6592 5396
  39. 10000: assytuyp 5131 9038
  40. >
  41. > identical(a1, a2)
  42. [1] FALSE
  43. > identical(a1, a3)
  44. [1] FALSE
  45. > identical(a2, a3)
  46. [1] FALSE
  47. > all.equal(a2,a3)
  48. [1] "Component 1: Lengths (10094, 10000) differ (string compare on first 10000)"
  49. [2] "Component 1: 9740 string mismatches"                                      
  50. [3] "Component 2: Numeric: lengths (10094, 10000) differ"                      
  51. [4] "Component 3: Numeric: lengths (10094, 10000) differ"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement