Skip to content

duckspatial

R Interface to 'DuckDB' Database with Spatial Extension

v0.9.0 · Jan 10, 2026 · GPL (>= 3)

Description

Fast & memory-efficient functions to analyze and manipulate large spatial data data sets. It leverages the fast analytical capabilities of 'DuckDB' and its spatial extension (see <https://duckdb.org/docs/stable/core_extensions/spatial/overview>) while maintaining compatibility with R’s spatial data ecosystem to work with spatial vector data.

Downloads

426

Last 30 days

8090th

426

Last 90 days

426

Last year

CRAN Check Status

1 ERROR
13 OK
Show all 14 flavors
Flavor Status
r-devel-linux-x86_64-debian-clang OK
r-devel-linux-x86_64-debian-gcc OK
r-devel-linux-x86_64-fedora-clang ERROR
r-devel-linux-x86_64-fedora-gcc OK
r-devel-macos-arm64 OK
r-devel-windows-x86_64 OK
r-oldrel-macos-arm64 OK
r-oldrel-macos-x86_64 OK
r-oldrel-windows-x86_64 OK
r-patched-linux-x86_64 OK
r-release-linux-x86_64 OK
r-release-macos-arm64 OK
r-release-macos-x86_64 OK
r-release-windows-x86_64 OK
Check details (15 non-OK)
OK r-devel-linux-x86_64-debian-clang

*


            
OK r-devel-linux-x86_64-debian-gcc

*


            
ERROR r-devel-linux-x86_64-fedora-clang

re-building of vignette outputs

Error(s) in re-building vignettes:
--- re-building ‘aw_interpolation.Rmd’ using rmarkdown
[gannet:1220759:0:1221028] Caught signal 11 (Segmentation fault: Sent by the kernel at address (nil))
==== backtrace (tid:1221028) ====
 0  /lib64/libucs.so.0(ucs_handle_error+0x2e4) [0x7f76309e4df4]
 1  /lib64/libucs.so.0(+0x17aed) [0x7f76309e6aed]
 2  /lib64/libucs.so.0(+0x17cbd) [0x7f76309e6cbd]
 3  /lib64/libc.so.6(+0x1a040) [0x7f7647128040]
 4  /data/gannet/ripley/.local/share/R/duckdb/extensions/v1.4.4/linux_amd64/spatial.duckdb_extension(+0x10eb560) [0x7f75044eb560]
 5  /data/gannet/ripley/.local/share/R/duckdb/extensions/v1.4.4/linux_amd64/spatial.duckdb_extension(+0x10cbeb8) [0x7f75044cbeb8]
 6  /data/gannet/ripley/.local/share/R/duckdb/extensions/v1.4.4/linux_amd64/spatial.duckdb_extension(+0x7d8bb4) [0x7f7503bd8bb4]
 7  /data/gannet/ripley/.local/share/R/duckdb/extensions/v1.4.4/linux_amd64/spatial.duckdb_extension(+0x7d7159) [0x7f7503bd7159]
 8  /data/gannet/ripley/R/test-clang/duckdb/libs/duckdb.so(_ZN6duckdb15ExtensionHelper29LoadExternalExtensionInternalERNS_16DatabaseInstanceERNS_10FileSystemERKNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEERNS_19ExtensionActiveLoadE+0x1b4) [0x7f75697734a4]
 9  /data/gannet/ripley/R/test-clang/duckdb/libs/duckdb.so(_ZN6duckdb15ExtensionHelper21LoadExternalExtensionERNS_16DatabaseInstanceERNS_10FileSystemERKNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEE+0x4a) [0x7f756977322a]
10  /data/gannet/ripley/R/test-clang/duckdb/libs/duckdb.so(_ZNK6duckdb12PhysicalLoad7GetDataERNS_16ExecutionContextERNS_9DataChunkERNS_19OperatorSourceInputE+0x151) [0x7f756a5a9511]
11  /data/gannet/ripley/R/test-clang/duckdb/libs/duckdb.so(_ZN6duckdb16PipelineExecutor15FetchFromSourceERNS_9DataChunkE+0x9f) [0x7f756ad5e6cf]
12  /data/gannet/ripley/R/test-clang/duckdb/libs/duckdb.so(_ZN6duckdb16PipelineExecutor7ExecuteEm+0x133) [0x7f756ad5b163]
13  /data/gannet/ripley/R/test-clang/duckdb/libs/duckdb.so(_ZN6duckdb12PipelineTask11ExecuteTaskENS_17TaskExecutionModeE+0x15b) [0x7f756ad5addb]
14  /data/gannet/ripley/R/test-clang/duckdb/libs/duckdb.so(_ZN6duckdb12ExecutorTask7ExecuteENS_17TaskExecutionModeE+0xa0) [0x7f756ad546b0]
15  /data/gannet/ripley/R/test-clang/duckdb/libs/duckdb.so(_ZN6duckdb13TaskScheduler14ExecuteForeverEPNSt3__16atomicIbEE+0x379) [0x7f756ad619b9]
16  /data/gannet/ripley/R/test-clang/duckdb/libs/duckdb.so(+0x196c87c) [0x7f756ad6c87c]
17  /lib64/libc.so.6(+0x71f14) [0x7f764717ff14]
18  /lib64/libc.so.6(+0xf532c) [0x7f764720332c]
=================================

 *** caught segfault ***
address 0x4d20012a097, cause 'unknown'

Traceback:
 1: rapi_execute(stmt, convert_opts)
 2: withCallingHandlers(expr, condition = function(cnd) {    {        .__handler_frame__. <- TRUE        .__setup_frame__. <- frame        if (inherits(cnd, "message")) {            except <- c("warning", "error")        }        else if (inherits(cnd, "warning")) {            except <- "error"        }        else {            except <- ""        }    }    while (!is_null(cnd)) {        if (inherits(cnd, "error")) {            out <- handlers[[1L]](cnd)            if (!inherits(out, "rlang_zap"))                 throw(out)        }        inherit <- .subset2(.subset2(cnd, "rlang"), "inherit")        if (is_false(inherit)) {            return()        }        cnd <- .subset2(cnd, "parent")    }})
 3: doTryCatch(return(expr), name, parentenv, handler)
 4: tryCatchOne(expr, names, parentenv, handlers[[1L]])
 5: tryCatchList(expr, classes, parentenv, handlers)
 6: tryCatch(withCallingHandlers(expr, condition = function(cnd) {    {        .__handler_frame__. <- TRUE        .__setup_frame__. <- frame        if (inherits(cnd, "message")) {            except <- c("warning", "error")        }        else if (inherits(cnd, "warning")) {            except <- "error"        }        else {            except <- ""        }    }    while (!is_null(cnd)) {        if (inherits(cnd, "error")) {            out <- handlers[[1L]](cnd)            if (!inherits(out, "rlang_zap"))                 throw(out)        }        inherit <- .subset2(.subset2(cnd, "rlang"), "inherit")        if (is_false(inherit)) {            return()        }        cnd <- .subset2(cnd, "parent")    }}), stackOverflowError = handlers[[1L]])
 7: rlang::try_fetch(rapi_execute(stmt, convert_opts), error = function(e) {    rethrow_error_from_rapi(e, call)})
 8: rethrow_rapi_execute(res@stmt_lst$ref, duckdb_convert_opts_impl(res@connection@convert_opts,     arrow = res@arrow))
 9: duckdb_execute(res)
10: duckdb_result(connection = conn, stmt_lst = stmt_lst, arrow = arrow)
11: .local(conn, statement, ...)
12: dbSendQuery(conn, statement, ...)
13: dbSendQuery(conn, statement, ...)
14: dbSendStatement(conn, statement, ...)
15: dbSendStatement(conn, statement, ...)
16: DBI::dbExecute(conn, "LOAD spatial;")
17: DBI::dbExecute(conn, "LOAD spatial;")
18: withCallingHandlers(expr, message = function(c) if (inherits(c,     classes)) tryInvokeRestart("muffleMessage"))
19: suppressMessages(DBI::dbExecute(conn, "LOAD spatial;"))
20: duckspatial::ddbs_load(conn, quiet = TRUE)
21: ddbs_create_conn()
22: ddbs_interpolate_aw(target = grid, source = nc, tid = "target_id",     sid = "source_id", extensive = "BIR74", weight = "total",     output = "sf")
23: eval(expr, envir)
24: eval(expr, envir)
25: withVisible(eval(expr, envir))
26: withCallingHandlers(code, error = function (e) rlang::entrace(e), message = function (cnd) {    watcher$capture_plot_and_output()    if (on_message$capture) {        watcher$push(cnd)    }    if (on_message$silence) {        invokeRestart("muffleMessage")    }}, warning = function (cnd) {    if (getOption("warn") >= 2 || getOption("warn") < 0) {        return()    }    watcher$capture_plot_and_output()    if (on_warning$capture) {        cnd <- sanitize_call(cnd)        watcher$push(cnd)    }    if (on_warning$silence) {        invokeRestart("muffleWarning")    }}, error = function (cnd) {    watcher$capture_plot_and_output()    cnd <- sanitize_call(cnd)    watcher$push(cnd)    switch(on_error, continue = invokeRestart("eval_continue"),         stop = invokeRestart("eval_stop"), error = NULL)})
27: eval(call)
28: eval(call)
29: with_handlers({    for (expr in tle$exprs) {        ev <- withVisible(eval(expr, envir))        watcher$capture_plot_and_output()        watcher$print_value(ev$value, ev$visible, envir)    }    TRUE}, handlers)
30: doWithOneRestart(return(expr), restart)
31: withOneRestart(expr, restarts[[1L]])
32: withRestartList(expr, restarts[-nr])
33: doWithOneRestart(return(expr), restart)
34: withOneRestart(withRestartList(expr, restarts[-nr]), restarts[[nr]])
35: withRestartList(expr, restarts)
36: withRestarts(with_handlers({    for (expr in tle$exprs) {        ev <- withVisible(eval(expr, envir))        watcher$capture_plot_and_output()        watcher$print_value(ev$value, ev$visible, envir)    }    TRUE}, handlers), eval_continue = function() TRUE, eval_stop = function() FALSE)
37: evaluate::evaluate(...)
38: evaluate(code, envir = env, new_device = FALSE, keep_warning = if (is.numeric(options$warning)) TRUE else options$warning,     keep_message = if (is.numeric(options$message)) TRUE else options$message,     stop_on_error = if (is.numeric(options$error)) options$error else {        if (options$error && options$include)             0L        else 2L    }, output_handler = knit_handlers(options$render, options))
39: in_dir(input_dir(), expr)
40: in_input_dir(evaluate(code, envir = env, new_device = FALSE,     keep_warning = if (is.numeric(options$warning)) TRUE else options$warning,     keep_message = if (is.numeric(options$message)) TRUE else options$message,     stop_on_error = if (is.numeric(options$error)) options$error else {        if (options$error && options$include)             0L        else 2L    }, output_handler = knit_handlers(options$render, options)))
41: eng_r(options)
42: block_exec(params)
43: call_block(x)
44: process_group(group)
45: withCallingHandlers(if (tangle) process_tangle(group) else process_group(group),     error = function(e) {        if (progress && is.function(pb$interrupt))             pb$interrupt()        if (is_R_CMD_build() || is_R_CMD_check())             error <<- format(e)    })
46: with_options(withCallingHandlers(if (tangle) process_tangle(group) else process_group(group),     error = function(e) {        if (progress && is.function(pb$interrupt))             pb$interrupt()        if (is_R_CMD_build() || is_R_CMD_check())             error <<- format(e)    }), list(rlang_trace_top_env = knit_global()))
47: xfun:::handle_error(with_options(withCallingHandlers(if (tangle) process_tangle(group) else process_group(group),     error = function(e) {        if (progress && is.function(pb$interrupt))             pb$interrupt()        if (is_R_CMD_build() || is_R_CMD_check())             error <<- format(e)    }), list(rlang_trace_top_env = knit_global())), function(loc) {    setwd(wd)    write_utf8(res, output %n% stdout())    paste0("\nQuitting from ", loc, if (!is.null(error))         paste0("\n", rule(), error, "\n", rule()))}, if (labels[i] != "") sprintf(" [%s]", labels[i]), get_loc)
48: process_file(text, output)
49: knitr::knit(knit_input, knit_output, envir = envir, quiet = quiet)
50: rmarkdown::render(file, encoding = encoding, quiet = quiet, envir = globalenv(),     output_dir = getwd(), ...)
51: vweave_rmarkdown(...)
52: engine$weave(file, quiet = quiet, encoding = enc)
53: doTryCatch(return(expr), name, parentenv, handler)
54: tryCatchOne(expr, names, parentenv, handlers[[1L]])
55: tryCatchList(expr, classes, parentenv, handlers)
56: tryCatch({    engine$weave(file, quiet = quiet, encoding = enc)    setwd(startdir)    output <- find_vignette_product(name, by = "weave", engine = engine)    if (!have.makefile && vignette_is_tex(output)) {        texi2pdf(file = output, clean = FALSE, quiet = quiet)        output <- find_vignette_product(name, by = "texi2pdf",             engine = engine)    }}, error = function(e) {    OK <<- FALSE    message(gettextf("Error: processing vignette '%s' failed with diagnostics:\n%s",         file, conditionMessage(e)))})
57: tools:::.buildOneVignette("aw_interpolation.Rmd", "/data/gannet/ripley/R/packages/tests-clang/duckspatial.Rcheck/vign_test/duckspatial",     TRUE, FALSE, "aw_interpolation", "UTF-8", "/tmp/Rtmpl5ie5N/working_dir/RtmprWYTjz/file12a0142e39b6c0.rds")
An irrecoverable exception occurred. R is aborting now ...
--- re-building ‘benchmark.Rmd’ using rmarkdown
--- finished re-building ‘benchmark.Rmd’

--- re-building ‘duckspatial.Rmd’ using rmarkdown
[WARNING] Deprecated: --highlight-style. Use --syntax-highlighting instead.
--- finished re-building ‘duckspatial.Rmd’

--- re-building ‘spatial_joins.Rmd’ using rmarkdown
[WARNING] Deprecated: --highlight-style. Use --syntax-highlighting instead.
--- finished re-building ‘spatial_joins.Rmd’

SUMMARY: processing the following file failed:
  ‘aw_interpolation.Rmd’

Error: Vignette re-building failed.
Execution halted
ERROR r-devel-linux-x86_64-fedora-clang

tests

  Running ‘testthat.R’ [10s/25s]
Running the tests in ‘tests/testthat.R’ failed.
Complete output:
  > # This file is part of the standard setup for testthat.
  > # It is recommended that you do not modify it.
  > #
  > # Where should you do additional test configuration?
  > # Learn more about the roles of various files in:
  > # * https://r-pkgs.org/testing-design.html#sec-tests-files-overview
  > # * https://testthat.r-lib.org/articles/special-files.html
  > 
  > library(testthat)
  > library(duckspatial)
  Important: 'crs_column' and 'crs' arguments are deprecated and will be removed in the next version.
  If possible, use the default values of these arguments to avoid future issues.
  > library(duckdb)
  Loading required package: DBI
  > 
  > test_check("duckspatial")
  Reading layer `countries' from data source 
    `/data/gannet/ripley/R/packages/tests-clang/duckspatial.Rcheck/duckspatial/spatial/countries.geojson' 
    using driver `GeoJSON'
  Simple feature collection with 257 features and 6 fields
  Geometry type: POLYGON
  Dimension:     XY
  Bounding box:  xmin: -178.9125 ymin: -89.9 xmax: 180 ymax: 83.65187
  Geodetic CRS:  WGS 84
  Reading layer `argentina' from data source 
    `/data/gannet/ripley/R/packages/tests-clang/duckspatial.Rcheck/duckspatial/spatial/argentina.geojson' 
    using driver `GeoJSON'
  Simple feature collection with 1 feature and 6 fields
  Geometry type: POLYGON
  Dimension:     XY
  Bounding box:  xmin: -73.52455 ymin: -52.39755 xmax: -53.62409 ymax: -21.81793
  Geodetic CRS:  WGS 84
  Reading layer `rivers' from data source 
    `/data/gannet/ripley/R/packages/tests-clang/duckspatial.Rcheck/duckspatial/spatial/rivers.geojson' 
    using driver `GeoJSON'
  Simple feature collection with 100 features and 1 field
  Geometry type: LINESTRING
  Dimension:     XY
  Bounding box:  xmin: 2766878 ymin: 2222357 xmax: 3578648 ymax: 2459939
  Projected CRS: ETRS89-extended / LAEA Europe
  Saving _problems/test-compatibility-5.R
  Saving _problems/test-compatibility-47.R
  [gannet:1217900:0:1217900] Caught signal 11 (Segmentation fault: address not mapped to object at address 0x2)
  ==== backtrace (tid:1217900) ====
   0  /lib64/libucs.so.0(ucs_handle_error+0x2e4) [0x7f466a9b2df4]
   1  /lib64/libucs.so.0(+0x17aed) [0x7f466a9b4aed]
   2  /lib64/libucs.so.0(+0x17cbd) [0x7f466a9b4cbd]
   3  /lib64/libc.so.6(+0x1a040) [0x7f4682728040]
   4  /data/gannet/ripley/.local/share/R/duckdb/extensions/v1.4.4/linux_amd64/spatial.duckdb_extension(+0x10ecf30) [0x7f454c4ecf30]
   5  /data/gannet/ripley/.local/share/R/duckdb/extensions/v1.4.4/linux_amd64/spatial.duckdb_extension(+0x10cbeb8) [0x7f454c4cbeb8]
   6  /data/gannet/ripley/.local/share/R/duckdb/extensions/v1.4.4/linux_amd64/spatial.duckdb_extension(+0x7d8bb4) [0x7f454bbd8bb4]
   7  /data/gannet/ripley/.local/share/R/duckdb/extensions/v1.4.4/linux_amd64/spatial.duckdb_extension(+0x7d7159) [0x7f454bbd7159]
   8  /data/gannet/ripley/R/test-clang/duckdb/libs/duckdb.so(_ZN6duckdb15ExtensionHelper29LoadExternalExtensionInternalERNS_16DatabaseInstanceERNS_10FileSystemERKNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEERNS_19ExtensionActiveLoadE+0x1b4) [0x7f466e7734a4]
   9  /data/gannet/ripley/R/test-clang/duckdb/libs/duckdb.so(_ZN6duckdb15ExtensionHelper21LoadExternalExtensionERNS_16DatabaseInstanceERNS_10FileSystemERKNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEE+0x4a) [0x7f466e77322a]
  10  /data/gannet/ripley/R/test-clang/duckdb/libs/duckdb.so(_ZNK6duckdb12PhysicalLoad7GetDataERNS_16ExecutionContextERNS_9DataChunkERNS_19OperatorSourceInputE+0x151) [0x7f466f5a9511]
  11  /data/gannet/ripley/R/test-clang/duckdb/libs/duckdb.so(_ZN6duckdb16PipelineExecutor15FetchFromSourceERNS_9DataChunkE+0x9f) [0x7f466fd5e6cf]
  12  /data/gannet/ripley/R/test-clang/duckdb/libs/duckdb.so(_ZN6duckdb16PipelineExecutor7ExecuteEm+0x133) [0x7f466fd5b163]
  13  /data/gannet/ripley/R/test-clang/duckdb/libs/duckdb.so(_ZN6duckdb12PipelineTask11ExecuteTaskENS_17TaskExecutionModeE+0x119) [0x7f466fd5ad99]
  14  /data/gannet/ripley/R/test-clang/duckdb/libs/duckdb.so(_ZN6duckdb12ExecutorTask7ExecuteENS_17TaskExecutionModeE+0xa0) [0x7f466fd546b0]
  15  /data/gannet/ripley/R/test-clang/duckdb/libs/duckdb.so(_ZN6duckdb8Executor11ExecuteTaskEb+0x24a) [0x7f466fd59c7a]
  16  /data/gannet/ripley/R/test-clang/duckdb/libs/duckdb.so(_ZN6duckdb13ClientContext19ExecuteTaskInternalERNS_17ClientContextLockERNS_15BaseQueryResultEb+0x40) [0x7f466fb96b00]
  17  /data/gannet/ripley/R/test-clang/duckdb/libs/duckdb.so(_ZN6duckdb18PendingQueryResult15ExecuteInternalERNS_17ClientContextLockE+0x7a) [0x7f466fb9903a]
  18  /data/gannet/ripley/R/test-clang/duckdb/libs/duckdb.so(_ZN6duckdb17PreparedStatement7ExecuteERNS_6vectorINS_5ValueELb1EEEb+0x5a) [0x7f466fbb9b6a]
  19  /data/gannet/ripley/R/test-clang/duckdb/libs/duckdb.so(_Z12rapi_executeN5cpp1116external_pointerIN6duckdb10RStatementEXadL_ZNS_15default_deleterIS2_EEvPT_EEEENS1_11ConvertOptsE+0x115) [0x7f466e501d95]
  20  /data/gannet/ripley/R/test-clang/duckdb/libs/duckdb.so(_duckdb_rapi_execute+0x63) [0x7f466e56b723]
  21  /data/gannet/ripley/R/R-clang/bin/exec/R(+0x8f354) [0x556abb82f354]
  22  /data/gannet/ripley/R/R-clang/bin/exec/R(+0xd8f68) [0x556abb878f68]
  23  /data/gannet/ripley/R/R-clang/bin/exec/R(+0xc70bc) [0x556abb8670bc]
  24  /data/gannet/ripley/R/R-clang/bin/exec/R(Rf_eval+0x1a5) [0x556abb866845]
  25  /data/gannet/ripley/R/R-clang/bin/exec/R(+0xc7314) [0x556abb867314]
  26  /data/gannet/ripley/R/R-clang/bin/exec/R(Rf_eval+0x26e) [0x556abb86690e]
  27  /data/gannet/ripley/R/R-clang/bin/exec/R(+0xc7314) [0x556abb867314]
  28  /data/gannet/ripley/R/R-clang/bin/exec/R(+0xdb070) [0x556abb87b070]
  29  /data/gannet/ripley/R/R-clang/bin/exec/R(+0xcb749) [0x556abb86b749]
  30  /data/gannet/ripley/R/R-clang/bin/exec/R(+0xc70bc) [0x556abb8670bc]
  31  /data/gannet/ripley/R/R-clang/bin/exec/R(Rf_eval+0x1a5) [0x556abb866845]
  32  /data/gannet/ripley/R/R-clang/bin/exec/R(+0xde8d9) [0x556abb87e8d9]
  33  /data/gannet/ripley/R/R-clang/bin/exec/R(+0xddddc) [0x556abb87dddc]
  34  /data/gannet/ripley/R/R-clang/bin/exec/R(Rf_eval+0x5f6) [0x556abb866c96]
  35  /data/gannet/ripley/R/R-clang/bin/exec/R(+0xc7314) [0x556abb867314]
  36  /data/gannet/ripley/R/R-clang/bin/exec/R(+0xdb070) [0x556abb87b070]
  37  /data/gannet/ripley/R/R-clang/bin/exec/R(+0xcb749) [0x556abb86b749]
  38  /data/gannet/ripley/R/R-clang/bin/exec/R(+0xc70bc) [0x556abb8670bc]
  39  /data/gannet/ripley/R/R-clang/bin/exec/R(Rf_eval+0x1a5) [0x556abb866845]
  40  /data/gannet/ripley/R/R-clang/bin/exec/R(+0xde8d9) [0x556abb87e8d9]
  41  /data/gannet/ripley/R/R-clang/bin/exec/R(+0xddddc) [0x556abb87dddc]
  42  /data/gannet/ripley/R/R-clang/bin/exec/R(Rf_eval+0x5f6) [0x556abb866c96]
  43  /data/gannet/ripley/R/test-clang/rlang/libs/rlang.so(+0x47d3) [0x7f467fa777d3]
  44  /data/gannet/ripley/R/R-clang/bin/exec/R(+0x8d4a3) [0x556abb82d4a3]
  45  /data/gannet/ripley/R/R-clang/bin/exec/R(+0xcdd34) [0x556abb86dd34]
  46  /data/gannet/ripley/R/R-clang/bin/exec/R(+0xc70bc) [0x556abb8670bc]
  47  /data/gannet/ripley/R/R-clang/bin/exec/R(Rf_eval+0x1a5) [0x556abb866845]
  48  /data/gannet/ripley/R/R-clang/bin/exec/R(+0xde8d9) [0x556abb87e8d9]
  49  /data/gannet/ripley/R/R-clang/bin/exec/R(+0xddddc) [0x556abb87dddc]
  50  /data/gannet/ripley/R/R-clang/bin/exec/R(Rf_eval+0x5f6) [0x556abb866c96]
  51  /data/gannet/ripley/R/R-clang/bin/exec/R(+0xe3e08) [0x556abb883e08]
  52  /data/gannet/ripley/R/R-clang/bin/exec/R(Rf_eval+0x3d0) [0x556abb866a70]
  53  /data/gannet/ripley/R/R-clang/bin/exec/R(+0xe2f4b) [0x556abb882f4b]
  54  /data/gannet/ripley/R/R-clang/bin/exec/R(Rf_eval+0x3d0) [0x556abb866a70]
  55  /data/gannet/ripley/R/R-clang/bin/exec/R(+0xde8d9) [0x556abb87e8d9]
  56  /data/gannet/ripley/R/R-clang/bin/exec/R(+0xddddc) [0x556abb87dddc]
  57  /data/gannet/ripley/R/R-clang/bin/exec/R(+0xcd5c3) [0x556abb86d5c3]
  58  /data/gannet/ripley/R/R-clang/bin/exec/R(+0xc70bc) [0x556abb8670bc]
  59  /data/gannet/ripley/R/R-clang/bin/exec/R(Rf_eval+0x1a5) [0x556abb866845]
  60  /data/gannet/ripley/R/R-clang/bin/exec/R(+0xde8d9) [0x556abb87e8d9]
  61  /data/gannet/ripley/R/R-clang/bin/exec/R(R_execMethod+0x2cb) [0x556abb8816eb]
  =================================
  
   *** caught segfault ***
  address 0x4d20012956c, cause 'unknown'
  
  Traceback:
   1: rapi_execute(stmt, convert_opts)
   2: withCallingHandlers(expr, condition = function(cnd) {    {        .__handler_frame__. <- TRUE        .__setup_frame__. <- frame        if (inherits(cnd, "message")) {            except <- c("warning", "error")        }        else if (inherits(cnd, "warning")) {            except <- "error"        }        else {            except <- ""        }    }    while (!is_null(cnd)) {        if (inherits(cnd, "error")) {            out <- handlers[[1L]](cnd)            if (!inherits(out, "rlang_zap"))                 throw(out)        }        inherit <- .subset2(.subset2(cnd, "rlang"), "inherit")        if (is_false(inherit)) {            return()        }        cnd <- .subset2(cnd, "parent")    }})
   3: doTryCatch(return(expr), name, parentenv, handler)
   4: tryCatchOne(expr, names, parentenv, handlers[[1L]])
   5: tryCatchList(expr, classes, parentenv, handlers)
   6: tryCatch(withCallingHandlers(expr, condition = function(cnd) {    {        .__handler_frame__. <- TRUE        .__setup_frame__. <- frame        if (inherits(cnd, "message")) {            except <- c("warning", "error")        }        else if (inherits(cnd, "warning")) {            except <- "error"        }        else {            except <- ""        }    }    while (!is_null(cnd)) {        if (inherits(cnd, "error")) {            out <- handlers[[1L]](cnd)            if (!inherits(out, "rlang_zap"))                 throw(out)        }        inherit <- .subset2(.subset2(cnd, "rlang"), "inherit")        if (is_false(inherit)) {            return()        }        cnd <- .subset2(cnd, "parent")    }}), stackOverflowError = handlers[[1L]])
   7: rlang::try_fetch(rapi_execute(stmt, convert_opts), error = function(e) {    rethrow_error_from_rapi(e, call)})
   8: rethrow_rapi_execute(res@stmt_lst$ref, duckdb_convert_opts_impl(res@connection@convert_opts,     arrow = res@arrow))
   9: duckdb_execute(res)
  10: duckdb_result(connection = conn, stmt_lst = stmt_lst, arrow = arrow)
  11: .local(conn, statement, ...)
  12: dbSendQuery(conn, statement, ...)
  13: dbSendQuery(conn, statement, ...)
  14: dbSendStatement(conn, statement, ...)
  15: dbSendStatement(conn, statement, ...)
  16: DBI::dbExecute(conn, "LOAD spatial;")
  17: DBI::dbExecute(conn, "LOAD spatial;")
  18: withCallingHandlers(expr, message = function(c) if (inherits(c,     classes)) tryInvokeRestart("muffleMessage"))
  19: suppressMessages(DBI::dbExecute(conn, "LOAD spatial;"))
  20: duckspatial::ddbs_load(conn, quiet = TRUE)
  21: ddbs_create_conn("memory")
  22: eval(code, test_env)
  23: eval(code, test_env)
  24: withCallingHandlers({    eval(code, test_env)    new_expectations <- the$test_expectations > starting_expectations    if (snapshot_skipped) {        skip("On CRAN")    }    else if (!new_expectations && skip_on_empty) {        skip_empty()    }}, expectation = handle_expectation, packageNotFoundError = function(e) {    if (on_cran()) {        skip(paste0("{", e$package, "} is not installed."))    }}, snapshot_on_cran = function(cnd) {    snapshot_skipped <<- TRUE    invokeRestart("muffle_cran_snapshot")}, skip = handle_skip, warning = handle_warning, message = handle_message,     error = handle_error, interrupt = handle_interrupt)
  25: doTryCatch(return(expr), name, parentenv, handler)
  26: tryCatchOne(expr, names, parentenv, handlers[[1L]])
  27: tryCatchList(expr, classes, parentenv, handlers)
  28: tryCatch(withCallingHandlers({    eval(code, test_env)    new_expectations <- the$test_expectations > starting_expectations    if (snapshot_skipped) {        skip("On CRAN")    }    else if (!new_expectations && skip_on_empty) {        skip_empty()    }}, expectation = handle_expectation, packageNotFoundError = function(e) {    if (on_cran()) {        skip(paste0("{", e$package, "} is not installed."))    }}, snapshot_on_cran = function(cnd) {    snapshot_skipped <<- TRUE    invokeRestart("muffle_cran_snapshot")}, skip = handle_skip, warning = handle_warning, message = handle_message,     error = handle_error, interrupt = handle_interrupt), error = handle_fatal)
  29: doWithOneRestart(return(expr), restart)
  30: withOneRestart(expr, restarts[[1L]])
  31: withRestarts(tryCatch(withCallingHandlers({    eval(code, test_env)    new_expectations <- the$test_expectations > starting_expectations    if (snapshot_skipped) {        skip("On CRAN")    }    else if (!new_expectations && skip_on_empty) {        skip_empty()    }}, expectation = handle_expectation, packageNotFoundError = function(e) {    if (on_cran()) {        skip(paste0("{", e$package, "} is not installed."))    }}, snapshot_on_cran = function(cnd) {    snapshot_skipped <<- TRUE    invokeRestart("muffle_cran_snapshot")}, skip = handle_skip, warning = handle_warning, message = handle_message,     error = handle_error, interrupt = handle_interrupt), error = handle_fatal),     end_test = function() {    })
  32: test_code(code, parent.frame())
  33: test_that("Round trip: register -> read for various geometry types",     {        skip_if_not_installed("duckdb")        conn <- ddbs_create_conn("memory")        on.exit(ddbs_stop_conn(conn), add = TRUE)        line <- sf::st_sf(id = 1, geom = sf::st_as_sfc("LINESTRING(0 0, 1 1)"),             crs = 4326)        polygon <- sf::st_sf(id = 1, geom = sf::st_as_sfc("POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))"),             crs = 4326)        multipoint <- sf::st_sf(id = 1, geom = sf::st_as_sfc("MULTIPOINT(0 0, 1 1)"),             crs = 4326)        datasets <- list(line = line, polygon = polygon, multipoint = multipoint)        for (name in names(datasets)) {            data <- datasets[[name]]            view_name <- paste0("rt_register_", name)            ddbs_register_vector(conn, data, view_name, overwrite = TRUE)            result <- ddbs_read_vector(conn, view_name)            expect_s3_class(result, "sf")            expect_equal(nrow(result), 1)            expect_equal(sf::st_crs(result), sf::st_crs(data))            expect_true(all.equal(sf::st_geometry(result), sf::st_geometry(data),                 check.attributes = FALSE))        }    })
  34: eval(code, test_env)
  35: eval(code, test_env)
  36: withCallingHandlers({    eval(code, test_env)    new_expectations <- the$test_expectations > starting_expectations    if (snapshot_skipped) {        skip("On CRAN")    }    else if (!new_expectations && skip_on_empty) {        skip_empty()    }}, expectation = handle_expectation, packageNotFoundError = function(e) {    if (on_cran()) {        skip(paste0("{", e$package, "} is not installed."))    }}, snapshot_on_cran = function(cnd) {    snapshot_skipped <<- TRUE    invokeRestart("muffle_cran_snapshot")}, skip = handle_skip, warning = handle_warning, message = handle_message,     error = handle_error, interrupt = handle_interrupt)
  37: doTryCatch(return(expr), name, parentenv, handler)
  38: tryCatchOne(expr, names, parentenv, handlers[[1L]])
  39: tryCatchList(expr, classes, parentenv, handlers)
  40: tryCatch(withCallingHandlers({    eval(code, test_env)    new_expectations <- the$test_expectations > starting_expectations    if (snapshot_skipped) {        skip("On CRAN")    }    else if (!new_expectations && skip_on_empty) {        skip_empty()    }}, expectation = handle_expectation, packageNotFoundError = function(e) {    if (on_cran()) {        skip(paste0("{", e$package, "} is not installed."))    }}, snapshot_on_cran = function(cnd) {    snapshot_skipped <<- TRUE    invokeRestart("muffle_cran_snapshot")}, skip = handle_skip, warning = handle_warning, message = handle_message,     error = handle_error, interrupt = handle_interrupt), error = handle_fatal)
  41: doWithOneRestart(return(expr), restart)
  42: withOneRestart(expr, restarts[[1L]])
  43: withRestarts(tryCatch(withCallingHandlers({    eval(code, test_env)    new_expectations <- the$test_expectations > starting_expectations    if (snapshot_skipped) {        skip("On CRAN")    }    else if (!new_expectations && skip_on_empty) {        skip_empty()    }}, expectation = handle_expectation, packageNotFoundError = function(e) {    if (on_cran()) {        skip(paste0("{", e$package, "} is not installed."))    }}, snapshot_on_cran = function(cnd) {    snapshot_skipped <<- TRUE    invokeRestart("muffle_cran_snapshot")}, skip = handle_skip, warning = handle_warning, message = handle_message,     error = handle_error, interrupt = handle_interrupt), error = handle_fatal),     end_test = function() {    })
  44: test_code(code = exprs, env = env, reporter = get_reporter() %||%     StopReporter$new())
  45: source_file(path, env = env(env), desc = desc, shuffle = shuffle,     error_call = error_call)
  46: FUN(X[[i]], ...)
  47: lapply(test_paths, test_one_file, env = env, desc = desc, shuffle = shuffle,     error_call = error_call)
  48: doTryCatch(return(expr), name, parentenv, handler)
  49: tryCatchOne(expr, names, parentenv, handlers[[1L]])
  50: tryCatchList(expr, classes, parentenv, handlers)
  51: tryCatch(code, testthat_abort_reporter = function(cnd) {    cat(conditionMessage(cnd), "\n")    NULL})
  52: with_reporter(reporters$multi, lapply(test_paths, test_one_file,     env = env, desc = desc, shuffle = shuffle, error_call = error_call))
  53: test_files_serial(test_dir = test_dir, test_package = test_package,     test_paths = test_paths, load_helpers = load_helpers, reporter = reporter,     env = env, stop_on_failure = stop_on_failure, stop_on_warning = stop_on_warning,     desc = desc, load_package = load_package, shuffle = shuffle,     error_call = error_call)
  54: test_files(test_dir = path, test_paths = test_paths, test_package = package,     reporter = reporter, load_helpers = load_helpers, env = env,     stop_on_failure = stop_on_failure, stop_on_warning = stop_on_warning,     load_package = load_package, parallel = parallel, shuffle = shuffle)
  55: test_dir("testthat", package = package, reporter = reporter,     ..., load_package = "installed")
  56: test_check("duckspatial")
  An irrecoverable exception occurred. R is aborting now ...
OK r-devel-linux-x86_64-fedora-gcc

*


            
OK r-devel-macos-arm64

*


            
OK r-devel-windows-x86_64

*


            
OK r-oldrel-macos-arm64

*


            
OK r-oldrel-macos-x86_64

*


            
OK r-oldrel-windows-x86_64

*


            
OK r-patched-linux-x86_64

*


            
OK r-release-linux-x86_64

*


            
OK r-release-macos-arm64

*


            
OK r-release-macos-x86_64

*


            
OK r-release-windows-x86_64

*


            

Check History

ERROR 13 OK · 0 NOTE · 0 WARNING · 1 ERROR · 0 FAILURE Mar 9, 2026
ERROR r-devel-linux-x86_64-fedora-clang

tests

  Running ‘testthat.R’ [10s/25s]
Running the tests in ‘tests/testthat.R’ failed.
Complete output:
  > # This file is part of the standard setup for testthat.
  > # It is recommended that you do not modify it.
  > #
  > # Where should you do additional test configuration?
  > # Learn more about the roles of various files in:
  > # * https://r-pkgs.org/testing-design.html#sec-tests-files-overview
  > # * https://testthat.r-lib.org/articles/special-files.html
  > 
  > library(testthat)
  > library(

Reverse Dependencies (1)

imports

Dependency Network

Dependencies Reverse dependencies arrow cli duckdb geoarrow DBI glue sf wk uuid rlang lifecycle cnefetools duckspatial

Version History

new 0.9.0 Mar 9, 2026