Skip to content

Instantly share code, notes, and snippets.

@EmilHvitfeldt
Created April 20, 2024 02:17
Show Gist options
  • Save EmilHvitfeldt/d400d1f9cb6497ecd988735bbf8a30f5 to your computer and use it in GitHub Desktop.
Save EmilHvitfeldt/d400d1f9cb6497ecd988735bbf8a30f5 to your computer and use it in GitHub Desktop.
library(dplyr)
library(purrr)
library(sparsevctrs)

# Dense -----------------------------------------------------
dense_vec <- function(x, len) {
  res <- numeric(len)
  res[x] <- x
  res
}

dense_tbl <- function(n) {
  map(seq_len(n), dense_vec, len = n) |>
    set_names(seq_len(n)) |>
    bind_cols()
}

system.time({
  dense <- dense_tbl(50000)
})
#>    user  system elapsed 
#>   1.776   1.532   3.785

lobstr::obj_size(dense)
#> 20.01 GB

bench::mark(
  slice(dense, 1:10)
)
#> Warning: Some expressions had a GC in every iteration; so filtering is
#> disabled.
#> # A tibble: 1 × 6
#>   expression              min   median `itr/sec` mem_alloc `gc/sec`
#>   <bch:expr>         <bch:tm> <bch:tm>     <dbl> <bch:byt>    <dbl>
#> 1 slice(dense, 1:10)    236ms    326ms      3.07    7.85MB     19.9

# Sparse ----------------------------------------------------

sparse_vec <- function(x, len) {
  new_sparse_real(x, x, len)
}

sparse_tbl <- function(n) {
  map(seq_len(n), sparse_vec, len = n) |>
    set_names(seq_len(n)) |>
    bind_cols()
}

system.time({
  sparse <- sparse_tbl(50000)
})
#>    user  system elapsed 
#>   0.261   0.005   0.269

lobstr::obj_size(sparse)
#> 20.80 MB

bench::mark(
  slice(sparse, 1:10)
)
#> Warning: Some expressions had a GC in every iteration; so filtering is
#> disabled.
#> # A tibble: 1 × 6
#>   expression               min   median `itr/sec` mem_alloc `gc/sec`
#>   <bch:expr>          <bch:tm> <bch:tm>     <dbl> <bch:byt>    <dbl>
#> 1 slice(sparse, 1:10)    362ms    490ms      2.04    6.74MB     12.2

Created on 2024-04-19 with reprex v2.1.0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment