Skip to content

[<- on sparse arrays fails with zero-row data frames #879

@LTLA

Description

@LTLA
library(tiledb)

tmp <- tempfile()
dom <- tiledb_domain(dims = list(
    tiledb_dim("d1", c(1L, 10L), 10L, type = "INT32"),
    tiledb_dim("d2", c(1L, 20L), 20L, type = "INT32")
))
schema <- tiledb_array_schema(
    dom,
    attrs = list(tiledb_attr("x", type = "FLOAT64")),
    sparse = TRUE
)
tiledb_array_create(tmp, schema)

arr <- tiledb_array(tmp, query_type = "WRITE")

arr[] <- data.frame(d1 = 1L, d2 = 2L, x = 3) # OK

arr[] <- data.frame(d1 = integer(0), d2 = integer(0), x = numeric(0)) # FAIL
## Error: [TileDB::Query] Error: Fix-Sized input attribute/dimension 'd2' is not set correctly. 
## Data buffer is not set.

tiledb_array_close(arr)

For more context: we're breaking up an array into blocks that are processed and written to file by [<- (see LTLA/TileDBArray#33). Some of those blocks will be empty (no non-zero elements), resulting in the above error. Currently, we just work around it by checking for at least one non-zero element before attempting to call [<-. However, I think an empty data frame is a perfectly reasonable input; [<- should handle this case more gracefully and just no-op if the supplied value is empty.

Session information
R Under development (unstable) (2026-02-19 r89439)
Platform: x86_64-pc-linux-gnu
Running under: Ubuntu 22.04.5 LTS

Matrix products: default
BLAS:   /home/luna/Software/R/trunk/lib/libRblas.so 
LAPACK: /home/luna/Software/R/trunk/lib/libRlapack.so;  LAPACK version 3.12.1

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
 [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

time zone: Australia/Sydney
tzcode source: system (glibc)

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] RcppSpdlog_0.0.28 tiledb_0.33.0    

loaded via a namespace (and not attached):
 [1] zoo_1.8-15      bit_4.6.0       compiler_4.6.0  tools_4.6.0    
 [5] RcppCCTZ_0.2.14 spdl_0.0.5      Rcpp_1.1.1      nanoarrow_0.8.0
 [9] bit64_4.6.0-1   nanotime_0.3.13 grid_4.6.0      lattice_0.22-9 

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions