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