## ----setup, include=FALSE-----------------------------------------------------
knitr::opts_chunk$set(collapse = TRUE, comment = "#>",
                      error = FALSE, warning = FALSE, message = FALSE)

## ----load---------------------------------------------------------------------
library(DuckDBArray)
library(DelayedArray)

## ----seed-dim-----------------------------------------------------------------
array_df <- expand.grid(i = 1:4, j = 1:3, k = 1:2)
array_df$value <- rpois(nrow(array_df), lambda = 2)
array_path <- tempfile(fileext = ".parquet")
arrow::write_parquet(array_df, array_path)

seed <- DuckDBArraySeed(array_path, datacol = "value",
                        keycols = list(i = 1:4, j = 1:3, k = 1:2))
dim(seed)

## ----seed-extract-------------------------------------------------------------
extract_array(seed, list(1:2, 1:2, 1))

## ----seed-sparse--------------------------------------------------------------
sparse_df <- data.frame(i = c(1, 1, 2, 4), j = c(1, 3, 2, 3),
                        k = c(1, 1, 2, 1), value = c(5, 3, 8, 7))
sparse_path <- tempfile(fileext = ".parquet")
arrow::write_parquet(sparse_df, sparse_path)
sparse_seed <- DuckDBArraySeed(sparse_path, datacol = "value",
                               keycols = list(i = 1:4, j = 1:3, k = 1:2))
extract_sparse_array(sparse_seed, list(1:4, 1:3, 1))

## ----wrap---------------------------------------------------------------------
arr <- DuckDBArray(seed)
class(arr)
seedClass <- class(seed(arr))
seedClass

## ----sql-agg------------------------------------------------------------------
mat <- as(arr[, , 1], "DuckDBMatrix")
rowSums(mat)

## ----dimtables----------------------------------------------------------------
library(S4Arrays)
grid <- RegularArrayGrid(dim(state.x77), c(10, 4))
dim_tables <- createDimTables(state.x77, grid = grid)
dim_tables

## ----realize------------------------------------------------------------------
as.array(arr[1:2, 1:2, 1])

## ----sessioninfo--------------------------------------------------------------
sessionInfo()

